/ Hex Artifact Content
Login

Artifact 4bec828e70654c698ef843c29b557bee2c8a0a00:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 70  lite3VdbeMemPrep
0940: 61 72 65 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29  areToChange(P,M)
0950: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
0960: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
0970: 28 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (P,M).#endif../*
0980: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
0990: 67 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  g global variabl
09a0: 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  e is incremented
09b0: 20 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75   every time a cu
09c0: 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65  rsor.** moves, e
09d0: 69 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f  ither by the OP_
09e0: 53 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c  SeekXX, OP_Next,
09f0: 20 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f   or OP_Prev opco
0a00: 64 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a  des.  The test.*
0a10: 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  * procedures use
0a20: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0a30: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0a40: 68 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a  hat indices are.
0a50: 2a 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  ** working corre
0a60: 63 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69  ctly.  This vari
0a70: 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63  able has no func
0a80: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0a90: 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66  to.** help verif
0aa0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ab0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c  eration of the l
0ac0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ad0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ae0: 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  t sqlite3_search
0af0: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0b00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74  if../*.** When t
0b10: 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  his global varia
0b20: 62 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c  ble is positive,
0b30: 20 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65   it gets decreme
0b40: 6e 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65  nted once before
0b50: 0a 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63  .** each instruc
0b60: 74 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45  tion in the VDBE
0b70: 2e 20 20 57 68 65 6e 20 72 65 61 63 68 65 73 20  .  When reaches 
0b80: 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73 49  zero, the u1.isI
0b90: 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66 69  nterrupted.** fi
0ba0: 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74  eld of the sqlit
0bb0: 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73 20  e3 structure is 
0bc0: 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  set in order to 
0bd0: 73 69 6d 75 6c 61 74 65 20 61 6e 64 20 69 6e 74  simulate and int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c  em;}../*.** Call
1620: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
1630: 78 70 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74  xpandBlob() on t
1640: 68 65 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75  he supplied valu
1650: 65 20 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a  e (type Mem*).**
1660: 20 50 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a   P if required..
1670: 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e  */.#define Expan
1680: 64 42 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e  dBlob(P) (((P)->
1690: 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f  flags&MEM_Zero)?
16a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
16b0: 70 61 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a  pandBlob(P):0)..
16c0: 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70  /*.** Argument p
16d0: 4d 65 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20  Mem points at a 
16e0: 72 65 67 69 73 74 65 72 20 74 68 61 74 20 77 69  register that wi
16f0: 6c 6c 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  ll be passed to 
1700: 61 0a 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e 65  a.** user-define
1710: 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72 65  d function or re
1720: 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
1730: 65 72 20 61 73 20 74 68 65 20 72 65 73 75 6c 74  er as the result
1740: 20 6f 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a 20   of a query..** 
1750: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
1760: 73 20 74 68 65 20 70 4d 65 6d 2d 3e 74 79 70 65  s the pMem->type
1770: 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 62   variable used b
1780: 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  y the sqlite3_va
1790: 6c 75 65 5f 2a 28 29 20 0a 2a 2a 20 72 6f 75 74  lue_*() .** rout
17a0: 69 6e 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  ines..*/.void sq
17b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
17c0: 65 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29  eType(Mem *pMem)
17d0: 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20  {.  int flags = 
17e0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pMem->flags;.  i
17f0: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  f( flags & MEM_N
1800: 75 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  ull ){.    pMem-
1810: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 4e  >type = SQLITE_N
1820: 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  ULL;.  }.  else 
1830: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
1840: 49 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  Int ){.    pMem-
1850: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 49  >type = SQLITE_I
1860: 4e 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20 65 6c  NTEGER;.  }.  el
1870: 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d  se if( flags & M
1880: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
1890: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
18a0: 54 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a 20 20  TE_FLOAT;.  }.  
18b0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
18c0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
18d0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18e0: 49 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65 6c 73  ITE_TEXT;.  }els
18f0: 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  e{.    pMem->typ
1900: 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3b  e = SQLITE_BLOB;
1910: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  .  }.}../*.** Al
1920: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1930: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1940: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1950: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1960: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1970: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1980: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1990: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
19a0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
19b0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
19c0: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
19d0: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
19e0: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
19f0: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1a00: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1a10: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a30: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1a40: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1a50: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1a60: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1a70: 2f 2a 20 57 68 65 6e 20 64 61 74 61 62 61 73 65  /* When database
1a80: 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f   the cursor belo
1a90: 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f  ngs to, or -1 */
1aa0: 0a 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75  .  int isBtreeCu
1ab0: 72 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65  rsor     /* True
1ac0: 20 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61   for B-Tree.  Fa
1ad0: 6c 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  lse for pseudo-t
1ae0: 61 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a  able or vtab */.
1af0: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b00: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b10: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b20: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b30: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b40: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b50: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b60: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b70: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1b80: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1b90: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1ba0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bb0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1bc0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bd0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1be0: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1bf0: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c00: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c10: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c20: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c30: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c40: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c50: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c60: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c70: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1c80: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1c90: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1ca0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cb0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1cc0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cd0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1ce0: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1cf0: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d00: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d10: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d20: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d30: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d40: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d50: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d60: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d70: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1d80: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1d90: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1da0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1db0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1dc0: 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66  * Memory cells f
1dd0: 6f 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  or cursors are a
1de0: 6c 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20  llocated at the 
1df0: 74 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65  top of the addre
1e00: 73 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d  ss.  ** space. M
1e10: 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e  emory cell (p->n
1e20: 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73  Mem) corresponds
1e30: 20 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70   to cursor 0. Sp
1e40: 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72  ace for.  ** cur
1e50: 73 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64  sor 1 is managed
1e60: 20 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   by memory cell 
1e70: 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63  (p->nMem-1), etc
1e80: 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ..  */.  Mem *pM
1e90: 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d  em = &p->aMem[p-
1ea0: 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20  >nMem-iCur];..  
1eb0: 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62  int nByte;.  Vdb
1ec0: 65 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30  eCursor *pCx = 0
1ed0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20  ;.  nByte = .   
1ee0: 20 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66     ROUND8(sizeof
1ef0: 28 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20  (VdbeCursor)) + 
1f00: 0a 20 20 20 20 20 20 28 69 73 42 74 72 65 65 43  .      (isBtreeC
1f10: 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42 74 72  ursor?sqlite3Btr
1f20: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
1f30: 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e 46 69  ) + .      2*nFi
1f40: 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29 3b  eld*sizeof(u32);
1f50: 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75 72  ..  assert( iCur
1f60: 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f70: 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43   if( p->apCsr[iC
1f80: 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ur] ){.    sqlit
1f90: 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1fa0: 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75  (p, p->apCsr[iCu
1fb0: 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73  r]);.    p->apCs
1fc0: 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d  r[iCur] = 0;.  }
1fd0: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
1fe0: 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ==sqlite3VdbeMem
1ff0: 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65  Grow(pMem, nByte
2000: 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61  , 0) ){.    p->a
2010: 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78  pCsr[iCur] = pCx
2020: 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29   = (VdbeCursor*)
2030: 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d  pMem->z;.    mem
2040: 73 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65  set(pCx, 0, size
2050: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b  of(VdbeCursor));
2060: 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20  .    pCx->iDb = 
2070: 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46  iDb;.    pCx->nF
2080: 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20  ield = nField;. 
2090: 20 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29 7b     if( nField ){
20a0: 0a 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79 70  .      pCx->aTyp
20b0: 65 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65 6d  e = (u32 *)&pMem
20c0: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
20d0: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 5d 3b  f(VdbeCursor))];
20e0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69  .    }.    if( i
20f0: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
2100: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
2110: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
2120: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
2130: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
2140: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32  f(VdbeCursor))+2
2150: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
2160: 33 32 29 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  32)];.      sqli
2170: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65  te3BtreeCursorZe
2180: 72 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  ro(pCx->pCursor)
2190: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
21a0: 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a  turn pCx;.}../*.
21b0: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
21c0: 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  t a value into a
21d0: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
21e0: 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61  ntation if we ca
21f0: 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f  n.** do so witho
2200: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
2210: 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  mation.  In othe
2220: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
2230: 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20  string.** looks 
2240: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63  like a number, c
2250: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61  onvert it into a
2260: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20   number.  If it 
2270: 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b  does not.** look
2280: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
2290: 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a  leave it alone..
22a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
22b0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
22c0: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a  ity(Mem *pRec){.
22d0: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
22e0: 67 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d  gs & (MEM_Real|M
22f0: 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20  EM_Int))==0 ){. 
2300: 20 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65     double rValue
2310: 3b 0a 20 20 20 20 69 36 34 20 69 56 61 6c 75 65  ;.    i64 iValue
2320: 3b 0a 20 20 20 20 75 38 20 65 6e 63 20 3d 20 70  ;.    u8 enc = p
2330: 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 20 20 69 66  Rec->enc;.    if
2340: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ( (pRec->flags&M
2350: 45 4d 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74  EM_Str)==0 ) ret
2360: 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  urn;.    if( sql
2370: 69 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a  ite3AtoF(pRec->z
2380: 2c 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &rValue, pRec-
2390: 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65  >n, enc)==0 ) re
23a0: 74 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 30 3d  turn;.    if( 0=
23b0: 3d 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70  =sqlite3Atoi64(p
23c0: 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c  Rec->z, &iValue,
23d0: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29   pRec->n, enc) )
23e0: 7b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e  {.      pRec->u.
23f0: 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20  i = iValue;.    
2400: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
2410: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65   MEM_Int;.    }e
2420: 6c 73 65 7b 0a 20 20 20 20 20 20 70 52 65 63 2d  lse{.      pRec-
2430: 3e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  >r = rValue;.   
2440: 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c     pRec->flags |
2450: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20  = MEM_Real;.    
2460: 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  }.  }.}../*.** P
2470: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74  rocessing is det
2480: 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66  ermine by the af
2490: 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72  finity parameter
24a0: 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  :.**.** SQLITE_A
24b0: 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53  FF_INTEGER:.** S
24c0: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a  QLITE_AFF_REAL:.
24d0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ** SQLITE_AFF_NU
24e0: 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79  MERIC:.**    Try
24f0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63   to convert pRec
2500: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72   to an integer r
2510: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72  epresentation or
2520: 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69   a .**    floati
2530: 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65  ng-point represe
2540: 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e  ntation if an in
2550: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2560: 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f  tion.**    is no
2570: 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74  t possible.  Not
2580: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67  e that the integ
2590: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
25a0: 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79  n is.**    alway
25b0: 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65  s preferred, eve
25c0: 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74  n if the affinit
25d0: 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75  y is REAL, becau
25e0: 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65  se.**    an inte
25f0: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2600: 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65  on is more space
2610: 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69   efficient on di
2620: 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  sk..**.** SQLITE
2630: 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20  _AFF_TEXT:.**   
2640: 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   Convert pRec to
2650: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
2660: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51  tation..**.** SQ
2670: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a  LITE_AFF_NONE:.*
2680: 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65  *    No-op.  pRe
2690: 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  c is unchanged..
26a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
26b0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20  pplyAffinity(.  
26c0: 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20  Mem *pRec,      
26d0: 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
26e0: 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
26f0: 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20  ty to */.  char 
2700: 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f  affinity,      /
2710: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
2720: 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
2730: 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20    u8 enc        
2740: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69        /* Use thi
2750: 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  s text encoding 
2760: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69  */.){.  if( affi
2770: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
2780: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20  _TEXT ){.    /* 
2790: 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65  Only attempt the
27a0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54   conversion to T
27b0: 45 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20  EXT if there is 
27c0: 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65  an integer or re
27d0: 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  al.    ** repres
27e0: 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61  entation (blob a
27f0: 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67  nd NULL do not g
2800: 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75  et converted) bu
2810: 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20  t no string.    
2820: 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ** representatio
2830: 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  n..    */.    if
2840: 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67  ( 0==(pRec->flag
2850: 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70  s&MEM_Str) && (p
2860: 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  Rec->flags&(MEM_
2870: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29  Real|MEM_Int)) )
2880: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
2890: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
28a0: 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20  pRec, enc);.    
28b0: 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67  }.    pRec->flag
28c0: 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c  s &= ~(MEM_Real|
28d0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
28e0: 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d  e if( affinity!=
28f0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20  SQLITE_AFF_NONE 
2900: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  ){.    assert( a
2910: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2920: 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61  AFF_INTEGER || a
2930: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2940: 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20  AFF_REAL.       
2950: 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74        || affinit
2960: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y==SQLITE_AFF_NU
2970: 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70  MERIC );.    app
2980: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
2990: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28  y(pRec);.    if(
29a0: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
29b0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20  EM_Real ){.     
29c0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
29d0: 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63  gerAffinity(pRec
29e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  );.    }.  }.}..
29f0: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
2a00: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
2a10: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
2a20: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
2a30: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
2a40: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
2a50: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
2a60: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
2a70: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
2a80: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
2a90: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
2aa0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
2ab0: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
2ac0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
2ad0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
2ae0: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
2af0: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
2b00: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a  he argument..**.
2b10: 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20 45 58  ** This is an EX
2b20: 50 45 52 49 4d 45 4e 54 41 4c 20 61 70 69 20 61  PERIMENTAL api a
2b30: 6e 64 20 69 73 20 73 75 62 6a 65 63 74 20 74 6f  nd is subject to
2b40: 20 63 68 61 6e 67 65 20 6f 72 20 72 65 6d 6f 76   change or remov
2b50: 61 6c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  al..*/.int sqlit
2b60: 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63  e3_value_numeric
2b70: 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61  _type(sqlite3_va
2b80: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65  lue *pVal){.  Me
2b90: 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29  m *pMem = (Mem*)
2ba0: 70 56 61 6c 3b 0a 20 20 61 70 70 6c 79 4e 75 6d  pVal;.  applyNum
2bb0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2bc0: 6d 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  m);.  sqlite3Vdb
2bd0: 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 4d  eMemStoreType(pM
2be0: 65 6d 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 4d  em);.  return pM
2bf0: 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a  em->type;.}../*.
2c00: 2a 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73  ** Exported vers
2c10: 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69  ion of applyAffi
2c20: 6e 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65  nity(). This one
2c30: 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65   works on sqlite
2c40: 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f  3_value*, .** no
2c50: 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d  t the internal M
2c60: 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69  em* type..*/.voi
2c70: 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
2c80: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73  plyAffinity(.  s
2c90: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
2ca0: 61 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69  al, .  u8 affini
2cb0: 74 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b  ty, .  u8 enc.){
2cc0: 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  .  applyAffinity
2cd0: 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66  ((Mem *)pVal, af
2ce0: 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a  finity, enc);.}.
2cf0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2d00: 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65  EBUG./*.** Write
2d10: 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67 20 72   a nice string r
2d20: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
2d30: 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
2d40: 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e   cell pMem.** in
2d50: 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66 2c 20  to buffer zBuf, 
2d60: 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a  length nBuf..*/.
2d70: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
2d80: 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 4d  MemPrettyPrint(M
2d90: 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a  em *pMem, char *
2da0: 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20 2a 7a  zBuf){.  char *z
2db0: 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20 69 6e  Csr = zBuf;.  in
2dc0: 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67  t f = pMem->flag
2dd0: 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  s;..  static con
2de0: 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 65  st char *const e
2df0: 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22 28 58  ncnames[] = {"(X
2e00: 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31 36 4c  )", "(8)", "(16L
2e10: 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d 3b 0a  E)", "(16BE)"};.
2e20: 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42 6c 6f  .  if( f&MEM_Blo
2e30: 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  b ){.    int i;.
2e40: 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20 20 20      char c;.    
2e50: 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20  if( f & MEM_Dyn 
2e60: 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 7a 27  ){.      c = 'z'
2e70: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2e80: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
2e90: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
2ea0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
2eb0: 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20   f & MEM_Static 
2ec0: 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 74 27  ){.      c = 't'
2ed0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2ee0: 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45  (f & (MEM_Dyn|ME
2ef0: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
2f00: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
2f10: 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20  & MEM_Ephem ){. 
2f20: 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a 20 20       c = 'e';.  
2f30: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
2f40: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
2f50: 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20  _Dyn))==0 );.   
2f60: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 20   }else{.      c 
2f70: 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a 20 20  = 's';.    }..  
2f80: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2f90: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
2fa0: 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43 73 72  c", c);.    zCsr
2fb0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
2fc0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 73  n30(zCsr);.    s
2fd0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
2fe0: 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22  100, zCsr, "%d["
2ff0: 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20  , pMem->n);.    
3000: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3010: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3020: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36     for(i=0; i<16
3030: 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69   && i<pMem->n; i
3040: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
3050: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3060: 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28   zCsr, "%02X", (
3070: 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20  (int)pMem->z[i] 
3080: 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20  & 0xFF));.      
3090: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
30a0: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
30b0: 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30     }.    for(i=0
30c0: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
30d0: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
30e0: 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e   char z = pMem->
30f0: 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[i];.      if( 
3100: 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20  z<32 || z>126 ) 
3110: 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20  *zCsr++ = '.';. 
3120: 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b       else *zCsr+
3130: 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20  + = z;.    }..  
3140: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3150: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d  tf(100, zCsr, "]
3160: 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d  %s", encnames[pM
3170: 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a  em->enc]);.    z
3180: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3190: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
31a0: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65    if( f & MEM_Ze
31b0: 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ro ){.      sqli
31c0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
31d0: 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d  , zCsr,"+%dz",pM
31e0: 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20  em->u.nZero);.  
31f0: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3200: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3210: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43  );.    }.    *zC
3220: 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c  sr = '\0';.  }el
3230: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
3240: 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c  tr ){.    int j,
3250: 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20   k;.    zBuf[0] 
3260: 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66  = ' ';.    if( f
3270: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
3280: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a      zBuf[1] = 'z
3290: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
32a0: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
32b0: 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30  c|MEM_Ephem))==0
32c0: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   );.    }else if
32d0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63  ( f & MEM_Static
32e0: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
32f0: 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  ] = 't';.      a
3300: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3310: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
3320: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3330: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3340: 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  em ){.      zBuf
3350: 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20  [1] = 'e';.     
3360: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3370: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79  EM_Static|MEM_Dy
3380: 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  n))==0 );.    }e
3390: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  lse{.      zBuf[
33a0: 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a  1] = 's';.    }.
33b0: 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73      k = 2;.    s
33c0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
33d0: 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22  100, &zBuf[k], "
33e0: 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20  %d", pMem->n);. 
33f0: 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53     k += sqlite3S
3400: 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d  trlen30(&zBuf[k]
3410: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
3420: 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28   = '[';.    for(
3430: 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70  j=0; j<15 && j<p
3440: 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20  Mem->n; j++){.  
3450: 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d      u8 c = pMem-
3460: 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28  >z[j];.      if(
3470: 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78   c>=0x20 && c<0x
3480: 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42  7f ){.        zB
3490: 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20  uf[k++] = c;.   
34a0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
34b0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e    zBuf[k++] = '.
34c0: 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ';.      }.    }
34d0: 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d  .    zBuf[k++] =
34e0: 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65   ']';.    sqlite
34f0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26  3_snprintf(100,&
3500: 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65  zBuf[k], encname
3510: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
3520: 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53     k += sqlite3S
3530: 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d  trlen30(&zBuf[k]
3540: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
3550: 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64   = 0;.  }.}.#end
3560: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
3570: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72  E_DEBUG./*.** Pr
3580: 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  int the value of
3590: 20 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20   a register for 
35a0: 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73  tracing purposes
35b0: 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  :.*/.static void
35c0: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 46   memTracePrint(F
35d0: 49 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d 20 2a 70  ILE *out, Mem *p
35e0: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
35f0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
3600: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
3610: 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c   " NULL");.  }el
3620: 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  se if( (p->flags
3630: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3640: 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c  Str))==(MEM_Int|
3650: 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20  MEM_Str) ){.    
3660: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 73  fprintf(out, " s
3670: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3680: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  ;.  }else if( p-
3690: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
36a0: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
36b0: 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64 22 2c 20  out, " i:%lld", 
36c0: 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66  p->u.i);.#ifndef
36d0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
36e0: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65  ATING_POINT.  }e
36f0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3700: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3710: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
3720: 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29 3b 0a  " r:%g", p->r);.
3730: 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20 69  #endif.  }else i
3740: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3750: 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20 20 20  M_RowSet ){.    
3760: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 28  fprintf(out, " (
3770: 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c  rowset)");.  }el
3780: 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75  se{.    char zBu
3790: 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69  f[200];.    sqli
37a0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
37b0: 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a  Print(p, zBuf);.
37c0: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
37d0: 20 22 20 22 29 3b 0a 20 20 20 20 66 70 72 69 6e   " ");.    fprin
37e0: 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20 7a 42  tf(out, "%s", zB
37f0: 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69  uf);.  }.}.stati
3800: 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72 54  c void registerT
3810: 72 61 63 65 28 46 49 4c 45 20 2a 6f 75 74 2c 20  race(FILE *out, 
3820: 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70  int iReg, Mem *p
3830: 29 7b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74  ){.  fprintf(out
3840: 2c 20 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20  , "REG[%d] = ", 
3850: 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63  iReg);.  memTrac
3860: 65 50 72 69 6e 74 28 6f 75 74 2c 20 70 29 3b 0a  ePrint(out, p);.
3870: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3880: 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  \n");.}.#endif..
3890: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
38a0: 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45  BUG.#  define RE
38b0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d  GISTER_TRACE(R,M
38c0: 29 20 69 66 28 70 2d 3e 74 72 61 63 65 29 72 65  ) if(p->trace)re
38d0: 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74  gisterTrace(p->t
38e0: 72 61 63 65 2c 52 2c 4d 29 0a 23 65 6c 73 65 0a  race,R,M).#else.
38f0: 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54  #  define REGIST
3900: 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65  ER_TRACE(R,M).#e
3910: 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44  ndif...#ifdef VD
3920: 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a  BE_PROFILE../* .
3930: 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74  ** hwtime.h cont
3940: 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65  ains inline asse
3950: 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69  mbler code for i
3960: 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20  mplementing .** 
3970: 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65  high-performance
3980: 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73   timing routines
3990: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68  ..*/.#include "h
39a0: 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66  wtime.h"..#endif
39b0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48 45 43  ../*.** The CHEC
39c0: 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 20  K_FOR_INTERRUPT 
39d0: 6d 61 63 72 6f 20 64 65 66 69 6e 65 64 20 68 65  macro defined he
39e0: 72 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65 65 20  re looks to see 
39f0: 69 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  if the.** sqlite
3a00: 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 72 6f  3_interrupt() ro
3a10: 75 74 69 6e 65 20 68 61 73 20 62 65 65 6e 20 63  utine has been c
3a20: 61 6c 6c 65 64 2e 20 20 49 66 20 69 74 20 68 61  alled.  If it ha
3a30: 73 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20  s been, then.** 
3a40: 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 74 68  processing of th
3a50: 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 69  e VDBE program i
3a60: 73 20 69 6e 74 65 72 72 75 70 74 65 64 2e 0a 2a  s interrupted..*
3a70: 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20  *.** This macro 
3a80: 61 64 64 65 64 20 74 6f 20 65 76 65 72 79 20 69  added to every i
3a90: 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 61 74 20  nstruction that 
3aa0: 64 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e 20 6f  does a jump in o
3ab0: 72 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65  rder to.** imple
3ac0: 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20 54 68  ment a loop.  Th
3ad0: 69 73 20 74 65 73 74 20 75 73 65 64 20 74 6f 20  is test used to 
3ae0: 62 65 20 6f 6e 20 65 76 65 72 79 20 73 69 6e 67  be on every sing
3af0: 6c 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 0a  le instruction,.
3b00: 2a 2a 20 62 75 74 20 74 68 61 74 20 6d 65 61 6e  ** but that mean
3b10: 74 20 77 65 20 6d 6f 72 65 20 74 65 73 74 69 6e  t we more testin
3b20: 67 20 74 68 61 74 20 77 65 20 6e 65 65 64 65 64  g that we needed
3b30: 2e 20 20 42 79 20 6f 6e 6c 79 20 74 65 73 74 69  .  By only testi
3b40: 6e 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67 20 6f  ng the.** flag o
3b50: 6e 20 6a 75 6d 70 20 69 6e 73 74 72 75 63 74 69  n jump instructi
3b60: 6f 6e 73 2c 20 77 65 20 67 65 74 20 61 20 28 73  ons, we get a (s
3b70: 6d 61 6c 6c 29 20 73 70 65 65 64 20 69 6d 70 72  mall) speed impr
3b80: 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66  ovement..*/.#def
3b90: 69 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  ine CHECK_FOR_IN
3ba0: 54 45 52 52 55 50 54 20 5c 0a 20 20 20 69 66 28  TERRUPT \.   if(
3bb0: 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72   db->u1.isInterr
3bc0: 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f  upted ) goto abo
3bd0: 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72  rt_due_to_interr
3be0: 75 70 74 3b 0a 0a 0a 23 69 66 6e 64 65 66 20 4e  upt;...#ifndef N
3bf0: 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73  DEBUG./*.** This
3c00: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c   function is onl
3c10: 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  y called from wi
3c20: 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29  thin an assert()
3c30: 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a   expression. It.
3c40: 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74 20 74  ** checks that t
3c50: 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e  he sqlite3.nTran
3c60: 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65  saction variable
3c70: 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65   is correctly se
3c80: 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62  t to.** the numb
3c90: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
3ca0: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
3cb0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68   currently in th
3cc0: 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73  e .** linked lis
3cd0: 74 20 73 74 61 72 74 69 6e 67 20 61 74 20 73 71  t starting at sq
3ce0: 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74  lite3.pSavepoint
3cf0: 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a  ..** .** Usage:.
3d00: 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
3d10: 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74  ( checkSavepoint
3d20: 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a  Count(db) );.*/.
3d30: 73 74 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b  static int check
3d40: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73  SavepointCount(s
3d50: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69  qlite3 *db){.  i
3d60: 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65  nt n = 0;.  Save
3d70: 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28  point *p;.  for(
3d80: 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  p=db->pSavepoint
3d90: 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29  ; p; p=p->pNext)
3da0: 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20   n++;.  assert( 
3db0: 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69  n==(db->nSavepoi
3dc0: 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73  nt + db->isTrans
3dd0: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29  actionSavepoint)
3de0: 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a   );.  return 1;.
3df0: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
3e00: 54 72 61 6e 73 66 65 72 20 65 72 72 6f 72 20 6d  Transfer error m
3e10: 65 73 73 61 67 65 20 74 65 78 74 20 66 72 6f 6d  essage text from
3e20: 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
3e30: 2e 7a 45 72 72 4d 73 67 20 28 74 65 78 74 20 73  .zErrMsg (text s
3e40: 74 6f 72 65 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f  tored.** in memo
3e50: 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ry obtained from
3e60: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 29   sqlite3_malloc)
3e70: 20 69 6e 74 6f 20 61 20 56 64 62 65 2e 7a 45 72   into a Vdbe.zEr
3e80: 72 4d 73 67 20 28 74 65 78 74 20 73 74 6f 72 65  rMsg (text store
3e90: 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72 79 20 6f  d.** in memory o
3ea0: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
3eb0: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 29 2e 0a 2a  ite3DbMalloc)..*
3ec0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 69 6d  /.static void im
3ed0: 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 56  portVtabErrMsg(V
3ee0: 64 62 65 20 2a 70 2c 20 73 71 6c 69 74 65 33 5f  dbe *p, sqlite3_
3ef0: 76 74 61 62 20 2a 70 56 74 61 62 29 7b 0a 20 20  vtab *pVtab){.  
3f00: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d  sqlite3 *db = p-
3f10: 3e 64 62 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  >db;.  sqlite3Db
3f20: 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
3f30: 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d  Msg);.  p->zErrM
3f40: 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
3f50: 72 44 75 70 28 64 62 2c 20 70 56 74 61 62 2d 3e  rDup(db, pVtab->
3f60: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69  zErrMsg);.  sqli
3f70: 74 65 33 5f 66 72 65 65 28 70 56 74 61 62 2d 3e  te3_free(pVtab->
3f80: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 56 74 61  zErrMsg);.  pVta
3f90: 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
3fa0: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74  }.../*.** Execut
3fb0: 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56  e as much of a V
3fc0: 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77  DBE program as w
3fd0: 65 20 63 61 6e 20 74 68 65 6e 20 72 65 74 75 72  e can then retur
3fe0: 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  n..**.** sqlite3
3ff0: 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28 29 20  VdbeMakeReady() 
4000: 6d 75 73 74 20 62 65 20 63 61 6c 6c 65 64 20 62  must be called b
4010: 65 66 6f 72 65 20 74 68 69 73 20 72 6f 75 74 69  efore this routi
4020: 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
4030: 2a 20 63 6c 6f 73 65 20 74 68 65 20 70 72 6f 67  * close the prog
4040: 72 61 6d 20 77 69 74 68 20 61 20 66 69 6e 61 6c  ram with a final
4050: 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20 74 6f 20   OP_Halt and to 
4060: 73 65 74 20 75 70 20 74 68 65 20 63 61 6c 6c 62  set up the callb
4070: 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20  acks.** and the 
4080: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 70 6f  error message po
4090: 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  inter..**.** Whe
40a0: 6e 65 76 65 72 20 61 20 72 6f 77 20 6f 72 20 72  never a row or r
40b0: 65 73 75 6c 74 20 64 61 74 61 20 69 73 20 61 76  esult data is av
40c0: 61 69 6c 61 62 6c 65 2c 20 74 68 69 73 20 72 6f  ailable, this ro
40d0: 75 74 69 6e 65 20 77 69 6c 6c 20 65 69 74 68 65  utine will eithe
40e0: 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74 68 65 20  r.** invoke the 
40f0: 72 65 73 75 6c 74 20 63 61 6c 6c 62 61 63 6b 20  result callback 
4100: 28 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65  (if there is one
4110: 29 20 6f 72 20 72 65 74 75 72 6e 20 77 69 74 68  ) or return with
4120: 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f 57 2e 0a  .** SQLITE_ROW..
4130: 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61 74 74 65  **.** If an atte
4140: 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 6f  mpt is made to o
4150: 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20 64 61 74  pen a locked dat
4160: 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 69 73  abase, then this
4170: 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c   routine.** will
4180: 20 65 69 74 68 65 72 20 69 6e 76 6f 6b 65 20 74   either invoke t
4190: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
41a0: 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e   (if there is on
41b0: 65 29 20 6f 72 20 69 74 20 77 69 6c 6c 0a 2a 2a  e) or it will.**
41c0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42   return SQLITE_B
41d0: 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e  USY..**.** If an
41e0: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 61   error occurs, a
41f0: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
4200: 69 73 20 77 72 69 74 74 65 6e 20 74 6f 20 6d 65  is written to me
4210: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  mory obtained.**
4220: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
4230: 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d 3e 7a 45  lloc() and p->zE
4240: 72 72 4d 73 67 20 69 73 20 6d 61 64 65 20 74 6f  rrMsg is made to
4250: 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 6d   point to that m
4260: 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65 20 65 72  emory..** The er
4270: 72 6f 72 20 63 6f 64 65 20 69 73 20 73 74 6f 72  ror code is stor
4280: 65 64 20 69 6e 20 70 2d 3e 72 63 20 61 6e 64 20  ed in p->rc and 
4290: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74  this routine ret
42a0: 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 52 52 4f  urns SQLITE_ERRO
42b0: 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  R..**.** If the 
42c0: 63 61 6c 6c 62 61 63 6b 20 65 76 65 72 20 72 65  callback ever re
42d0: 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  turns non-zero, 
42e0: 74 68 65 6e 20 74 68 65 20 70 72 6f 67 72 61 6d  then the program
42f0: 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d 65 64 69   exits.** immedi
4300: 61 74 65 6c 79 2e 20 20 54 68 65 72 65 20 77 69  ately.  There wi
4310: 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f 72 20 6d  ll be no error m
4320: 65 73 73 61 67 65 20 62 75 74 20 74 68 65 20 70  essage but the p
4330: 2d 3e 72 63 20 66 69 65 6c 64 20 69 73 0a 2a 2a  ->rc field is.**
4340: 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 41   set to SQLITE_A
4350: 42 4f 52 54 20 61 6e 64 20 74 68 69 73 20 72 6f  BORT and this ro
4360: 75 74 69 6e 65 20 77 69 6c 6c 20 72 65 74 75 72  utine will retur
4370: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a  n SQLITE_ERROR..
4380: 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79 20 61  **.** A memory a
4390: 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72 6f 72 20  llocation error 
43a0: 63 61 75 73 65 73 20 70 2d 3e 72 63 20 74 6f 20  causes p->rc to 
43b0: 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  be set to SQLITE
43c0: 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68 69 73 0a  _NOMEM and this.
43d0: 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20 72 65  ** routine to re
43e0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
43f0: 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 66  R..**.** Other f
4400: 61 74 61 6c 20 65 72 72 6f 72 73 20 72 65 74 75  atal errors retu
4410: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e  rn SQLITE_ERROR.
4420: 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74 68 69  .**.** After thi
4430: 73 20 72 6f 75 74 69 6e 65 20 68 61 73 20 66 69  s routine has fi
4440: 6e 69 73 68 65 64 2c 20 73 71 6c 69 74 65 33 56  nished, sqlite3V
4450: 64 62 65 46 69 6e 61 6c 69 7a 65 28 29 20 73 68  dbeFinalize() sh
4460: 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73 65 64 20  ould be.** used 
4470: 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68 65 20  to clean up the 
4480: 6d 65 73 73 20 74 68 61 74 20 77 61 73 20 6c 65  mess that was le
4490: 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e  ft behind..*/.in
44a0: 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65  t sqlite3VdbeExe
44b0: 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20  c(.  Vdbe *p    
44c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44d0: 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29  /* The VDBE */.)
44e0: 7b 0a 20 20 69 6e 74 20 70 63 3d 30 3b 20 20 20  {.  int pc=0;   
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4500: 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f  * The program co
4510: 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20 2a 61  unter */.  Op *a
4520: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
4530: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4540: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
4550: 2a 70 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20  *pOp;           
4560: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
4570: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
4580: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
4590: 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20  E_OK;        /* 
45a0: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
45b0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
45c0: 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20   = p->db;       
45d0: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
45e0: 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68  */.  u8 resetSch
45f0: 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20  emaOnFault = 0; 
4600: 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20  /* Reset schema 
4610: 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69  after an error i
4620: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 65  f true */.  u8 e
4630: 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62  ncoding = ENC(db
4640: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61  );     /* The da
4650: 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20  tabase encoding 
4660: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4670: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
4680: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 63  CALLBACK.  int c
4690: 68 65 63 6b 50 72 6f 67 72 65 73 73 3b 20 20 20  heckProgress;   
46a0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
46b0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
46c0: 63 6b 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20  cks are enabled 
46d0: 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72 65  */.  int nProgre
46e0: 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20 20 20  ssOps = 0;      
46f0: 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65 63 75  /* Opcodes execu
4700: 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67 72 65  ted since progre
4710: 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a  ss callback. */.
4720: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d  #endif.  Mem *aM
4730: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20  em = p->aMem;   
4740: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70      /* Copy of p
4750: 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20  ->aMem */.  Mem 
4760: 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20  *pIn1 = 0;      
4770: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e         /* 1st in
4780: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
4790: 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20   Mem *pIn2 = 0; 
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
47b0: 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  nd input operand
47c0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20   */.  Mem *pIn3 
47d0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
47e0: 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70   /* 3rd input op
47f0: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
4800: 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20  pOut = 0;       
4810: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
4820: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  operand */.  int
4830: 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20   iCompare = 0;  
4840: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
4850: 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d  t of last OP_Com
4860: 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a  pare operation *
4870: 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74  /.  int *aPermut
4880: 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  e = 0;         /
4890: 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66  * Permutation of
48a0: 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f   columns for OP_
48b0: 43 6f 6d 70 61 72 65 20 2a 2f 0a 23 69 66 64 65  Compare */.#ifde
48c0: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
48d0: 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20   u64 start;     
48e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
48f0: 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61  PU clock count a
4900: 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64  t start of opcod
4910: 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50  e */.  int origP
4920: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
4930: 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75    /* Program cou
4940: 6e 74 65 72 20 61 74 20 73 74 61 72 74 20 6f 66  nter at start of
4950: 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
4960: 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20  f.  /*** INSERT 
4970: 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45  STACK UNION HERE
4980: 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28   ***/..  assert(
4990: 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f   p->magic==VDBE_
49a0: 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a  MAGIC_RUN );  /*
49b0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
49c0: 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f  verifies this */
49d0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75  .  sqlite3VdbeMu
49e0: 74 65 78 41 72 72 61 79 45 6e 74 65 72 28 70 29  texArrayEnter(p)
49f0: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53  ;.  if( p->rc==S
4a00: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
4a10: 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
4a20: 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ns if a malloc()
4a30: 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74   inside a call t
4a40: 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  o sqlite3_column
4a50: 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a  _text() or.    *
4a60: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
4a70: 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64  _text16() failed
4a80: 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e  .  */.    goto n
4a90: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73  o_mem;.  }.  ass
4aa0: 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  ert( p->rc==SQLI
4ab0: 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d  TE_OK || p->rc==
4ac0: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20  SQLITE_BUSY );. 
4ad0: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
4ae0: 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  OK;.  assert( p-
4af0: 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20  >explain==0 );. 
4b00: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
4b10: 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61   0;.  db->busyHa
4b20: 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b  ndler.nBusy = 0;
4b30: 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  .  CHECK_FOR_INT
4b40: 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65  ERRUPT;.  sqlite
4b50: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4b60: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
4b70: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
4b80: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68 65 63  _CALLBACK.  chec
4b90: 6b 50 72 6f 67 72 65 73 73 20 3d 20 64 62 2d 3e  kProgress = db->
4ba0: 78 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a 23 65  xProgress!=0;.#e
4bb0: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
4bc0: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4bd0: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4be0: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4bf0: 70 63 3d 3d 30 20 20 26 26 20 28 70 2d 3e 64 62  pc==0  && (p->db
4c00: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4c10: 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 21 3d 30  _VdbeListing)!=0
4c20: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
4c30: 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20     printf("VDBE 
4c40: 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a  Program Listing:
4c50: 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  \n");.    sqlite
4c60: 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29  3VdbePrintSql(p)
4c70: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
4c80: 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20  <p->nOp; i++){. 
4c90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4ca0: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
4cb0: 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20  i, &aOp[i]);.   
4cc0: 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33   }.  }.  sqlite3
4cd0: 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
4ce0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28  );.#endif.  for(
4cf0: 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51  pc=p->pc; rc==SQ
4d00: 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a  LITE_OK; pc++){.
4d10: 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
4d20: 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  0 && pc<p->nOp )
4d30: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61  ;.    if( db->ma
4d40: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
4d50: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66  o no_mem;.#ifdef
4d60: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
4d70: 20 20 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20    origPc = pc;. 
4d80: 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74     start = sqlit
4d90: 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64  e3Hwtime();.#end
4da0: 69 66 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f  if.    pOp = &aO
4db0: 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f  p[pc];..    /* O
4dc0: 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e  nly allow tracin
4dd0: 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  g if SQLITE_DEBU
4de0: 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20  G is defined..  
4df0: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
4e00: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
4e10: 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20   p->trace ){.   
4e20: 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a     if( pc==0 ){.
4e30: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
4e40: 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20 54  VDBE Execution T
4e50: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20  race:\n");.     
4e60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4e70: 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20  intSql(p);.     
4e80: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
4e90: 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74  VdbePrintOp(p->t
4ea0: 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a  race, pc, pOp);.
4eb0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
4ec0: 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63     ..    /* Chec
4ed0: 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e  k to see if we n
4ee0: 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20  eed to simulate 
4ef0: 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54  an interrupt.  T
4f00: 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  his only happens
4f10: 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61  .    ** if we ha
4f20: 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73  ve a special tes
4f30: 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a  t build..    */.
4f40: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
4f50: 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ST.    if( sqlit
4f60: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
4f70: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  nt>0 ){.      sq
4f80: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
4f90: 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69  count--;.      i
4fa0: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
4fb0: 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b  rupt_count==0 ){
4fc0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4fd0: 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a  _interrupt(db);.
4fe0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
4ff0: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
5000: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
5010: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20  SS_CALLBACK.    
5020: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
5030: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
5040: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
5050: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
5060: 65 64 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a  ed number.    **
5070: 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76   of VDBE ops hav
5080: 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20  e been executed 
5090: 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68  (either since th
50a0: 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  is invocation of
50b0: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  .    ** sqlite3V
50c0: 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e  dbeExec() or sin
50d0: 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65  ce last time the
50e0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
50f0: 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a  ck was called)..
5100: 20 20 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72      ** If the pr
5110: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
5120: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
5130: 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75  , exit the virtu
5140: 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a  al machine with.
5150: 20 20 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20      ** a return 
5160: 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52  code SQLITE_ABOR
5170: 54 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  T..    */.    if
5180: 28 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 20  ( checkProgress 
5190: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  ){.      if( db-
51a0: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e  >nProgressOps==n
51b0: 50 72 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20  ProgressOps ){. 
51c0: 20 20 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a         int prc;.
51d0: 20 20 20 20 20 20 20 20 70 72 63 20 3d 20 64 62          prc = db
51e0: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
51f0: 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b 0a 20  pProgressArg);. 
5200: 20 20 20 20 20 20 20 69 66 28 20 70 72 63 21 3d         if( prc!=
5210: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  0 ){.          r
5220: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
5230: 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20 20 20  RUPT;.          
5240: 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
5250: 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  halt;.        }.
5260: 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73          nProgres
5270: 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  sOps = 0;.      
5280: 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73  }.      nProgres
5290: 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65  sOps++;.    }.#e
52a0: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20  ndif..    /* On 
52b0: 61 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68 20  any opcode with 
52c0: 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c  the "out2-prerel
52d0: 61 73 65 22 20 74 61 67 2c 20 66 72 65 65 20 61  ase" tag, free a
52e0: 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65 72 6e  ny.    ** extern
52f0: 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f  al allocations o
5300: 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e  ut of mem[p2] an
5310: 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f  d set mem[p2] to
5320: 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e   be.    ** an un
5330: 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65 72 2e  defined integer.
5340: 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c 20 65    Opcodes will e
5350: 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20 74 68  ither fill in th
5360: 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a  e integer.    **
5370: 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72   value or conver
5380: 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64  t mem[p2] to a d
5390: 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e 0a 20  ifferent type.. 
53a0: 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
53b0: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d  ( pOp->opflags==
53c0: 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
53d0: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
53e0: 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  e] );.    if( pO
53f0: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5400: 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41  LG_OUT2_PRERELEA
5410: 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  SE ){.      asse
5420: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5430: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5440: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
5450: 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20  );.      pOut = 
5460: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
5470: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
5480: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
5490: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
54a0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65  beMemReleaseExte
54b0: 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  rnal(pOut);.    
54c0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
54d0: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a  MEM_Int;.    }..
54e0: 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68      /* Sanity ch
54f0: 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20  ecking on other 
5500: 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64  operands */.#ifd
5510: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
5520: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
5530: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
5540: 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  1)!=0 ){.      a
5550: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
5560: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5570: 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  ( pOp->p1<=p->nM
5580: 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  em );.      asse
5590: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
55a0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29  aMem[pOp->p1]) )
55b0: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
55c0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
55d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b  &aMem[pOp->p1]);
55e0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
55f0: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
5600: 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a  PFLG_IN2)!=0 ){.
5610: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5620: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
5630: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5640: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
5650: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
5660: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
5670: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p2]) );.      R
5680: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5690: 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p2, &aMem[pOp
56a0: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p2]);.    }.  
56b0: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
56c0: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  ags & OPFLG_IN3)
56d0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
56e0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
56f0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5700: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
5710: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5720: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
5730: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
5740: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5750: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
5760: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5770: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
5780: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5790: 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20  LG_OUT2)!=0 ){. 
57a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
57b0: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
57c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
57d0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
57e0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
57f0: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
5800: 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2]);.    }.   
5810: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
5820: 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29  gs & OPFLG_OUT3)
5830: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5840: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
5850: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5860: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
5870: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
5880: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
5890: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
58a0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20     }.#endif.  . 
58b0: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
58c0: 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a  opcode ){../****
58d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5900: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5910: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61  *********.** Wha
5920: 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d  t follows is a m
5930: 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73 74  assive switch st
5940: 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61  atement where ea
5950: 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e  ch case implemen
5960: 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65  ts a.** separate
5970: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20   instruction in 
5980: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
5990: 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c  ine.  If we foll
59a0: 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20  ow the usual.** 
59b0: 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76  indentation conv
59c0: 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61  entions, each ca
59d0: 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  se should be ind
59e0: 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63 65  ented by 6 space
59f0: 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20  s.  But.** that 
5a00: 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74  is a lot of wast
5a10: 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20  ed space on the 
5a20: 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f  left margin.  So
5a30: 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e   the code within
5a40: 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20 73  .** the switch s
5a50: 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72  tatement will br
5a60: 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74  eak with convent
5a70: 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68  ion and be flush
5a80: 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a  -left. Another.*
5a90: 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73  * big comment (s
5aa0: 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f  imilar to this o
5ab0: 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68  ne) will mark th
5ac0: 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63  e point in the c
5ad0: 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20  ode where.** we 
5ae0: 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20  transition back 
5af0: 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74  to normal indent
5b00: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ation..**.** The
5b10: 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65   formatting of e
5b20: 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f  ach case is impo
5b30: 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65  rtant.  The make
5b40: 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a  file for SQLite.
5b50: 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f  ** generates two
5b60: 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65   C files "opcode
5b70: 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65  s.h" and "opcode
5b80: 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67  s.c" by scanning
5b90: 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f   this.** file lo
5ba0: 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20  oking for lines 
5bb0: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
5bc0: 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65  "case OP_".  The
5bd0: 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73   opcodes.h files
5be0: 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c  .** will be fill
5bf0: 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65 73  ed with #defines
5c00: 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71 75   that give uniqu
5c10: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  e integer values
5c20: 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f   to each.** opco
5c30: 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64  de and the opcod
5c40: 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c  es.c file is fil
5c50: 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72 61  led with an arra
5c60: 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65  y of strings whe
5c70: 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e  re.** each strin
5c80: 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69  g is the symboli
5c90: 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63  c name for the c
5ca0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63  orresponding opc
5cb0: 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ode.  If the.** 
5cc0: 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69  case statement i
5cd0: 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
5ce0: 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66  comment of the f
5cf0: 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20  orm "/# same as 
5d00: 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20  ... #/".** that 
5d10: 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20  comment is used 
5d20: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
5d30: 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75   particular valu
5d40: 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e  e of the opcode.
5d50: 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79  .**.** Other key
5d60: 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d  words in the com
5d70: 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77  ment that follow
5d80: 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65 20  s each case are 
5d90: 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74  used to.** const
5da0: 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49  ruct the OPFLG_I
5db0: 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65  NITIALIZER value
5dc0: 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65   that initialize
5dd0: 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  s opcodeProperty
5de0: 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20  []..** Keywords 
5df0: 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e  include: in1, in
5e00: 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65  2, in3, out2_pre
5e10: 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f  release, out2, o
5e20: 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65  ut3.  See.** the
5e30: 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73   mkopcodeh.awk s
5e40: 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69  cript for additi
5e50: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
5e60: 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74  ..**.** Document
5e70: 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45  ation about VDBE
5e80: 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65   opcodes is gene
5e90: 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e  rated by scannin
5ea0: 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66  g this file.** f
5eb0: 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74  or lines of that
5ec0: 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65   contain "Opcode
5ed0: 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61  :".  That line a
5ee0: 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  nd all subsequen
5ef0: 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e  t.** comment lin
5f00: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74  es are used in t
5f10: 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
5f20: 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c   the opcode.html
5f30: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a   documentation.*
5f40: 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55  * file..**.** SU
5f50: 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  MMARY:.**.**    
5f60: 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69   Formatting is i
5f70: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69  mportant to scri
5f80: 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68  pts that scan th
5f90: 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20  is file..**     
5fa0: 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66  Do not deviate f
5fb0: 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69  rom the formatti
5fc0: 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74  ng style current
5fd0: 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  ly in use..**.**
5fe0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ff0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6000: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
6030: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a   Opcode:  Goto *
6040: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
6050: 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  An unconditional
6060: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
6070: 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74   P2..** The next
6080: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65   instruction exe
6090: 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a  cuted will be .*
60a0: 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64  * the one at ind
60b0: 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62  ex P2 from the b
60c0: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74  eginning of.** t
60d0: 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63  he program..*/.c
60e0: 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20  ase OP_Goto: {  
60f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6100: 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46 4f  mp */.  CHECK_FO
6110: 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  R_INTERRUPT;.  p
6120: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
6130: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6140: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6150: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6160: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6170: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6180: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6190: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
61a0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
61b0: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
61c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
61d0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
61e0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
61f0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
6200: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
6210: 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 6d 65  _Dyn)==0 );.  me
6220: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
6230: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  , pIn1);.  pIn1-
6240: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6250: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20  ;.  pIn1->u.i = 
6260: 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  pc;.  REGISTER_T
6270: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6280: 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d  n1);.  pc = pOp-
6290: 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b  >p2 - 1;.  break
62a0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
62b0: 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a   Return P1 * * *
62c0: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
62d0: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
62e0: 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20  ction after the 
62f0: 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73  address in regis
6300: 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  ter P1..*/.case 
6310: 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20  OP_Return: {    
6320: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
6330: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
6340: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6350: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
6360: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  & MEM_Int );.  p
6370: 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  c = (int)pIn1->u
6380: 2e 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  .i;.  break;.}..
6390: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c  /* Opcode:  Yiel
63a0: 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  d P1 * * * *.**.
63b0: 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f 67  ** Swap the prog
63c0: 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68  ram counter with
63d0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
63e0: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61  gister P1..*/.ca
63f0: 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20  se OP_Yield: {  
6400: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6410: 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74   */.  int pcDest
6420: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6430: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6440: 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ert( (pIn1->flag
6450: 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20  s & MEM_Dyn)==0 
6460: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
6470: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63   = MEM_Int;.  pc
6480: 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31  Dest = (int)pIn1
6490: 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75  ->u.i;.  pIn1->u
64a0: 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53  .i = pc;.  REGIS
64b0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
64c0: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d  1, pIn1);.  pc =
64d0: 20 70 63 44 65 73 74 3b 0a 20 20 62 72 65 61 6b   pcDest;.  break
64e0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
64f0: 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20   HaltIfNull  P1 
6500: 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
6510: 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65   Check the value
6520: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
6530: 20 20 49 66 20 69 73 20 69 73 20 4e 55 4c 4c 20    If is is NULL 
6540: 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a  then Halt using.
6550: 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c  ** parameter P1,
6560: 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69   P2, and P4 as i
6570: 66 20 74 68 69 73 20 77 65 72 65 20 61 20 48 61  f this were a Ha
6580: 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  lt instruction. 
6590: 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65   If the.** value
65a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
65b0: 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
65c0: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  n this routine i
65d0: 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
65e0: 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c  se OP_HaltIfNull
65f0: 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20  : {      /* in3 
6600: 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  */.  pIn3 = &aMe
6610: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
6620: 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
6630: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20   MEM_Null)==0 ) 
6640: 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
6650: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
6660: 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f  _Halt */.}../* O
6670: 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20  pcode:  Halt P1 
6680: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
6690: 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  Exit immediately
66a0: 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73  .  All open curs
66b0: 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f  ors, etc are clo
66c0: 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63  sed.** automatic
66d0: 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ally..**.** P1 i
66e0: 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64  s the result cod
66f0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
6700: 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71  lite3_exec(), sq
6710: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a  lite3_reset(),.*
6720: 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e  * or sqlite3_fin
6730: 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20  alize().  For a 
6740: 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69  normal halt, thi
6750: 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49  s should be SQLI
6760: 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f  TE_OK (0)..** Fo
6770: 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e  r errors, it can
6780: 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76   be some other v
6790: 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20  alue.  If P1!=0 
67a0: 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74  then P2 will det
67b0: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
67c0: 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c  r or not to roll
67d0: 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  back the current
67e0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44   transaction.  D
67f0: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a  o not rollback.*
6800: 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c  * if P2==OE_Fail
6810: 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63  . Do the rollbac
6820: 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c  k if P2==OE_Roll
6830: 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45  back.  If P2==OE
6840: 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20  _Abort,.** then 
6850: 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61  back out all cha
6860: 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f  nges that have o
6870: 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74  ccurred during t
6880: 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66  his execution of
6890: 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75   the.** VDBE, bu
68a0: 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63  t do not rollbac
68b0: 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
68c0: 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  n. .**.** If P4 
68d0: 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e  is not null then
68e0: 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   it is an error 
68f0: 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a  message string..
6900: 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61  **.** There is a
6910: 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20  n implied "Halt 
6920: 30 20 30 20 30 22 20 69 6e 73 74 72 75 63 74 69  0 0 0" instructi
6930: 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20 74  on inserted at t
6940: 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a  he very end of.*
6950: 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e  * every program.
6960: 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74    So a jump past
6970: 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75   the last instru
6980: 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f  ction of the pro
6990: 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73  gram.** is the s
69a0: 61 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e 67  ame as executing
69b0: 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   Halt..*/.case O
69c0: 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 69 66 28 20  P_Halt: {.  if( 
69d0: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
69e0: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
69f0: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
6a00: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
6a10: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
6a20: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
6a30: 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46  me. */.    VdbeF
6a40: 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70  rame *pFrame = p
6a50: 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d  ->pFrame;.    p-
6a60: 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
6a70: 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70  ->pParent;.    p
6a80: 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20  ->nFrame--;.    
6a90: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
6aa0: 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
6ab0: 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20  ange);.    pc = 
6ac0: 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65  sqlite3VdbeFrame
6ad0: 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b  Restore(pFrame);
6ae0: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
6af0: 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20  ==OE_Ignore ){. 
6b00: 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74       /* Instruct
6b10: 69 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50  ion pc is the OP
6b20: 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e  _Program that in
6b30: 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72  voked the sub-pr
6b40: 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20  ogram .      ** 
6b50: 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
6b60: 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70  halted. If the p
6b70: 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  2 instruction of
6b80: 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20   this OP_Halt.  
6b90: 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69      ** instructi
6ba0: 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f  on is set to OE_
6bb0: 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65  Ignore, then the
6bc0: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20   sub-program is 
6bd0: 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a  throwing.      *
6be0: 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65  * an IGNORE exce
6bf0: 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63  ption. In this c
6c00: 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20  ase jump to the 
6c10: 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65  address specifie
6c20: 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68  d.      ** as th
6c30: 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c  e p2 of the call
6c40: 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20  ing OP_Program. 
6c50: 20 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70   */.      pc = p
6c60: 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a  ->aOp[pc].p2-1;.
6c70: 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20      }.    aOp = 
6c80: 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d  p->aOp;.    aMem
6c90: 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
6ca0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 70 2d  break;.  }..  p-
6cb0: 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  >rc = pOp->p1;. 
6cc0: 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
6cd0: 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20  = (u8)pOp->p2;. 
6ce0: 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69   p->pc = pc;.  i
6cf0: 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  f( pOp->p4.z ){.
6d00: 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72      assert( p->r
6d10: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c!=SQLITE_OK );.
6d20: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
6d30: 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
6d40: 2c 20 64 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d  , db, "%s", pOp-
6d50: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 74 65 73 74  >p4.z);.    test
6d60: 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f  case( sqlite3Glo
6d70: 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d  balConfig.xLog!=
6d80: 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
6d90: 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61  _log(pOp->p1, "a
6da0: 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25  bort at %d in [%
6db0: 73 5d 3a 20 25 73 22 2c 20 70 63 2c 20 70 2d 3e  s]: %s", pc, p->
6dc0: 7a 53 71 6c 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  zSql, pOp->p4.z)
6dd0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  ;.  }else if( p-
6de0: 3e 72 63 20 29 7b 0a 20 20 20 20 74 65 73 74 63  >rc ){.    testc
6df0: 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62  ase( sqlite3Glob
6e00: 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30  alConfig.xLog!=0
6e10: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   );.    sqlite3_
6e20: 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 63 6f  log(pOp->p1, "co
6e30: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 20  nstraint failed 
6e40: 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 22 2c 20  at %d in [%s]", 
6e50: 70 63 2c 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20  pc, p->zSql);.  
6e60: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
6e70: 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61  VdbeHalt(p);.  a
6e80: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
6e90: 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51  E_BUSY || rc==SQ
6ea0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
6eb0: 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20  QLITE_ERROR );. 
6ec0: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
6ed0: 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72  BUSY ){.    p->r
6ee0: 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
6ef0: 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  BUSY;.  }else{. 
6f00: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
6f10: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72  QLITE_OK || p->r
6f20: 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  c==SQLITE_CONSTR
6f30: 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65  AINT );.    asse
6f40: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
6f50: 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72  K || db->nDeferr
6f60: 65 64 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20  edCons>0 );.    
6f70: 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c  rc = p->rc ? SQL
6f80: 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49  ITE_ERROR : SQLI
6f90: 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67  TE_DONE;.  }.  g
6fa0: 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
6fb0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6fc0: 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a  nteger P1 P2 * *
6fd0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d   *.**.** The 32-
6fe0: 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
6ff0: 65 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20  e P1 is written 
7000: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7010: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
7020: 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  eger: {         
7030: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
7040: 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e  se */.  pOut->u.
7050: 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62  i = pOp->p1;.  b
7060: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
7070: 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a  de: Int64 * P2 *
7080: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
7090: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
70a0: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
70b0: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
70c0: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
70d0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
70e0: 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b  case OP_Int64: {
70f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
7100: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7110: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7120: 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20  p4.pI64!=0 );.  
7130: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70  pOut->u.i = *pOp
7140: 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65  ->p4.pI64;.  bre
7150: 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
7160: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
7170: 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63  ING_POINT./* Opc
7180: 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a  ode: Real * P2 *
7190: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
71a0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
71b0: 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67   64-bit floating
71c0: 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a   point value..**
71d0: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
71e0: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
71f0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
7200: 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eal: {          
7210: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
7220: 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72  FLOAT, out2-prer
7230: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
7240: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65  ->flags = MEM_Re
7250: 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73  al;.  assert( !s
7260: 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70  qlite3IsNaN(*pOp
7270: 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20  ->p4.pReal) );. 
7280: 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d   pOut->r = *pOp-
7290: 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65  >p4.pReal;.  bre
72a0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
72b0: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38   Opcode: String8
72c0: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a   * P2 * P4 *.**.
72d0: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
72e0: 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64  a nul terminated
72f0: 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54   UTF-8 string. T
7300: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72  his opcode is tr
7310: 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e  ansformed .** in
7320: 74 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20  to an OP_String 
7330: 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65  before it is exe
7340: 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cuted for the fi
7350: 72 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73  rst time..*/.cas
7360: 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20  e OP_String8: { 
7370: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
7380: 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75  as TK_STRING, ou
7390: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
73a0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
73b0: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70  p4.z!=0 );.  pOp
73c0: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74  ->opcode = OP_St
73d0: 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20  ring;.  pOp->p1 
73e0: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
73f0: 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23  0(pOp->p4.z);..#
7400: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7410: 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65  IT_UTF16.  if( e
7420: 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f  ncoding!=SQLITE_
7430: 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d  UTF8 ){.    rc =
7440: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
7450: 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d  etStr(pOut, pOp-
7460: 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  >p4.z, -1, SQLIT
7470: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
7480: 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20  TATIC);.    if( 
7490: 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49  rc==SQLITE_TOOBI
74a0: 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67  G ) goto too_big
74b0: 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45  ;.    if( SQLITE
74c0: 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65  _OK!=sqlite3Vdbe
74d0: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
74e0: 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29  Out, encoding) )
74f0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
7500: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e    assert( pOut->
7510: 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a  zMalloc==pOut->z
7520: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
7530: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pOut->flags & ME
7540: 4d 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75  M_Dyn );.    pOu
7550: 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  t->zMalloc = 0;.
7560: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
7570: 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20  |= MEM_Static;. 
7580: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26     pOut->flags &
7590: 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20  = ~MEM_Dyn;.    
75a0: 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
75b0: 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20  =P4_DYNAMIC ){. 
75c0: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
75d0: 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ee(db, pOp->p4.z
75e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70  );.    }.    pOp
75f0: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59  ->p4type = P4_DY
7600: 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e  NAMIC;.    pOp->
7610: 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a  p4.z = pOut->z;.
7620: 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f      pOp->p1 = pO
7630: 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69  ut->n;.  }.#endi
7640: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
7650: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
7660: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
7670: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
7680: 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61  big;.  }.  /* Fa
7690: 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
76a0: 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f  e next case, OP_
76b0: 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f  String */.}.  ./
76c0: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
76d0: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
76e0: 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76  .** The string v
76f0: 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74  alue P4 of lengt
7700: 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20  h P1 (bytes) is 
7710: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
7720: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7730: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
7740: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
7750: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
7760: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
7770: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  0 );.  pOut->fla
7780: 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  gs = MEM_Str|MEM
7790: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
77a0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f  ;.  pOut->z = pO
77b0: 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d  p->p4.z;.  pOut-
77c0: 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  >n = pOp->p1;.  
77d0: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
77e0: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
77f0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
7800: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
7810: 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 2a  * Opcode: Null *
7820: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
7830: 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74  Write a NULL int
7840: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
7850: 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20  /.case OP_Null: 
7860: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
7870: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7880: 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  /.  pOut->flags 
7890: 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72  = MEM_Null;.  br
78a0: 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
78b0: 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a  de: Blob P1 P2 *
78c0: 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69   P4.**.** P4 poi
78d0: 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66  nts to a blob of
78e0: 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c   data P1 bytes l
78f0: 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73  ong.  Store this
7900: 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  .** blob in regi
7910: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
7920: 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20   OP_Blob: {     
7930: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
7940: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7950: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7960: 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58  p1 <= SQLITE_MAX
7970: 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c  _LENGTH );.  sql
7980: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
7990: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
79a0: 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30  z, pOp->p1, 0, 0
79b0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
79c0: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
79d0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
79e0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
79f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
7a00: 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20  ariable P1 P2 * 
7a10: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  P4 *.**.** Trans
7a20: 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f  fer the values o
7a30: 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65  f bound paramete
7a40: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
7a50: 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74  er P2.**.** If t
7a60: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
7a70: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20  named, then its 
7a80: 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20  name appears in 
7a90: 50 34 20 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a  P4 and P3==1..**
7aa0: 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73   The P4 value is
7ab0: 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
7ac0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
7ad0: 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  name()..*/.case 
7ae0: 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20  OP_Variable: {  
7af0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7b00: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7b10: 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20    Mem *pVar;    
7b20: 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e     /* Value bein
7b30: 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f  g transferred */
7b40: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
7b50: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
7b60: 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 70  <=p->nVar );.  p
7b70: 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70  Var = &p->aVar[p
7b80: 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69  Op->p1 - 1];.  i
7b90: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
7ba0: 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b  mTooBig(pVar) ){
7bb0: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
7bc0: 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  g;.  }.  sqlite3
7bd0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
7be0: 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d  py(pOut, pVar, M
7bf0: 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50  EM_Static);.  UP
7c00: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
7c10: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
7c20: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7c30: 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20  Move P1 P2 P3 * 
7c40: 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65  *.**.** Move the
7c50: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
7c60: 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  ter P1..P1+P3-1 
7c70: 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  over into.** reg
7c80: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
7c90: 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50  -1.  Registers P
7ca0: 31 2e 2e 50 31 2b 50 31 2d 31 20 61 72 65 0a 2a  1..P1+P1-1 are.*
7cb0: 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61  * left holding a
7cc0: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e   NULL.  It is an
7cd0: 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73   error for regis
7ce0: 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31  ter ranges.** P1
7cf0: 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32  ..P1+P3-1 and P2
7d00: 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65  ..P2+P3-1 to ove
7d10: 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rlap..*/.case OP
7d20: 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72 20  _Move: {.  char 
7d30: 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48  *zMalloc;   /* H
7d40: 6f 6c 64 69 6e 67 20 76 61 72 69 61 62 6c 65 20  olding variable 
7d50: 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65  for allocated me
7d60: 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  mory */.  int n;
7d70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
7d80: 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
7d90: 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a  s left to copy *
7da0: 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  /.  int p1;     
7db0: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
7dc0: 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f   to copy from */
7dd0: 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
7de0: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
7df0: 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20  to copy to */.. 
7e00: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
7e10: 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
7e20: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
7e30: 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70  assert( n>0 && p
7e40: 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20  1>0 && p2>0 );. 
7e50: 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70   assert( p1+n<=p
7e60: 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b  2 || p2+n<=p1 );
7e70: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
7e80: 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  [p1];.  pOut = &
7e90: 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 77 68 69 6c  aMem[p2];.  whil
7ea0: 65 28 20 6e 2d 2d 20 29 7b 0a 20 20 20 20 61 73  e( n-- ){.    as
7eb0: 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65  sert( pOut<=&aMe
7ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20  m[p->nMem] );.  
7ed0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d    assert( pIn1<=
7ee0: 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29  &aMem[p->nMem] )
7ef0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
7f00: 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
7f10: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
7f20: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
7f30: 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70  .    zMalloc = p
7f40: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  Out->zMalloc;.  
7f50: 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20    pOut->zMalloc 
7f60: 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
7f70: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
7f80: 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 70 49 6e  , pIn1);.    pIn
7f90: 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61  1->zMalloc = zMa
7fa0: 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54  lloc;.    REGIST
7fb0: 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70  ER_TRACE(p2++, p
7fc0: 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  Out);.    pIn1++
7fd0: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
7fe0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
7ff0: 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31   Opcode: Copy P1
8000: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
8010: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72  Make a copy of r
8020: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
8030: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
8040: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
8050: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70  ion makes a deep
8060: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
8070: 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65  ue.  A duplicate
8080: 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61  .** is made of a
8090: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
80a0: 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65  b constant.  See
80b0: 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a   also OP_SCopy..
80c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a  */.case OP_Copy:
80d0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
80e0: 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  * in1, out2 */. 
80f0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
8100: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
8110: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
8120: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
8130: 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74  =pIn1 );.  sqlit
8140: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
8150: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
8160: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 44   MEM_Ephem);.  D
8170: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
8180: 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ut);.  REGISTER_
8190: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
81a0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
81b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f  ../* Opcode: SCo
81c0: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
81d0: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c  *.** Make a shal
81e0: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69  low copy of regi
81f0: 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  ster P1 into reg
8200: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
8210: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
8220: 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77   makes a shallow
8230: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
8240: 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ue.  If the valu
8250: 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67  e.** is a string
8260: 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74   or blob, then t
8270: 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20  he copy is only 
8280: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
8290: 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64  .** original and
82a0: 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72   hence if the or
82b0: 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73  iginal changes s
82c0: 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e  o will the copy.
82d0: 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68  .** Worse, if th
82e0: 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65  e original is de
82f0: 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63  allocated, the c
8300: 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61  opy becomes inva
8310: 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65  lid..** Thus the
8320: 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75   program must gu
8330: 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65  arantee that the
8340: 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e   original will n
8350: 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72  ot change.** dur
8360: 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65  ing the lifetime
8370: 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55   of the copy.  U
8380: 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61  se OP_Copy to ma
8390: 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a  ke a complete.**
83a0: 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f   copy..*/.case O
83b0: 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  P_SCopy: {      
83c0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75        /* in1, ou
83d0: 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
83e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
83f0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
8400: 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
8410: 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a  ( pOut!=pIn1 );.
8420: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8430: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
8440: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
8450: 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  m);.#ifdef SQLIT
8460: 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
8470: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d  ut->pScopyFrom==
8480: 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  0 ) pOut->pScopy
8490: 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e  From = pIn1;.#en
84a0: 64 69 66 0a 20 20 52 45 47 49 53 54 45 52 5f 54  dif.  REGISTER_T
84b0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
84c0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
84d0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75  ./* Opcode: Resu
84e0: 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20  ltRow P1 P2 * * 
84f0: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  *.**.** The regi
8500: 73 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68  sters P1 through
8510: 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e   P1+P2-1 contain
8520: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
8530: 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69  .** results. Thi
8540: 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20  s opcode causes 
8550: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  the sqlite3_step
8560: 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69  () call to termi
8570: 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20  nate.** with an 
8580: 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72  SQLITE_ROW retur
8590: 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65  n code and it se
85a0: 74 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65  ts up the sqlite
85b0: 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74  3_stmt.** struct
85c0: 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61  ure to provide a
85d0: 63 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70  ccess to the top
85e0: 20 50 31 20 76 61 6c 75 65 73 20 61 73 20 74 68   P1 values as th
85f0: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e  e result.** row.
8600: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75  .*/.case OP_Resu
8610: 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a  ltRow: {.  Mem *
8620: 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  pMem;.  int i;. 
8630: 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73   assert( p->nRes
8640: 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20  Column==pOp->p2 
8650: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
8660: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p1>0 );.  asse
8670: 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  rt( pOp->p1+pOp-
8680: 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29  >p2<=p->nMem+1 )
8690: 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  ;..  /* If this 
86a0: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69  statement has vi
86b0: 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65  olated immediate
86c0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
86d0: 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a  straints, do.  *
86e0: 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65  * not return the
86f0: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
8700: 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f  modified. And do
8710: 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65   not RELEASE the
8720: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20   statement.  ** 
8730: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20  transaction. It 
8740: 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
8750: 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69  ed back.  */.  i
8760: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72  f( SQLITE_OK!=(r
8770: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
8780: 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b  heckFk(p, 0)) ){
8790: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
87a0: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
87b0: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61  untRows );.    a
87c0: 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74  ssert( p->usesSt
87d0: 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20  mtJournal );.   
87e0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
87f0: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
8800: 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69  CountRows flag i
8810: 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33  s set in sqlite3
8820: 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
8830: 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74  n .  ** DML stat
8840: 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68  ements invoke th
8850: 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74  is opcode to ret
8860: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
8870: 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64  f rows .  ** mod
8880: 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65  ified to the use
8890: 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  r. This is the o
88a0: 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56  nly way that a V
88b0: 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e  M that.  ** open
88c0: 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  s a statement tr
88d0: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e  ansaction may in
88e0: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
88f0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63  ..  **.  ** In c
8900: 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68  ase this is such
8910: 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c   a statement, cl
8920: 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  ose any statemen
8930: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  t transaction.  
8940: 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69  ** opened by thi
8950: 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75  s VM before retu
8960: 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f  rning control to
8970: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
8980: 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72  is to.  ** ensur
8990: 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74  e that statement
89a0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72  -transactions ar
89b0: 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c  e always nested,
89c0: 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67   not overlapping
89d0: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70  ..  ** If the op
89e0: 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  en statement-tra
89f0: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
8a00: 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65  closed here, the
8a10: 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20  n the user.  ** 
8a20: 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72  may step another
8a30: 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69   VM that opens i
8a40: 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74  ts own statement
8a50: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68   transaction. Th
8a60: 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64  is.  ** may lead
8a70: 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20   to overlapping 
8a80: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
8a90: 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ctions..  **.  *
8aa0: 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  * The statement 
8ab0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
8ac0: 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c  ever a top-level
8ad0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48   transaction.  H
8ae0: 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45  ence.  ** the RE
8af0: 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77  LEASE call below
8b00: 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
8b10: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
8b20: 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
8b30: 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51   || db->flags&SQ
8b40: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
8b50: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
8b60: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
8b70: 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f  nt(p, SAVEPOINT_
8b80: 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20  RELEASE);.  if( 
8b90: 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
8ba0: 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61  _OK) ){.    brea
8bb0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76  k;.  }..  /* Inv
8bc0: 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65  alidate all ephe
8bd0: 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77  meral cursor row
8be0: 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e   caches */.  p->
8bf0: 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63  cacheCtr = (p->c
8c00: 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a  acheCtr + 2)|1;.
8c10: 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
8c20: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
8c30: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61  he current row a
8c40: 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74  re \000 terminat
8c50: 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65  ed.  ** and have
8c60: 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70   an assigned typ
8c70: 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20  e.  The results 
8c80: 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c  are de-ephemeral
8c90: 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 73 20  ized as.  ** as 
8ca0: 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a  side effect..  *
8cb0: 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52  /.  pMem = p->pR
8cc0: 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d  esultSet = &aMem
8cd0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72  [pOp->p1];.  for
8ce0: 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b  (i=0; i<pOp->p2;
8cf0: 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72   i++){.    asser
8d00: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70  t( memIsValid(&p
8d10: 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44  Mem[i]) );.    D
8d20: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70  eephemeralize(&p
8d30: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73  Mem[i]);.    ass
8d40: 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c  ert( (pMem[i].fl
8d50: 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29  ags & MEM_Ephem)
8d60: 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20  ==0.            
8d70: 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  || (pMem[i].flag
8d80: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
8d90: 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20  _Blob))==0 );.  
8da0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8db0: 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d  NulTerminate(&pM
8dc0: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c 69  em[i]);.    sqli
8dd0: 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54  te3VdbeMemStoreT
8de0: 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  ype(&pMem[i]);. 
8df0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
8e00: 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d  E(pOp->p1+i, &pM
8e10: 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66  em[i]);.  }.  if
8e20: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
8e30: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
8e40: 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53  ;..  /* Return S
8e50: 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20  QLITE_ROW.  */. 
8e60: 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b   p->pc = pc + 1;
8e70: 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52  .  rc = SQLITE_R
8e80: 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  OW;.  goto vdbe_
8e90: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
8ea0: 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20  code: Concat P1 
8eb0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
8ec0: 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20  Add the text in 
8ed0: 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f  register P1 onto
8ee0: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
8ef0: 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73  text in.** regis
8f00: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
8f10: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
8f20: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
8f30: 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20  f either the P1 
8f40: 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e  or P2 text are N
8f50: 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e  ULL then store N
8f60: 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a  ULL in P3..**.**
8f70: 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31     P3 = P2 || P1
8f80: 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
8f90: 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20  egal for P1 and 
8fa0: 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d  P3 to be the sam
8fb0: 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65  e register. Some
8fc0: 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20  times,.** if P3 
8fd0: 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  is the same regi
8fe0: 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20  ster as P2, the 
8ff0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
9000: 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f  s able.** to avo
9010: 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a  id a memcpy()..*
9020: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74  /.case OP_Concat
9030: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
9040: 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43   same as TK_CONC
9050: 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AT, in1, in2, ou
9060: 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  t3 */.  i64 nByt
9070: 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  e;..  pIn1 = &aM
9080: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
9090: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
90a0: 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p2];.  pOut = &
90b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
90c0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70   assert( pIn1!=p
90d0: 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49  Out );.  if( (pI
90e0: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
90f0: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
9100: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
9110: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
9120: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
9130: 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70  k;.  }.  if( Exp
9140: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c  andBlob(pIn1) ||
9150: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
9160: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
9170: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
9180: 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
9190: 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20  Stringify(pIn2, 
91a0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79  encoding);.  nBy
91b0: 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70  te = pIn1->n + p
91c0: 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42  In2->n;.  if( nB
91d0: 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  yte>db->aLimit[S
91e0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
91f0: 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
9200: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d  too_big;.  }.  M
9210: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
9220: 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20  ut, MEM_Str);.  
9230: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
9240: 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e  emGrow(pOut, (in
9250: 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d  t)nByte+2, pOut=
9260: 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f  =pIn2) ){.    go
9270: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
9280: 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20   if( pOut!=pIn2 
9290: 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f  ){.    memcpy(pO
92a0: 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20  ut->z, pIn2->z, 
92b0: 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20  pIn2->n);.  }.  
92c0: 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b  memcpy(&pOut->z[
92d0: 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e  pIn2->n], pIn1->
92e0: 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70  z, pIn1->n);.  p
92f0: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20  Out->z[nByte] = 
9300: 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  0;.  pOut->z[nBy
9310: 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75  te+1] = 0;.  pOu
9320: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
9330: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Term;.  pOut->n 
9340: 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
9350: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
9360: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
9370: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
9380: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
9390: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31  * Opcode: Add P1
93a0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
93b0: 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69   Add the value i
93c0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
93d0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
93e0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
93f0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
9400: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
9410: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
9420: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
9430: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9440: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
9450: 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50  Multiply P1 P2 P
9460: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d  3 * *.**.**.** M
9470: 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75  ultiply the valu
9480: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
9490: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
94a0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
94b0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
94c0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
94d0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
94e0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
94f0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
9500: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
9510: 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50  e: Subtract P1 P
9520: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
9530: 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75  ubtract the valu
9540: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
9550: 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20   from the value 
9560: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
9570: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
9580: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
9590: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
95a0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
95b0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
95c0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
95d0: 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50  ode: Divide P1 P
95e0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 P3 * *.**.** D
95f0: 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20  ivide the value 
9600: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
9610: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
9620: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
9630: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
9640: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
9650: 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66  3 (P3=P2/P1). If
9660: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a   the value in .*
9670: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  * register P1 is
9680: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
9690: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  result is NULL. 
96a0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
96b0: 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
96c0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
96d0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
96e0: 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50  emainder P1 P2 P
96f0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  3 * *.**.** Comp
9700: 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ute the remainde
9710: 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20  r after integer 
9720: 64 69 76 69 73 69 6f 6e 20 6f 66 20 74 68 65 20  division of the 
9730: 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69  value in.** regi
9740: 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76  ster P1 by the v
9750: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9760: 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68   P2 and store th
9770: 65 20 72 65 73 75 6c 74 20 69 6e 20 50 33 2e 20  e result in P3. 
9780: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
9790: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
97a0: 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75  is zero the resu
97b0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49  lt is NULL..** I
97c0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
97d0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
97e0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
97f0: 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20  .case OP_Add:   
9800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9810: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c  /* same as TK_PL
9820: 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  US, in1, in2, ou
9830: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75  t3 */.case OP_Su
9840: 62 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20  btract:         
9850: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
9860: 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69  TK_MINUS, in1, i
9870: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
9880: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
9890: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
98a0: 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69  me as TK_STAR, i
98b0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
98c0: 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a  .case OP_Divide:
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98e0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c  /* same as TK_SL
98f0: 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  ASH, in1, in2, o
9900: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ut3 */.case OP_R
9910: 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20  emainder: {     
9920: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
9930: 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e   TK_REM, in1, in
9940: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74  2, out3 */.  int
9950: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
9960: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
9970: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
9980: 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36 34 20 69  nputs */.  i64 i
9990: 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  A;         /* In
99a0: 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c  teger value of l
99b0: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
99c0: 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20   i64 iB;        
99d0: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
99e0: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
99f0: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
9a00: 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  A;      /* Real 
9a10: 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70  value of left op
9a20: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
9a30: 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rB;      /* Re
9a40: 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68  al value of righ
9a50: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20  t operand */..  
9a60: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
9a70: 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75  ->p1];.  applyNu
9a80: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
9a90: 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  n1);.  pIn2 = &a
9aa0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
9ab0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
9ac0: 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f  nity(pIn2);.  pO
9ad0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
9ae0: 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70  p3];.  flags = p
9af0: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
9b00: 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  2->flags;.  if( 
9b10: 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  (flags & MEM_Nul
9b20: 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  l)!=0 ) goto ari
9b30: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
9b40: 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70  s_null;.  if( (p
9b50: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e  In1->flags & pIn
9b60: 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  2->flags & MEM_I
9b70: 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a  nt)==MEM_Int ){.
9b80: 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75      iA = pIn1->u
9b90: 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e  .i;.    iB = pIn
9ba0: 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69 74  2->u.i;.    swit
9bb0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
9bc0: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
9bd0: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 69 42  _Add:         iB
9be0: 20 2b 3d 20 69 41 3b 20 20 20 20 20 20 20 62 72   += iA;       br
9bf0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
9c00: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
9c10: 69 42 20 2d 3d 20 69 41 3b 20 20 20 20 20 20 20  iB -= iA;       
9c20: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
9c30: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
9c40: 20 20 69 42 20 2a 3d 20 69 41 3b 20 20 20 20 20    iB *= iA;     
9c50: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9c60: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
9c70: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
9c80: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
9c90: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
9ca0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  ull;.        /* 
9cb0: 44 69 76 69 64 69 6e 67 20 74 68 65 20 6c 61 72  Dividing the lar
9cc0: 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 6e 65  gest possible ne
9cd0: 67 61 74 69 76 65 20 36 34 2d 62 69 74 20 69 6e  gative 64-bit in
9ce0: 74 65 67 65 72 20 28 31 3c 3c 36 33 29 20 62 79  teger (1<<63) by
9cf0: 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 2d 31 20   .        ** -1 
9d00: 72 65 74 75 72 6e 73 20 61 6e 20 69 6e 74 65 67  returns an integ
9d10: 65 72 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20  er too large to 
9d20: 73 74 6f 72 65 20 69 6e 20 61 20 36 34 2d 62 69  store in a 64-bi
9d30: 74 20 64 61 74 61 2d 74 79 70 65 2e 20 4f 6e 0a  t data-type. On.
9d40: 20 20 20 20 20 20 20 20 2a 2a 20 73 6f 6d 65 20          ** some 
9d50: 61 72 63 68 69 74 65 63 74 75 72 65 73 2c 20 74  architectures, t
9d60: 68 65 20 76 61 6c 75 65 20 6f 76 65 72 66 6c 6f  he value overflo
9d70: 77 73 20 74 6f 20 28 31 3c 3c 36 33 29 2e 20 4f  ws to (1<<63). O
9d80: 6e 20 6f 74 68 65 72 73 2c 0a 20 20 20 20 20 20  n others,.      
9d90: 20 20 2a 2a 20 61 20 53 49 47 46 50 45 20 69 73    ** a SIGFPE is
9da0: 20 69 73 73 75 65 64 2e 20 54 68 65 20 66 6f 6c   issued. The fol
9db0: 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
9dc0: 20 6e 6f 72 6d 61 6c 69 7a 65 73 20 74 68 69 73   normalizes this
9dd0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 62 65 68 61  .        ** beha
9de0: 76 69 6f 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  vior so that all
9df0: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 20 62   architectures b
9e00: 65 68 61 76 65 20 61 73 20 69 66 20 69 6e 74 65  ehave as if inte
9e10: 67 65 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  ger .        ** 
9e20: 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 72 65  overflow occurre
9e30: 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  d..        */.  
9e40: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
9e50: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
9e60: 5f 49 4e 54 36 34 20 29 20 69 41 20 3d 20 31 3b  _INT64 ) iA = 1;
9e70: 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69  .        iB /= i
9e80: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
9e90: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
9ea0: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
9eb0: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
9ec0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
9ed0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
9ee0: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
9ef0: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
9f00: 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20      iB %= iA;.  
9f10: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9f20: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
9f30: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20  Out->u.i = iB;. 
9f40: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
9f50: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
9f60: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
9f70: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  A = sqlite3VdbeR
9f80: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  ealValue(pIn1);.
9f90: 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33      rB = sqlite3
9fa0: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
9fb0: 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  n2);.    switch(
9fc0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
9fd0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
9fe0: 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d  d:         rB +=
9ff0: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
a000: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
a010: 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20  Subtract:    rB 
a020: 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  -= rA;       bre
a030: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
a040: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72  P_Multiply:    r
a050: 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B *= rA;       b
a060: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
a070: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
a080: 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65        /* (double
a090: 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51  )0 In case of SQ
a0a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
a0b0: 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20  NG_POINT... */. 
a0c0: 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28         if( rA==(
a0d0: 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20  double)0 ) goto 
a0e0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a0f0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
a100: 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20     rB /= rA;.   
a110: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a120: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
a130: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20  t: {.        iA 
a140: 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20  = (i64)rA;.     
a150: 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b     iB = (i64)rB;
a160: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
a170: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
a180: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a190: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
a1a0: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
a1b0: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
a1c0: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
a1d0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
a1e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
a1f0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
a200: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
a210: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
a220: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
a230: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
a240: 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  M_Int);.#else.  
a250: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
a260: 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20  aN(rB) ){.      
a270: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
a280: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
a290: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
a2a0: 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53  r = rB;.    MemS
a2b0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
a2c0: 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20   MEM_Real);.    
a2d0: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
a2e0: 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
a2f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
a300: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f  tegerAffinity(pO
a310: 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ut);.    }.#endi
a320: 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  f.  }.  break;..
a330: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a340: 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c  t_is_null:.  sql
a350: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
a360: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ll(pOut);.  brea
a370: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
a380: 20 43 6f 6c 6c 53 65 71 20 2a 20 2a 20 50 34 0a   CollSeq * * P4.
a390: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
a3a0: 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53  inter to a CollS
a3b0: 65 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68  eq struct. If th
a3c0: 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61  e next call to a
a3d0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a   user function.*
a3e0: 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63  * or aggregate c
a3f0: 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46  alls sqlite3GetF
a400: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68  uncCollSeq(), th
a410: 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  is collation seq
a420: 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65  uence will.** be
a430: 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20   returned. This 
a440: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62  is used by the b
a450: 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d  uilt-in min(), m
a460: 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28  ax() and nullif(
a470: 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  ).** functions..
a480: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  **.** The interf
a490: 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20  ace used by the 
a4a0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
a4b0: 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69  f the aforementi
a4c0: 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  oned functions.*
a4d0: 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68  * to retrieve th
a4e0: 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
a4f0: 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73  ence set by this
a500: 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61   opcode is not a
a510: 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c  vailable.** publ
a520: 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73  icly, only to us
a530: 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66  er functions def
a540: 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a  ined in func.c..
a550: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53  */.case OP_CollS
a560: 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  eq: {.  assert( 
a570: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
a580: 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 62 72 65  COLLSEQ );.  bre
a590: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
a5a0: 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32  : Function P1 P2
a5b0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
a5c0: 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75  Invoke a user fu
a5d0: 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20  nction (P4 is a 
a5e0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e  pointer to a Fun
a5f0: 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20  ction structure 
a600: 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20  that.** defines 
a610: 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69  the function) wi
a620: 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  th P5 arguments 
a630: 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
a640: 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75  ter P2 and.** su
a650: 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72  ccessors.  The r
a660: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
a670: 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ction is stored 
a680: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
a690: 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d  ** Register P3 m
a6a0: 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f  ust not be one o
a6b0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
a6c0: 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nputs..**.** P1 
a6d0: 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d  is a 32-bit bitm
a6e0: 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ask indicating w
a6f0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61  hether or not ea
a700: 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  ch argument to t
a710: 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  he .** function 
a720: 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74  was determined t
a730: 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74  o be constant at
a740: 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49   compile time. I
a750: 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  f the first.** a
a760: 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73  rgument was cons
a770: 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20  tant then bit 0 
a780: 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68  of P1 is set. Th
a790: 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  is is used to de
a7a0: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
a7b0: 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73  er meta data ass
a7c0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75  ociated with a u
a7d0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  ser function arg
a7e0: 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a  ument using the.
a7f0: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ** sqlite3_set_a
a800: 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79  uxdata() API may
a810: 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69   be safely retai
a820: 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ned until the ne
a830: 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  xt.** invocation
a840: 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   of this opcode.
a850: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
a860: 20 41 67 67 53 74 65 70 20 61 6e 64 20 41 67 67   AggStep and Agg
a870: 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50  Final.*/.case OP
a880: 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69  _Function: {.  i
a890: 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  nt i;.  Mem *pAr
a8a0: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  g;.  sqlite3_con
a8b0: 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69  text ctx;.  sqli
a8c0: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61  te3_value **apVa
a8d0: 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e  l;.  int n;..  n
a8e0: 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70   = pOp->p5;.  ap
a8f0: 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
a900: 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
a910: 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61 73 73  || n==0 );.  ass
a920: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
a930: 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
a940: 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  em );.  pOut = &
a950: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
a960: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
a970: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 61  e(p, pOut);..  a
a980: 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28  ssert( n==0 || (
a990: 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
a9a0: 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b  ->p2+n<=p->nMem+
a9b0: 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
a9c0: 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20  pOp->p3<pOp->p2 
a9d0: 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
a9e0: 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20  >p2+n );.  pArg 
a9f0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
aa00: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
aa10: 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a  ; i++, pArg++){.
aa20: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
aa30: 73 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b 0a  sValid(pArg) );.
aa40: 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70      apVal[i] = p
aa50: 41 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  Arg;.    Deephem
aa60: 65 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a 20  eralize(pArg);. 
aa70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
aa80: 6d 53 74 6f 72 65 54 79 70 65 28 70 41 72 67 29  mStoreType(pArg)
aa90: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
aaa0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20  RACE(pOp->p2+i, 
aab0: 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73  pArg);.  }..  as
aac0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
aad0: 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c  e==P4_FUNCDEF ||
aae0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
aaf0: 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a 20 20 69  _VDBEFUNC );.  i
ab00: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
ab10: 50 34 5f 46 55 4e 43 44 45 46 20 29 7b 0a 20 20  P4_FUNCDEF ){.  
ab20: 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
ab30: 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20  p->p4.pFunc;.   
ab40: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d   ctx.pVdbeFunc =
ab50: 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
ab60: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d   ctx.pVdbeFunc =
ab70: 20 28 56 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d   (VdbeFunc*)pOp-
ab80: 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20  >p4.pVdbeFunc;. 
ab90: 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 63     ctx.pFunc = c
aba0: 74 78 2e 70 56 64 62 65 46 75 6e 63 2d 3e 70 46  tx.pVdbeFunc->pF
abb0: 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 63 74 78 2e  unc;.  }..  ctx.
abc0: 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  s.flags = MEM_Nu
abd0: 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d  ll;.  ctx.s.db =
abe0: 20 64 62 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65   db;.  ctx.s.xDe
abf0: 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a  l = 0;.  ctx.s.z
ac00: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a 20 20 2f  Malloc = 0;..  /
ac10: 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c  * The output cel
ac20: 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61  l may already ha
ac30: 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f  ve a buffer allo
ac40: 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a  cated. Move.  **
ac50: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20   the pointer to 
ac60: 63 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65  ctx.s so in case
ac70: 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
ac80: 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20  on can use.  ** 
ac90: 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f  the already allo
aca0: 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73  cated buffer ins
acb0: 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69  tead of allocati
acc0: 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20  ng a new one..  
acd0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
ace0: 4d 65 6d 4d 6f 76 65 28 26 63 74 78 2e 73 2c 20  MemMove(&ctx.s, 
acf0: 70 4f 75 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54  pOut);.  MemSetT
ad00: 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20  ypeFlag(&ctx.s, 
ad10: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74  MEM_Null);..  ct
ad20: 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20  x.isError = 0;. 
ad30: 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
ad40: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  flags & SQLITE_F
ad50: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a  UNC_NEEDCOLL ){.
ad60: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
ad70: 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72  aOp );.    asser
ad80: 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70  t( pOp[-1].p4typ
ad90: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
ada0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
adb0: 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
adc0: 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63  CollSeq );.    c
add0: 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d  tx.pColl = pOp[-
ade0: 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d  1].p4.pColl;.  }
adf0: 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e  .  (*ctx.pFunc->
ae00: 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20  xFunc)(&ctx, n, 
ae10: 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20  apVal); /* IMP: 
ae20: 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
ae30: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
ae40: 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 2f  cFailed ){.    /
ae50: 2a 20 45 76 65 6e 20 74 68 6f 75 67 68 20 61 20  * Even though a 
ae60: 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20 66 61 69  malloc() has fai
ae70: 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65  led, the impleme
ae80: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20  ntation of the. 
ae90: 20 20 20 2a 2a 20 75 73 65 72 20 66 75 6e 63 74     ** user funct
aea0: 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 61 6c  ion may have cal
aeb0: 6c 65 64 20 61 6e 20 73 71 6c 69 74 65 33 5f 72  led an sqlite3_r
aec0: 65 73 75 6c 74 5f 58 58 58 28 29 20 66 75 6e 63  esult_XXX() func
aed0: 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f 20 72  tion.    ** to r
aee0: 65 74 75 72 6e 20 61 20 76 61 6c 75 65 2e 20 54  eturn a value. T
aef0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
af00: 6c 20 72 65 6c 65 61 73 65 73 20 61 6e 79 20 72  l releases any r
af10: 65 73 6f 75 72 63 65 73 0a 20 20 20 20 2a 2a 20  esources.    ** 
af20: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
af30: 73 75 63 68 20 61 20 76 61 6c 75 65 2e 0a 20 20  such a value..  
af40: 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
af50: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
af60: 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f  ctx.s);.    goto
af70: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
af80: 2f 2a 20 49 66 20 61 6e 79 20 61 75 78 69 6c 69  /* If any auxili
af90: 61 72 79 20 64 61 74 61 20 66 75 6e 63 74 69 6f  ary data functio
afa0: 6e 73 20 68 61 76 65 20 62 65 65 6e 20 63 61 6c  ns have been cal
afb0: 6c 65 64 20 62 79 20 74 68 69 73 20 75 73 65 72  led by this user
afc0: 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20   function,.  ** 
afd0: 69 6d 6d 65 64 69 61 74 65 6c 79 20 63 61 6c 6c  immediately call
afe0: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 20   the destructor 
aff0: 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74  for any non-stat
b000: 69 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a  ic values..  */.
b010: 20 20 69 66 28 20 63 74 78 2e 70 56 64 62 65 46    if( ctx.pVdbeF
b020: 75 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  unc ){.    sqlit
b030: 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78 44  e3VdbeDeleteAuxD
b040: 61 74 61 28 63 74 78 2e 70 56 64 62 65 46 75 6e  ata(ctx.pVdbeFun
b050: 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  c, pOp->p1);.   
b060: 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75   pOp->p4.pVdbeFu
b070: 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75  nc = ctx.pVdbeFu
b080: 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74  nc;.    pOp->p4t
b090: 79 70 65 20 3d 20 50 34 5f 56 44 42 45 46 55 4e  ype = P4_VDBEFUN
b0a0: 43 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  C;.  }..  /* If 
b0b0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  the function ret
b0c0: 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20  urned an error, 
b0d0: 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69  throw an excepti
b0e0: 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e  on */.  if( ctx.
b0f0: 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73  isError ){.    s
b100: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
b110: 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
b120: 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
b130: 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73  alue_text(&ctx.s
b140: 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78  ));.    rc = ctx
b150: 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  .isError;.  }.. 
b160: 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
b170: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
b180: 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ion into registe
b190: 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65  r P3 */.  sqlite
b1a0: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
b1b0: 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f  ing(&ctx.s, enco
b1c0: 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  ding);.  sqlite3
b1d0: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
b1e0: 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28  , &ctx.s);.  if(
b1f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
b200: 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20  ooBig(pOut) ){. 
b210: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
b220: 0a 20 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f  .  }.  REGISTER_
b230: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
b240: 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
b250: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
b260: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
b270: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64  * Opcode: BitAnd
b280: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b290: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
b2a0: 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65  -wise AND of the
b2b0: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
b2c0: 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
b2d0: 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72  d.** store the r
b2e0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b2f0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b300: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b310: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b320: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b330: 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20  de: BitOr P1 P2 
b340: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
b350: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f  e the bit-wise O
b360: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
b370: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
b380: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
b390: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b3a0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b3b0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b3c0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b3d0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b3e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
b3f0: 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a  tLeft P1 P2 P3 *
b400: 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74   *.**.** Shift t
b410: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
b420: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
b430: 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74  to the left by t
b440: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
b450: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
b460: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
b470: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
b480: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
b490: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b4a0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b4b0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b4c0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b4d0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b4e0: 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32  ShiftRight P1 P2
b4f0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68   P3 * *.**.** Sh
b500: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
b510: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b520: 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68  r P2 to the righ
b530: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
b540: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
b550: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
b560: 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  ger in register 
b570: 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  P1..** Store the
b580: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b590: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b5a0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b5b0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b5c0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
b5d0: 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20  OP_BitAnd:      
b5e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b5f0: 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c  me as TK_BITAND,
b600: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b610: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72  */.case OP_BitOr
b620: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b630: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b640: 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32  _BITOR, in1, in2
b650: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b660: 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20  P_ShiftLeft:    
b670: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b680: 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20  e as TK_LSHIFT, 
b690: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b6a0: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52  /.case OP_ShiftR
b6b0: 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ight: {         
b6c0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b6d0: 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  RSHIFT, in1, in2
b6e0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
b6f0: 61 3b 0a 20 20 69 36 34 20 62 3b 0a 0a 20 20 70  a;.  i64 b;..  p
b700: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
b710: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
b720: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
b730: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
b740: 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
b750: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
b760: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
b770: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
b780: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
b790: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
b7a0: 61 6b 3b 0a 20 20 7d 0a 20 20 61 20 3d 20 73 71  ak;.  }.  a = sq
b7b0: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
b7c0: 65 28 70 49 6e 32 29 3b 0a 20 20 62 20 3d 20 73  e(pIn2);.  b = s
b7d0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
b7e0: 75 65 28 70 49 6e 31 29 3b 0a 20 20 73 77 69 74  ue(pIn1);.  swit
b7f0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
b800: 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42  ){.    case OP_B
b810: 69 74 41 6e 64 3a 20 20 20 20 20 20 61 20 26 3d  itAnd:      a &=
b820: 20 62 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20   b;     break;. 
b830: 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74 4f 72     case OP_BitOr
b840: 3a 20 20 20 20 20 20 20 61 20 7c 3d 20 62 3b 20  :       a |= b; 
b850: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
b860: 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74  ase OP_ShiftLeft
b870: 3a 20 20 20 61 20 3c 3c 3d 20 62 3b 20 20 20 20  :   a <<= b;    
b880: 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75  break;.    defau
b890: 6c 74 3a 20 20 61 73 73 65 72 74 28 20 70 4f 70  lt:  assert( pOp
b8a0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 68 69  ->opcode==OP_Shi
b8b0: 66 74 52 69 67 68 74 20 29 3b 0a 20 20 20 20 20  ftRight );.     
b8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8d0: 20 20 20 20 61 20 3e 3e 3d 20 62 3b 20 20 20 20      a >>= b;    
b8e0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4f 75  break;.  }.  pOu
b8f0: 74 2d 3e 75 2e 69 20 3d 20 61 3b 0a 20 20 4d 65  t->u.i = a;.  Me
b900: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
b910: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62  t, MEM_Int);.  b
b920: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
b930: 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50  de: AddImm  P1 P
b940: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41  2 * * *.** .** A
b950: 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  dd the constant 
b960: 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P2 to the value 
b970: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
b980: 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73  ** The result is
b990: 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67   always an integ
b9a0: 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72  er..**.** To for
b9b0: 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20  ce any register 
b9c0: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
b9d0: 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f  , just add 0..*/
b9e0: 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a  .case OP_AddImm:
b9f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
ba00: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
ba10: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
ba20: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
ba30: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
ba40: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
ba50: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
ba60: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
ba70: 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b  Op->p2;.  break;
ba80: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
ba90: 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a  ustBeInt P1 P2 *
baa0: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63   * *.** .** Forc
bab0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
bac0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
bad0: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
bae0: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
baf0: 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P1 is not an in
bb00: 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74  teger and cannot
bb10: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
bb20: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  to an integer.**
bb30: 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f   without data lo
bb40: 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  ss, then jump im
bb50: 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c  mediately to P2,
bb60: 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20   or if P2==0.** 
bb70: 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  raise an SQLITE_
bb80: 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69  MISMATCH excepti
bb90: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  on..*/.case OP_M
bba0: 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20  ustBeInt: {     
bbb0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
bbc0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
bbd0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
bbe0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
bbf0: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 61  ge(p, pIn1);.  a
bc00: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
bc10: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
bc20: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
bc30: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
bc40: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
bc50: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f  =0 ){.    if( pO
bc60: 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
bc70: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49    rc = SQLITE_MI
bc80: 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 67 6f  SMATCH;.      go
bc90: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
bca0: 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
bcb0: 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
bcc0: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
bcd0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4d 65 6d    }else{.    Mem
bce0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31  SetTypeFlag(pIn1
bcf0: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a  , MEM_Int);.  }.
bd00: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
bd10: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
bd20: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f  FLOATING_POINT./
bd30: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66  * Opcode: RealAf
bd40: 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20  finity P1 * * * 
bd50: 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73  *.**.** If regis
bd60: 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20  ter P1 holds an 
bd70: 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20  integer convert 
bd80: 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c  it to a real val
bd90: 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ue..**.** This o
bda0: 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77 68  pcode is used wh
bdb0: 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e  en extracting in
bdc0: 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61  formation from a
bdd0: 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20   column that.** 
bde0: 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74  has REAL affinit
bdf0: 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20  y.  Such column 
be00: 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c  values may still
be10: 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a   be stored as.**
be20: 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73   integers, for s
be30: 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c  pace efficiency,
be40: 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72 61   but after extra
be50: 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68  ction we want th
be60: 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e  em.** to have on
be70: 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e  ly a real value.
be80: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
be90: 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20  Affinity: {     
bea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
beb0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
bec0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
bed0: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
bee0: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  s & MEM_Int ){. 
bef0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
bf00: 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a  mRealify(pIn1);.
bf10: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
bf20: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
bf30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a  QLITE_OMIT_CAST.
bf40: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65 78  /* Opcode: ToTex
bf50: 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  t P1 * * * *.**.
bf60: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
bf70: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
bf80: 31 20 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a 2a  1 to be text..**
bf90: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
bfa0: 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72   numeric, conver
bfb0: 74 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67  t it to a string
bfc0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
bfd0: 75 69 76 61 6c 65 6e 74 20 6f 66 20 70 72 69 6e  uivalent of prin
bfe0: 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c 75  tf().  Blob valu
bff0: 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67 65 64  es are unchanged
c000: 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74 65   and.** are afte
c010: 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20 69 6e  rwards simply in
c020: 74 65 72 70 72 65 74 65 64 20 61 73 20 74 65 78  terpreted as tex
c030: 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  t..**.** A NULL 
c040: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c050: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c060: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c070: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c080: 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20 20  OP_ToText: {    
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c0a0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 54   same as TK_TO_T
c0b0: 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  EXT, in1 */.  pI
c0c0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c0d0: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
c0e0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
c0f0: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
c100: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
c110: 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65 72 74   break;.  assert
c120: 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f  ( MEM_Str==(MEM_
c130: 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49  Blob>>3) );.  pI
c140: 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49  n1->flags |= (pI
c150: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c  n1->flags&MEM_Bl
c160: 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41  ob)>>3;.  applyA
c170: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51  ffinity(pIn1, SQ
c180: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65  LITE_AFF_TEXT, e
c190: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d  ncoding);.  rc =
c1a0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
c1b0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
c1c0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  1->flags & MEM_S
c1d0: 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63  tr || db->malloc
c1e0: 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31  Failed );.  pIn1
c1f0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
c200: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
c210: 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29  M_Blob|MEM_Zero)
c220: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
c230: 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
c240: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
c250: 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31 20  code: ToBlob P1 
c260: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
c270: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
c280: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
c290: 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66  be a BLOB..** If
c2a0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75   the value is nu
c2b0: 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69  meric, convert i
c2c0: 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 66 69  t to a string fi
c2d0: 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73 20  rst..** Strings 
c2e0: 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69 6e 74  are simply reint
c2f0: 65 72 70 72 65 74 65 64 20 61 73 20 62 6c 6f 62  erpreted as blob
c300: 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e 67 65  s with no change
c310: 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64 65 72  .** to the under
c320: 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a  lying data..**.*
c330: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
c340: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
c350: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
c360: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
c370: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42 6c  .*/.case OP_ToBl
c380: 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ob: {           
c390: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c3a0: 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e  s TK_TO_BLOB, in
c3b0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
c3c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
c3d0: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
c3e0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65  & MEM_Null ) bre
c3f0: 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  ak;.  if( (pIn1-
c400: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
c410: 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70  b)==0 ){.    app
c420: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
c430: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
c440: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
c450: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
c460: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c  lags & MEM_Str |
c470: 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
c480: 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  ed );.    MemSet
c490: 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d  TypeFlag(pIn1, M
c4a0: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73  EM_Blob);.  }els
c4b0: 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61  e{.    pIn1->fla
c4c0: 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79 70 65  gs &= ~(MEM_Type
c4d0: 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b  Mask&~MEM_Blob);
c4e0: 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41  .  }.  UPDATE_MA
c4f0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
c500: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
c510: 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d 65 72   Opcode: ToNumer
c520: 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ic P1 * * * *.**
c530: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
c540: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
c550: 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72 69 63  P1 to be numeric
c560: 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20 69   (either an.** i
c570: 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c 6f 61  nteger or a floa
c580: 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62 65  ting-point numbe
c590: 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  r.).** If the va
c5a0: 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62  lue is text or b
c5b0: 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76  lob, try to conv
c5c0: 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75 73 69  ert it to an usi
c5d0: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
c5e0: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 6f  lent of atoi() o
c5f0: 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73 74 6f  r atof() and sto
c600: 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20  re 0 if no such 
c610: 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a 20 69  conversion .** i
c620: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
c630: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
c640: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
c650: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
c660: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
c670: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 4e 75  .*/.case OP_ToNu
c680: 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20 20 20  meric: {        
c690: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c6a0: 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52  e as TK_TO_NUMER
c6b0: 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  IC, in1 */.  pIn
c6c0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
c6d0: 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1];.  sqlite3Vdb
c6e0: 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70 49 6e  eMemNumerify(pIn
c6f0: 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  1);.  break;.}.#
c700: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
c710: 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a  OMIT_CAST */../*
c720: 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74 20 50   Opcode: ToInt P
c730: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
c740: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
c750: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
c760: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
c770: 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61 6c 75    If.** The valu
c780: 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61  e is currently a
c790: 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 64 72   real number, dr
c7a0: 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f 6e 61  op its fractiona
c7b0: 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20 74 68  l part..** If th
c7c0: 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20  e value is text 
c7d0: 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20  or blob, try to 
c7e0: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e  convert it to an
c7f0: 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74   integer using t
c800: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
c810: 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73   of atoi() and s
c820: 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63  tore 0 if no suc
c830: 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  h conversion is 
c840: 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  possible..**.** 
c850: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
c860: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
c870: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
c880: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
c890: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e 74 3a  /.case OP_ToInt:
c8a0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
c8b0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c8c0: 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20 2a 2f  K_TO_INT, in1 */
c8d0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
c8e0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
c8f0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
c900: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
c910: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
c920: 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
c930: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c940: 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
c950: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
c960: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
c970: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
c980: 4e 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20 4f 70 63  NG_POINT)./* Opc
c990: 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a  ode: ToReal P1 *
c9a0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c9b0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c9c0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c9d0: 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  e a floating poi
c9e0: 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66  nt number..** If
c9f0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75   The value is cu
ca00: 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67  rrently an integ
ca10: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a  er, convert it..
ca20: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
ca30: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
ca40: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
ca50: 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
ca60: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
ca70: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
ca80: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30  () and store 0.0
ca90: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
caa0: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
cab0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
cac0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
cad0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
cae0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
caf0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
cb00: 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20   OP_ToReal: {   
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cb20: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
cb30: 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  REAL, in1 */.  p
cb40: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
cb50: 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p1];.  memAbout
cb60: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
cb70: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
cb80: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
cb90: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
cba0: 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66  te3VdbeMemRealif
cbb0: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
cbc0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
cbd0: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
cbe0: 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20  E_OMIT_CAST) && 
cbf0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
cc00: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
cc10: 49 4e 54 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  INT) */../* Opco
cc20: 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20  de: Lt P1 P2 P3 
cc30: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  P4 P5.**.** Comp
cc40: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
cc50: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
cc60: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
cc70: 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  )<reg(P1) then.*
cc80: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
cc90: 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66  s P2.  .**.** If
cca0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
ccb0: 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35  IFNULL bit of P5
ccc0: 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68   is set and eith
ccd0: 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a  er reg(P1) or.**
cce0: 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c   reg(P3) is NULL
ccf0: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
cd00: 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c  ump.  If the SQL
cd10: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a  ITE_JUMPIFNULL .
cd20: 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20  ** bit is clear 
cd30: 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
cd40: 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  h if either oper
cd50: 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  and is NULL..**.
cd60: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
cd70: 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f  F_MASK portion o
cd80: 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20  f P5 must be an 
cd90: 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74  affinity charact
cda0: 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  er -.** SQLITE_A
cdb0: 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f  FF_TEXT, SQLITE_
cdc0: 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64  AFF_INTEGER, and
cdd0: 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74   so forth. An at
cde0: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a  tempt is made .*
cdf0: 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68  * to coerce both
ce00: 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e   inputs accordin
ce10: 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69  g to this affini
ce20: 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a  ty before the.**
ce30: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d   comparison is m
ce40: 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49  ade. If the SQLI
ce50: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30  TE_AFF_MASK is 0
ce60: 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69  x00, then numeri
ce70: 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73  c.** affinity is
ce80: 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74   used. Note that
ce90: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f   the affinity co
cea0: 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74  nversions are st
ceb0: 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74  ored.** back int
cec0: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
ced0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
cee0: 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65    So this opcode
cef0: 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65   can cause.** pe
cf00: 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73  rsistent changes
cf10: 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31   to registers P1
cf20: 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f   and P3..**.** O
cf30: 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69  nce any conversi
cf40: 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70  ons have taken p
cf50: 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65  lace, and neithe
cf60: 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  r value is NULL,
cf70: 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
cf80: 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66  are compared. If
cf90: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
cfa0: 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63   blobs then memc
cfb0: 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20  mp() is.** used 
cfc0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
cfd0: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
cfe0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
cff0: 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61  both values.** a
d000: 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68  re text, then th
d010: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  e appropriate co
d020: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
d030: 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a   specified in.**
d040: 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20   P4 is  used to 
d050: 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  do the compariso
d060: 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  n.  If P4 is not
d070: 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a   specified then.
d080: 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75  ** memcmp() is u
d090: 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  sed to compare t
d0a0: 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  ext string.  If 
d0b0: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a  both values are.
d0c0: 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e  ** numeric, then
d0d0: 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61   a numeric compa
d0e0: 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49  rison is used. I
d0f0: 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73  f the two values
d100: 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65  .** are of diffe
d110: 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e  rent types, then
d120: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e   numbers are con
d130: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
d140: 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64  n.** strings and
d150: 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e   strings are con
d160: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
d170: 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49  n blobs..**.** I
d180: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
d190: 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69  REP2 bit of P5 i
d1a0: 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e  s set, then do n
d1b0: 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61  ot jump.  Instea
d1c0: 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f  d,.** store a bo
d1d0: 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69  olean result (ei
d1e0: 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72  ther 0, or 1, or
d1f0: 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74   NULL) in regist
d200: 65 72 20 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  er P2..*/./* Opc
d210: 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33  ode: Ne P1 P2 P3
d220: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
d230: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
d240: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
d250: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
d260: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
d270: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
d280: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
d290: 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20   and P3 are not 
d2a0: 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20  equal.  See the 
d2b0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a  Lt opcode for.**
d2c0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
d2d0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
d2e0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
d2f0: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
d300: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
d310: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
d320: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
d330: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
d340: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
d350: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
d360: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
d370: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
d380: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 66   comparison is f
d390: 61 6c 73 65 2e 20 20 49 66 20 65 69 74 68 65 72  alse.  If either
d3a0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
d3b0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
d3c0: 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20   is true..** If 
d3d0: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
d3e0: 69 73 20 4e 55 4c 4c 20 74 68 65 20 74 68 65 20  is NULL the the 
d3f0: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
d400: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
d410: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
d420: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
d430: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
d440: 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P5..*/./* Opcod
d450: 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50  e: Eq P1 P2 P3 P
d460: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
d470: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
d480: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
d490: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
d4a0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
d4b0: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
d4c0: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
d4d0: 6e 64 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e  nd P3 are equal.
d4e0: 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f  .** See the Lt o
d4f0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
d500: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
d510: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ..**.** If SQLIT
d520: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
d530: 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72  in P5 then the r
d540: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
d550: 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69  son is always ei
d560: 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20  ther.** true or 
d570: 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76  false and is nev
d580: 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74  er NULL.  If bot
d590: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
d5a0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
d5b0: 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72  ult.** of compar
d5c0: 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49  ison is true.  I
d5d0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
d5e0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
d5f0: 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
d600: 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72  e..** If neither
d610: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
d620: 20 74 68 65 20 74 68 65 20 72 65 73 75 6c 74 20   the the result 
d630: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
d640: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
d650: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
d660: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
d670: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f  tted from P5..*/
d680: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50  ./* Opcode: Le P
d690: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
d6a0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
d6b0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
d6c0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
d6d0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
d6e0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
d6f0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
d700: 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68  er P3 is less th
d710: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
d720: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
d730: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
d740: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
d750: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
d760: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
d770: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31  /* Opcode: Gt P1
d780: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
d790: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
d7a0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
d7b0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
d7c0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
d7d0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
d7e0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
d7f0: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
d800: 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  than the content
d810: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
d820: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
d830: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
d840: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
d850: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
d860: 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ge P1 P2 P3 P4 
d870: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
d880: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
d890: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
d8a0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
d8b0: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
d8c0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
d8d0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72  egister P3 is gr
d8e0: 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
d8f0: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
d900: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
d910: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
d920: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
d930: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
d940: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
d950: 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Eq:             
d960: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d970: 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  EQ, jump, in1, i
d980: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  n3 */.case OP_Ne
d990: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
d9a0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45  /* same as TK_NE
d9b0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
d9c0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20   */.case OP_Lt: 
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d9e0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20   same as TK_LT, 
d9f0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
da00: 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20  /.case OP_Le:   
da10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
da20: 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75  ame as TK_LE, ju
da30: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
da40: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20  case OP_Gt:     
da50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
da60: 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70  e as TK_GT, jump
da70: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
da80: 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20  se OP_Ge: {     
da90: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
daa0: 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20  as TK_GE, jump, 
dab0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
dac0: 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
dad0: 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74    /* Result of t
dae0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  he comparison of
daf0: 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49   pIn1 against pI
db00: 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  n3 */.  char aff
db10: 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41  inity;      /* A
db20: 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66  ffinity to use f
db30: 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f  or comparison */
db40: 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20  .  u16 flags1;  
db50: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
db60: 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  f initial value 
db70: 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a  of pIn1->flags *
db80: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20  /.  u16 flags3; 
db90: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
dba0: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
dbb0: 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20   of pIn3->flags 
dbc0: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
dbd0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
dbe0: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
dbf0: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d  >p3];.  flags1 =
dc00: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn1->flags;.  
dc10: 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66  flags3 = pIn3->f
dc20: 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 70 49 6e  lags;.  if( (pIn
dc30: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 33 2d  1->flags | pIn3-
dc40: 3e 66 6c 61 67 73 29 26 4d 45 4d 5f 4e 75 6c 6c  >flags)&MEM_Null
dc50: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f   ){.    /* One o
dc60: 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  r both operands 
dc70: 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20  are NULL */.    
dc80: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
dc90: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20  LITE_NULLEQ ){. 
dca0: 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54       /* If SQLIT
dcb0: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
dcc0: 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79  (which will only
dcd0: 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f   happen if the o
dce0: 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20  perator is.     
dcf0: 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f   ** OP_Eq or OP_
dd00: 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68  Ne) then take th
dd10: 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65  e jump or not de
dd20: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
dd30: 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e  er.      ** or n
dd40: 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  ot both operands
dd50: 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20   are null..     
dd60: 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
dd70: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
dd80: 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  P_Eq || pOp->opc
dd90: 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20  ode==OP_Ne );.  
dda0: 20 20 20 20 72 65 73 20 3d 20 28 70 49 6e 31 2d      res = (pIn1-
ddb0: 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e 66  >flags & pIn3->f
ddc0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
ddd0: 3d 3d 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ==0;.    }else{.
dde0: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
ddf0: 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20  NULLEQ is clear 
de00: 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  and at least one
de10: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
de20: 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
de30: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
de40: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20  ways NULL..     
de50: 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20   ** The jump is 
de60: 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c  taken if the SQL
de70: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
de80: 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20  it is set..     
de90: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f   */.      if( pO
dea0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
deb0: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
dec0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
ded0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
dee0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
def0: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
df00: 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
df10: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
df20: 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65   pOut);.      }e
df30: 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  lse if( pOp->p5 
df40: 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
df50: 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ULL ){.        p
df60: 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
df70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65       }.      bre
df80: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ak;.    }.  }els
df90: 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65  e{.    /* Neithe
dfa0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
dfb0: 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69  L.  Do a compari
dfc0: 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69  son. */.    affi
dfd0: 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26  nity = pOp->p5 &
dfe0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
dff0: 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e 69  ;.    if( affini
e000: 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c  ty ){.      appl
e010: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
e020: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69  affinity, encodi
e030: 6e 67 29 3b 0a 20 20 20 20 20 20 61 70 70 6c 79  ng);.      apply
e040: 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 61  Affinity(pIn3, a
e050: 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e  ffinity, encodin
e060: 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62  g);.      if( db
e070: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
e080: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
e090: 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28    }..    assert(
e0a0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
e0b0: 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d  _COLLSEQ || pOp-
e0c0: 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a  >p4.pColl==0 );.
e0d0: 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70      ExpandBlob(p
e0e0: 49 6e 31 29 3b 0a 20 20 20 20 45 78 70 61 6e 64  In1);.    Expand
e0f0: 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20  Blob(pIn3);.    
e100: 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  res = sqlite3Mem
e110: 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49  Compare(pIn3, pI
e120: 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c  n1, pOp->p4.pCol
e130: 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68  l);.  }.  switch
e140: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
e150: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a  .    case OP_Eq:
e160: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30      res = res==0
e170: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
e180: 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20   case OP_Ne:    
e190: 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20  res = res!=0;   
e1a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
e1b0: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20  e OP_Lt:    res 
e1c0: 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72  = res<0;      br
e1d0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
e1e0: 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Le:    res = re
e1f0: 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s<=0;     break;
e200: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a  .    case OP_Gt:
e210: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b      res = res>0;
e220: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
e230: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
e240: 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20  res = res>=0;   
e250: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
e260: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
e270: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
e280: 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
e290: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d  [pOp->p2];.    m
e2a0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
e2b0: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65  p, pOut);.    Me
e2c0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
e2d0: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  t, MEM_Int);.   
e2e0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73   pOut->u.i = res
e2f0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
e300: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
e310: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ut);.  }else if(
e320: 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
e330: 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
e340: 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63  .  /* Undo any c
e350: 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61  hanges made by a
e360: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74  pplyAffinity() t
e370: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
e380: 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31  sters. */.  pIn1
e390: 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d  ->flags = (pIn1-
e3a0: 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65  >flags&~MEM_Type
e3b0: 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26  Mask) | (flags1&
e3c0: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
e3d0: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28   pIn3->flags = (
e3e0: 70 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d  pIn3->flags&~MEM
e3f0: 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c  _TypeMask) | (fl
e400: 61 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73  ags3&MEM_TypeMas
e410: 6b 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  k);.  break;.}..
e420: 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75  /* Opcode: Permu
e430: 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20  tation * * * P4 
e440: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
e450: 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64  permutation used
e460: 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   by the OP_Compa
e470: 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62  re operator to b
e480: 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f  e the array.** o
e490: 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34  f integers in P4
e4a0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
e4b0: 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
e4c0: 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
e4d0: 6e 65 78 74 20 4f 50 5f 50 65 72 6d 75 74 61 74  next OP_Permutat
e4e0: 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c  ion, OP_Compare,
e4f0: 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20  .** OP_Halt, or 
e500: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20 54  OP_ResultRow.  T
e510: 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f  ypically the OP_
e520: 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75  Permutation shou
e530: 6c 64 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65  ld occur.** imme
e540: 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
e550: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
e560: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d  .*/.case OP_Perm
e570: 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73  utation: {.  ass
e580: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
e590: 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
e5a0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
e5b0: 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d  p4.ai );.  aPerm
e5c0: 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  ute = pOp->p4.ai
e5d0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e5e0: 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65   Opcode: Compare
e5f0: 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
e600: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
e610: 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
e620: 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
e630: 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
e640: 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
e650: 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
e660: 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
e670: 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
e680: 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
e690: 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
e6a0: 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
e6b0: 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
e6c0: 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50  nstruct..**.** P
e6d0: 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73  4 is a KeyInfo s
e6e0: 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
e6f0: 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20  fines collating 
e700: 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f  sequences and so
e710: 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72  rt.** orders for
e720: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
e730: 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f    The permutatio
e740: 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67  n applies to reg
e750: 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20  isters.** only. 
e760: 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65   The KeyInfo ele
e770: 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73  ments are used s
e780: 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a  equentially..**.
e790: 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** The compariso
e7a0: 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70  n is a sort comp
e7b0: 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73  arison, so NULLs
e7c0: 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a   compare equal,.
e7d0: 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73  ** NULLs are les
e7e0: 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20  s than numbers, 
e7f0: 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73  numbers are less
e800: 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a   than strings,.*
e810: 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  * and strings ar
e820: 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  e less than blob
e830: 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  s..*/.case OP_Co
e840: 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  mpare: {.  int n
e850: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74  ;.  int i;.  int
e860: 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20   p1;.  int p2;. 
e870: 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a   const KeyInfo *
e880: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20  pKeyInfo;.  int 
e890: 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  idx;.  CollSeq *
e8a0: 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c  pColl;    /* Col
e8b0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
e8c0: 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74  to use on this t
e8d0: 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65  erm */.  int bRe
e8e0: 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  v;          /* T
e8f0: 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49  rue for DESCENDI
e900: 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f  NG sort order */
e910: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  ..  n = pOp->p3;
e920: 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  .  pKeyInfo = pO
e930: 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
e940: 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b    assert( n>0 );
e950: 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49  .  assert( pKeyI
e960: 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d  nfo!=0 );.  p1 =
e970: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
e980: 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51   pOp->p2;.#if SQ
e990: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
e9a0: 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20   aPermute ){.   
e9b0: 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a   int k, mx = 0;.
e9c0: 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e      for(k=0; k<n
e9d0: 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d  ; k++) if( aPerm
e9e0: 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d  ute[k]>mx ) mx =
e9f0: 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20   aPermute[k];.  
ea00: 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
ea10: 26 20 70 31 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d  & p1+mx<=p->nMem
ea20: 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  +1 );.    assert
ea30: 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c  ( p2>0 && p2+mx<
ea40: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
ea50: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
ea60: 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c  t( p1>0 && p1+n<
ea70: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
ea80: 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
ea90: 26 20 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b  & p2+n<=p->nMem+
eaa0: 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  1 );.  }.#endif 
eab0: 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
eac0: 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  */.  for(i=0; i<
ead0: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78  n; i++){.    idx
eae0: 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50   = aPermute ? aP
eaf0: 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20  ermute[i] : i;. 
eb00: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
eb10: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69  Valid(&aMem[p1+i
eb20: 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65  dx]) );.    asse
eb30: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
eb40: 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b  aMem[p2+idx]) );
eb50: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
eb60: 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65  ACE(p1+idx, &aMe
eb70: 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p1+idx]);.    
eb80: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
eb90: 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b  2+idx, &aMem[p2+
eba0: 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  idx]);.    asser
ebb0: 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e  t( i<pKeyInfo->n
ebc0: 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f  Field );.    pCo
ebd0: 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ll = pKeyInfo->a
ebe0: 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65  Coll[i];.    bRe
ebf0: 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53  v = pKeyInfo->aS
ec00: 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20  ortOrder[i];.   
ec10: 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69   iCompare = sqli
ec20: 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61  te3MemCompare(&a
ec30: 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d  Mem[p1+idx], &aM
ec40: 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c  em[p2+idx], pCol
ec50: 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d  l);.    if( iCom
ec60: 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66  pare ){.      if
ec70: 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72  ( bRev ) iCompar
ec80: 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20  e = -iCompare;. 
ec90: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
eca0: 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65  }.  }.  aPermute
ecb0: 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
ecc0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d  ../* Opcode: Jum
ecd0: 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  p P1 P2 P3 * *.*
ece0: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
ecf0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
ed00: 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20  address P1, P2, 
ed10: 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20  or P3 depending 
ed20: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e  on whether.** in
ed30: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
ed40: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74   OP_Compare inst
ed50: 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76  ruction the P1 v
ed60: 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74  ector was less t
ed70: 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c  han.** equal to,
ed80: 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
ed90: 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20   the P2 vector, 
eda0: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f  respectively..*/
edb0: 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b  .case OP_Jump: {
edc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
edd0: 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43  jump */.  if( iC
ede0: 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20  ompare<0 ){.    
edf0: 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31  pc = pOp->p1 - 1
ee00: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43  ;.  }else if( iC
ee10: 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20  ompare==0 ){.   
ee20: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
ee30: 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
ee40: 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  pc = pOp->p3 - 1
ee50: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
ee60: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
ee70: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
ee80: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67  .** Take the log
ee90: 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20  ical AND of the 
eea0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
eeb0: 65 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ers P1 and P2 an
eec0: 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72  d.** write the r
eed0: 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73  esult into regis
eee0: 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
eef0: 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
ef00: 20 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68   is 0 (false) th
ef10: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
ef20: 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68   0 even if.** th
ef30: 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
ef40: 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
ef50: 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e  nd true or two N
ef60: 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e  ULLs give.** a N
ef70: 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f  ULL output..*/./
ef80: 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20  * Opcode: Or P1 
ef90: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
efa0: 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
efb0: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
efc0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
efd0: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
efe0: 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20  tore the answer 
eff0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
f000: 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
f010: 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a  P1 or P2 is nonz
f020: 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20  ero (true) then 
f030: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20  the result is 1 
f040: 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69  (true).** even i
f050: 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  f the other inpu
f060: 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
f070: 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20  LL and false or 
f080: 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76  two NULLs.** giv
f090: 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  e a NULL output.
f0a0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a  .*/.case OP_And:
f0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f0c0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c   same as TK_AND,
f0d0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
f0e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b  */.case OP_Or: {
f0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f100: 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69  same as TK_OR, i
f110: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
f120: 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a  .  int v1;    /*
f130: 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20   Left operand:  
f140: 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
f150: 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
f160: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76   NULL */.  int v
f170: 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  2;    /* Right o
f180: 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45  perand: 0==FALSE
f190: 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
f1a0: 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
f1b0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
f1c0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
f1d0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
f1e0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
f1f0: 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  1 = 2;.  }else{.
f200: 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33      v1 = sqlite3
f210: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
f220: 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e  1)!=0;.  }.  pIn
f230: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
f240: 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e  2];.  if( pIn2->
f250: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
f260: 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a   ){.    v2 = 2;.
f270: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20    }else{.    v2 
f280: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
f290: 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a  Value(pIn2)!=0;.
f2a0: 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
f2b0: 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b  pcode==OP_And ){
f2c0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
f2d0: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
f2e0: 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20  and_logic[] = { 
f2f0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32  0, 0, 0, 0, 1, 2
f300: 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20  , 0, 2, 2 };.   
f310: 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b   v1 = and_logic[
f320: 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73  v1*3+v2];.  }els
f330: 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
f340: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
f350: 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b  r or_logic[] = {
f360: 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20   0, 1, 2, 1, 1, 
f370: 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20  1, 2, 1, 2 };.  
f380: 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b    v1 = or_logic[
f390: 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20  v1*3+v2];.  }.  
f3a0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
f3b0: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d  ->p3];.  if( v1=
f3c0: 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74  =2 ){.    MemSet
f3d0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
f3e0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73  EM_Null);.  }els
f3f0: 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
f400: 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65   = v1;.    MemSe
f410: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
f420: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
f430: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
f440: 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a  ode: Not P1 P2 *
f450: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72   * *.**.** Inter
f460: 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69  pret the value i
f470: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  n register P1 as
f480: 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
f490: 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
f4a0: 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65  boolean compleme
f4b0: 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  nt in register P
f4c0: 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  2.  If the value
f4d0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
f4e0: 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
f4f0: 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72  n a NULL is stor
f500: 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ed in P2..*/.cas
f510: 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20  e OP_Not: {     
f520: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f530: 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e  me as TK_NOT, in
f540: 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
f550: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
f560: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
f570: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
f580: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
f590: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
f5a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
f5b0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
f5c0: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
f5d0: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
f5e0: 34 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33  4(pOut, !sqlite3
f5f0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
f600: 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1));.  }.  break
f610: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
f620: 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  BitNot P1 P2 * *
f630: 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72   *.**.** Interpr
f640: 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  et the content o
f650: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  f register P1 as
f660: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74   an integer.  St
f670: 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d  ore the.** ones-
f680: 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68  complement of th
f690: 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20  e P1 value into 
f6a0: 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
f6b0: 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e   P1 holds.** a N
f6c0: 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61  ULL then store a
f6d0: 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a   NULL in P2..*/.
f6e0: 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20  case OP_BitNot: 
f6f0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
f700: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e   same as TK_BITN
f710: 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f  OT, in1, out2 */
f720: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
f730: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
f740: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
f750: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
f760: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
f770: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
f780: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
f790: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
f7a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
f7b0: 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73  etInt64(pOut, ~s
f7c0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
f7d0: 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20  ue(pIn1));.  }. 
f7e0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
f7f0: 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50  code: If P1 P2 P
f800: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
f810: 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
f820: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
f830: 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65  P1 is true.  The
f840: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20   value is.** is 
f850: 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
f860: 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
f870: 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
f880: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
f890: 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
f8a0: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
f8b0: 20 69 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a   if P3 is true..
f8c0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  */./* Opcode: If
f8d0: 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Not P1 P2 P3 * *
f8e0: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
f8f0: 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
f900: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
f910: 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c   False.  The val
f920: 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73  ue is.** is cons
f930: 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69  idered true if i
f940: 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20  t has a numeric 
f950: 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20  value of zero.  
f960: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
f970: 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
f980: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
f990: 20 69 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a   if P3 is true..
f9a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20  */.case OP_If:  
f9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f9c0: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63  * jump, in1 */.c
f9d0: 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20  ase OP_IfNot: { 
f9e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
f9f0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
fa00: 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   c;.  pIn1 = &aM
fa10: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
fa20: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
fa30: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
fa40: 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   c = pOp->p3;.  
fa50: 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51  }else{.#ifdef SQ
fa60: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
fa70: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d  NG_POINT.    c =
fa80: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
fa90: 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23  alue(pIn1)!=0;.#
faa0: 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c  else.    c = sql
fab0: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
fac0: 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65  e(pIn1)!=0.0;.#e
fad0: 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70  ndif.    if( pOp
fae0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e  ->opcode==OP_IfN
faf0: 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d  ot ) c = !c;.  }
fb00: 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20  .  if( c ){.    
fb10: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
fb20: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
fb30: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
fb40: 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
fb50: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
fb60: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
fb70: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55  egister P1 is NU
fb80: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  LL..*/.case OP_I
fb90: 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  sNull: {        
fba0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
fbb0: 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  K_ISNULL, jump, 
fbc0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
fbd0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
fbe0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
fbf0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
fc00: 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
fc10: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
fc20: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
fc30: 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31  code: NotNull P1
fc40: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
fc50: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
fc60: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
fc70: 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55  ter P1 is not NU
fc80: 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  LL.  .*/.case OP
fc90: 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  _NotNull: {     
fca0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
fcb0: 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75  s TK_NOTNULL, ju
fcc0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
fcd0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
fce0: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
fcf0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
fd00: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  l)==0 ){.    pc 
fd10: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
fd20: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
fd30: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e  * Opcode: Column
fd40: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
fd50: 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
fd60: 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75  the data that cu
fd70: 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
fd80: 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65  o as a structure
fd90: 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20   built using.** 
fda0: 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  the MakeRecord i
fdb0: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65  nstruction.  (Se
fdc0: 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  e the MakeRecord
fdd0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
fde0: 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d  tional.** inform
fdf0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
fe00: 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61  format of the da
fe10: 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68  ta.)  Extract th
fe20: 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a  e P2-th column.*
fe30: 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f  * from this reco
fe40: 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  rd.  If there ar
fe50: 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b  e less that (P2+
fe60: 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e  1) .** values in
fe70: 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74   the record, ext
fe80: 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a  ract a NULL..**.
fe90: 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74  ** The value ext
fea0: 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64  racted is stored
feb0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
fec0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f  .**.** If the co
fed0: 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65  lumn contains fe
fee0: 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c  wer than P2 fiel
fef0: 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74  ds, then extract
ff00: 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a   a NULL.  Or,.**
ff10: 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   if the P4 argum
ff20: 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20  ent is a P4_MEM 
ff30: 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  use the value of
ff40: 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
ff50: 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c   as.** the resul
ff60: 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
ff70: 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
ff80: 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20  E bit is set on 
ff90: 50 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70  P5 and P1 is a p
ffa0: 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
ffb0: 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  or,.** then the 
ffc0: 63 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72  cache of the cur
ffd0: 73 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69  sor is reset pri
ffe0: 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67  or to extracting
fff0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20   the column..** 
10000 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c  The first OP_Col
10010 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73  umn against a ps
10020 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72  eudo-table after
10030 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
10040 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67  e content.** reg
10050 69 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65  ister has change
10060 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68  d should have th
10070 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 63  is bit set..*/.c
10080 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b  ase OP_Column: {
10090 0a 20 20 75 33 32 20 70 61 79 6c 6f 61 64 53 69  .  u32 payloadSi
100a0 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ze;   /* Number 
100b0 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
100c0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20  record */.  i64 
100d0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f  payloadSize64; /
100e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
100f0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
10100 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20  */.  int p1;    
10110 20 20 20 20 20 20 20 20 2f 2a 20 50 31 20 76 61          /* P1 va
10120 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
10130 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20  e */.  int p2;  
10140 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c            /* col
10150 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65  umn number to re
10160 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65  trieve */.  Vdbe
10170 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f  Cursor *pC;    /
10180 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
10190 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52 65  r */.  char *zRe
101a0 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  c;        /* Poi
101b0 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65  nter to complete
101c0 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a 2f 0a   record-data */.
101d0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
101e0 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65  r;   /* The BTre
101f0 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33  e cursor */.  u3
10200 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20 20 20  2 *aType;       
10210 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c   /* aType[i] hol
10220 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74  ds the numeric t
10230 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74 68 20  ype of the i-th 
10240 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20  column */.  u32 
10250 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f  *aOffset;      /
10260 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20  * aOffset[i] is 
10270 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74 20  offset to start 
10280 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68  of data for i-th
10290 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74   column */.  int
102a0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
102b0 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  /* number of fie
102c0 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
102d0 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  d */.  int len; 
102e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
102f0 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   length of the s
10300 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66  erialized data f
10310 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f  or the column */
10320 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
10330 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
10340 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61 72 20  unter */.  char 
10350 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *zData;       /*
10360 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63   Part of the rec
10370 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
10380 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73  d */.  Mem *pDes
10390 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65  t;        /* Whe
103a0 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  re to write the 
103b0 65 78 74 72 61 63 74 65 64 20 76 61 6c 75 65 20  extracted value 
103c0 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20  */.  Mem sMem;  
103d0 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73          /* For s
103e0 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72  toring the recor
103f0 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
10400 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78 3b 20 20  */.  u8 *zIdx;  
10410 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
10420 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a 2f 0a   into header */.
10430 20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 20    u8 *zEndHdr;  
10440 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
10450 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
10460 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
10470 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20  /.  u32 offset; 
10480 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
10490 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a   into the data *
104a0 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64 3b  /.  u32 szField;
104b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
104c0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
104d0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69   content of a fi
104e0 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 48  eld */.  int szH
104f0 64 72 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  dr;         /* S
10500 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65  ize of the heade
10510 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61 74 20  r size field at 
10520 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72 64 20  start of record 
10530 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69 6c 3b 20  */.  int avail; 
10540 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
10550 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76  r of bytes of av
10560 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a  ailable data */.
10570 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20    Mem *pReg;    
10580 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61       /* PseudoTa
10590 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  ble input regist
105a0 65 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70  er */...  p1 = p
105b0 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
105c0 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30  Op->p2;.  pC = 0
105d0 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d  ;.  memset(&sMem
105e0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
105f0 29 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  ));.  assert( p1
10600 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
10610 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
10620 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
10630 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73  ->nMem );.  pDes
10640 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
10650 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
10660 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
10670 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
10680 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75  ag(pDest, MEM_Nu
10690 6c 6c 29 3b 0a 20 20 7a 52 65 63 20 3d 20 30 3b  ll);.  zRec = 0;
106a0 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63  ..  /* This bloc
106b0 6b 20 73 65 74 73 20 74 68 65 20 76 61 72 69 61  k sets the varia
106c0 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 20  ble payloadSize 
106d0 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61 6c 20  to be the total 
106e0 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62  number of.  ** b
106f0 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
10700 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52  rd..  **.  ** zR
10710 65 63 20 69 73 20 73 65 74 20 74 6f 20 62 65 20  ec is set to be 
10720 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78  the complete tex
10730 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
10740 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62  if it is availab
10750 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d  le..  ** The com
10760 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78  plete record tex
10770 74 20 69 73 20 61 6c 77 61 79 73 20 61 76 61 69  t is always avai
10780 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75 64 6f  lable for pseudo
10790 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20  -tables.  ** If 
107a0 74 68 65 20 72 65 63 6f 72 64 20 69 73 20 73 74  the record is st
107b0 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73 6f 72  ored in a cursor
107c0 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  , the complete r
107d0 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a 20  ecord text.  ** 
107e0 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c 61 62  might be availab
107f0 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d 3e 61  le in the  pC->a
10800 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72 20 69  Row cache.  Or i
10810 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a  t might not be..
10820 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61    ** If the data
10830 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c   is unavailable,
10840 20 20 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f    zRec is set to
10850 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a   NULL..  **.  **
10860 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65   We also compute
10870 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
10880 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
10890 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72 73 6f  cord.  For curso
108a0 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d  rs,.  ** the num
108b0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
108c0 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
108d0 56 64 62 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c  VdbeCursor.nFiel
108e0 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a  d element..  */.
108f0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
10900 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
10910 43 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20  C!=0 );.#ifndef 
10920 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
10930 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72  UALTABLE.  asser
10940 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73  t( pC->pVtabCurs
10950 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a  or==0 );.#endif.
10960 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
10970 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72  ursor;.  if( pCr
10980 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  sr!=0 ){.    /* 
10990 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 73 74  The record is st
109a0 6f 72 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65  ored in a B-Tree
109b0 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
109c0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
109d0 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66  veto(pC);.    if
109e0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
109f0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
10a00 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c      if( pC->null
10a10 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 61 79  Row ){.      pay
10a20 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20  loadSize = 0;.  
10a30 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
10a40 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e  cacheStatus==p->
10a50 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20  cacheCtr ){.    
10a60 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
10a70 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b  pC->payloadSize;
10a80 0a 20 20 20 20 20 20 7a 52 65 63 20 3d 20 28 63  .      zRec = (c
10a90 68 61 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20  har*)pC->aRow;. 
10aa0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d     }else if( pC-
10ab0 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
10ac0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
10ad0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
10ae0 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20  lid(pCrsr) );.  
10af0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
10b00 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
10b10 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
10b20 36 34 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  64);.      asser
10b30 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
10b40 20 29 3b 20 20 20 2f 2a 20 54 72 75 65 20 62 65   );   /* True be
10b50 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
10b60 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f  oveto() call abo
10b70 76 65 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 73  ve */.      /* s
10b80 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65  qlite3BtreeParse
10b90 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67  CellPtr() uses g
10ba0 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20  etVarint32() to 
10bb0 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20  extract the.    
10bc0 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a    ** payload siz
10bd0 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f  e, so it is impo
10be0 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f  ssible for paylo
10bf0 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20  adSize64 to be. 
10c00 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74       ** larger t
10c10 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a  han 32 bits. */.
10c20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
10c30 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53  ayloadSize64 & S
10c40 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d  QLITE_MAX_U32)==
10c50 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u64)payloadSize
10c60 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61 79 6c  64 );.      payl
10c70 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70  oadSize = (u32)p
10c80 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20  ayloadSize64;.  
10c90 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
10ca0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
10cb0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
10cc0 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20  (pCrsr) );.     
10cd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
10ce0 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
10cf0 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b  , &payloadSize);
10d00 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
10d10 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
10d20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20    /* DataSize() 
10d30 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
10d40 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28     }.  }else if(
10d50 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
10d60 52 65 67 3e 30 20 29 7b 0a 20 20 20 20 70 52 65  Reg>0 ){.    pRe
10d70 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70 73  g = &aMem[pC->ps
10d80 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20  eudoTableReg];. 
10d90 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d     assert( pReg-
10da0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
10db0 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
10dc0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67   memIsValid(pReg
10dd0 29 20 29 3b 0a 20 20 20 20 70 61 79 6c 6f 61 64  ) );.    payload
10de0 53 69 7a 65 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a  Size = pReg->n;.
10df0 20 20 20 20 7a 52 65 63 20 3d 20 70 52 65 67 2d      zRec = pReg-
10e00 3e 7a 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68  >z;.    pC->cach
10e10 65 53 74 61 74 75 73 20 3d 20 28 70 4f 70 2d 3e  eStatus = (pOp->
10e20 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  p5&OPFLAG_CLEARC
10e30 41 43 48 45 29 20 3f 20 43 41 43 48 45 5f 53 54  ACHE) ? CACHE_ST
10e40 41 4c 45 20 3a 20 70 2d 3e 63 61 63 68 65 43 74  ALE : p->cacheCt
10e50 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  r;.    assert( p
10e60 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c  ayloadSize==0 ||
10e70 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 7d 65   zRec!=0 );.  }e
10e80 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e 73  lse{.    /* Cons
10e90 69 64 65 72 20 74 68 65 20 72 6f 77 20 74 6f 20  ider the row to 
10ea0 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 70  be NULL */.    p
10eb0 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a  ayloadSize = 0;.
10ec0 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61 79    }..  /* If pay
10ed0 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20 74  loadSize is 0, t
10ee0 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20 61  hen just store a
10ef0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20 70   NULL */.  if( p
10f00 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29 7b  ayloadSize==0 ){
10f10 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 65  .    assert( pDe
10f20 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  st->flags&MEM_Nu
10f30 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6f  ll );.    goto o
10f40 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
10f50 7d 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  }.  assert( db->
10f60 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
10f70 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20 29  MIT_LENGTH]>=0 )
10f80 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53  ;.  if( payloadS
10f90 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61  ize > (u32)db->a
10fa0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
10fb0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
10fc0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
10fd0 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20    }..  nField = 
10fe0 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 61 73  pC->nField;.  as
10ff0 73 65 72 74 28 20 70 32 3c 6e 46 69 65 6c 64 20  sert( p2<nField 
11000 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61 6e  );..  /* Read an
11010 64 20 70 61 72 73 65 20 74 68 65 20 74 61 62 6c  d parse the tabl
11020 65 20 68 65 61 64 65 72 2e 20 20 53 74 6f 72 65  e header.  Store
11030 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
11040 74 68 65 20 70 61 72 73 65 0a 20 20 2a 2a 20 69  the parse.  ** i
11050 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 68  nto the record h
11060 65 61 64 65 72 20 63 61 63 68 65 20 66 69 65 6c  eader cache fiel
11070 64 73 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72  ds of the cursor
11080 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65 20 3d  ..  */.  aType =
11090 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69 66   pC->aType;.  if
110a0 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75  ( pC->cacheStatu
110b0 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29  s==p->cacheCtr )
110c0 7b 0a 20 20 20 20 61 4f 66 66 73 65 74 20 3d 20  {.    aOffset = 
110d0 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 7d  pC->aOffset;.  }
110e0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
110f0 28 61 54 79 70 65 29 3b 0a 20 20 20 20 61 76 61  (aType);.    ava
11100 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  il = 0;.    pC->
11110 61 4f 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65  aOffset = aOffse
11120 74 20 3d 20 26 61 54 79 70 65 5b 6e 46 69 65 6c  t = &aType[nFiel
11130 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c  d];.    pC->payl
11140 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61  oadSize = payloa
11150 64 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63  dSize;.    pC->c
11160 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e  acheStatus = p->
11170 63 61 63 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f  cacheCtr;..    /
11180 2a 20 46 69 67 75 72 65 20 6f 75 74 20 68 6f 77  * Figure out how
11190 20 6d 61 6e 79 20 62 79 74 65 73 20 61 72 65 20   many bytes are 
111a0 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  in the header */
111b0 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b  .    if( zRec ){
111c0 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 7a  .      zData = z
111d0 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  Rec;.    }else{.
111e0 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73        if( pC->is
111f0 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 20  Index ){.       
11200 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29   zData = (char*)
11210 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46  sqlite3BtreeKeyF
11220 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
11230 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  il);.      }else
11240 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
11250 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  = (char*)sqlite3
11260 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70  BtreeDataFetch(p
11270 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
11280 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20       }.      /* 
11290 49 66 20 4b 65 79 46 65 74 63 68 28 29 2f 44 61  If KeyFetch()/Da
112a0 74 61 46 65 74 63 68 28 29 20 6d 61 6e 61 67 65  taFetch() manage
112b0 64 20 74 6f 20 67 65 74 20 74 68 65 20 65 6e 74  d to get the ent
112c0 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20  ire payload,.   
112d0 20 20 20 2a 2a 20 73 61 76 65 20 74 68 65 20 70     ** save the p
112e0 61 79 6c 6f 61 64 20 69 6e 20 74 68 65 20 70 43  ayload in the pC
112f0 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 54  ->aRow cache.  T
11300 68 61 74 20 77 69 6c 6c 20 73 61 76 65 20 75 73  hat will save us
11310 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68   from.      ** h
11320 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64  aving to make ad
11330 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74  ditional calls t
11340 6f 20 66 65 74 63 68 20 74 68 65 20 63 6f 6e 74  o fetch the cont
11350 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20  ent portion of. 
11360 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f       ** the reco
11370 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  rd..      */.   
11380 20 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c     assert( avail
11390 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  >=0 );.      if(
113a0 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20   payloadSize <= 
113b0 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20  (u32)avail ){.  
113c0 20 20 20 20 20 20 7a 52 65 63 20 3d 20 7a 44 61        zRec = zDa
113d0 74 61 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  ta;.        pC->
113e0 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61 74  aRow = (u8*)zDat
113f0 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  a;.      }else{.
11400 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
11410 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
11420 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20 66    }.    /* The f
11430 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 20  ollowing assert 
11440 69 73 20 74 72 75 65 20 69 6e 20 61 6c 6c 20 63  is true in all c
11450 61 73 65 73 20 61 63 63 65 70 74 20 77 68 65 6e  ases accept when
11460 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61 74 61  .    ** the data
11470 62 61 73 65 20 66 69 6c 65 20 68 61 73 20 62 65  base file has be
11480 65 6e 20 63 6f 72 72 75 70 74 65 64 20 65 78 74  en corrupted ext
11490 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20  ernally..    ** 
114a0 20 20 20 61 73 73 65 72 74 28 20 7a 52 65 63 21     assert( zRec!
114b0 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79  =0 || avail>=pay
114c0 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76 61 69  loadSize || avai
114d0 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73  l>=9 ); */.    s
114e0 7a 48 64 72 20 3d 20 67 65 74 56 61 72 69 6e 74  zHdr = getVarint
114f0 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f  32((u8*)zData, o
11500 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20  ffset);..    /* 
11510 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72  Make sure a corr
11520 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73  upt database has
11530 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e   not given us an
11540 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72   oversize header
11550 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73  ..    ** Do this
11560 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e   now to avoid an
11570 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79   oversize memory
11580 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20   allocation..   
11590 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65 20   **.    ** Type 
115a0 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62  entries can be b
115b0 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62  etween 1 and 5 b
115c0 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20  ytes each.  But 
115d0 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20  4 and 5 byte.   
115e0 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f   ** types use so
115f0 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65   much data space
11600 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20   that there can 
11610 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64  only be 4096 and
11620 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68   32 of.    ** th
11630 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  em, respectively
11640 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75  .  So the maximu
11650 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  m header length 
11660 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20  results from a. 
11670 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70     ** 3-byte typ
11680 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  e for each of th
11690 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37  e maximum of 327
116a0 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20  68 columns plus 
116b0 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78 74  three.    ** ext
116c0 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65  ra bytes for the
116d0 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69   header length i
116e0 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20  tself.  32768*3 
116f0 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20  + 3 = 98307..   
11700 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66 73   */.    if( offs
11710 65 74 20 3e 20 39 38 33 30 37 20 29 7b 0a 20 20  et > 98307 ){.  
11720 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
11730 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
11740 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
11750 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a 20  mn_out;.    }.. 
11760 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65 20 69 6e     /* Compute in
11770 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20   len the number 
11780 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
11790 20 77 65 20 6e 65 65 64 20 74 6f 20 72 65 61 64   we need to read
117a0 20 69 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a 2a   in order.    **
117b0 20 74 6f 20 67 65 74 20 6e 46 69 65 6c 64 20 74   to get nField t
117c0 79 70 65 20 76 61 6c 75 65 73 2e 20 20 6f 66 66  ype values.  off
117d0 73 65 74 20 69 73 20 61 6e 20 75 70 70 65 72 20  set is an upper 
117e0 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73 2e 20 20  bound on this.  
117f0 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46 69 65 6c  But.    ** nFiel
11800 64 20 6d 69 67 68 74 20 62 65 20 73 69 67 6e 69  d might be signi
11810 66 69 63 61 6e 74 6c 79 20 6c 65 73 73 20 74 68  ficantly less th
11820 61 6e 20 74 68 65 20 74 72 75 65 20 6e 75 6d 62  an the true numb
11830 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20 20  er of columns.  
11840 20 20 2a 2a 20 69 6e 20 74 68 65 20 74 61 62 6c    ** in the tabl
11850 65 2c 20 61 6e 64 20 69 6e 20 74 68 61 74 20 63  e, and in that c
11860 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64 2b 33 20  ase, 5*nField+3 
11870 6d 69 67 68 74 20 62 65 20 73 6d 61 6c 6c 65 72  might be smaller
11880 20 74 68 61 6e 20 6f 66 66 73 65 74 2e 0a 20 20   than offset..  
11890 20 20 2a 2a 20 57 65 20 77 61 6e 74 20 74 6f 20    ** We want to 
118a0 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20 69 6e 20  minimize len in 
118b0 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69 74 20 74  order to limit t
118c0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6d  he size of the m
118d0 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 61 6c 6c  emory.    ** all
118e0 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65 63 69 61  ocation, especia
118f0 6c 6c 79 20 69 66 20 61 20 63 6f 72 72 75 70 74  lly if a corrupt
11900 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
11910 61 73 20 63 61 75 73 65 64 20 6f 66 66 73 65 74  as caused offset
11920 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 6f 76  .    ** to be ov
11930 65 72 73 69 7a 65 64 2e 20 4f 66 66 73 65 74 20  ersized. Offset 
11940 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 39 38  is limited to 98
11950 33 30 37 20 61 62 6f 76 65 2e 20 20 42 75 74 20  307 above.  But 
11960 39 38 33 30 37 20 6d 69 67 68 74 0a 20 20 20 20  98307 might.    
11970 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65 65 64 20  ** still exceed 
11980 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c  Robson memory al
11990 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20  location limits 
119a0 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69 67 75 72  on some configur
119b0 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a 20 4f  ations..    ** O
119c0 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74 20 63  n systems that c
119d0 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74 65 20 6c  annot tolerate l
119e0 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  arge memory allo
119f0 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65 6c 64 2a  cations, nField*
11a00 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69 6c 6c 20  5+3.    ** will 
11a10 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63 68 20 73  likely be much s
11a20 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20 6e 46 69  maller since nFi
11a30 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20  eld will likely 
11a40 62 65 20 6c 65 73 73 20 74 68 61 6e 0a 20 20 20  be less than.   
11a50 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e 20 20 54   ** 20 or so.  T
11a60 68 69 73 20 69 6e 73 75 72 65 73 20 74 68 61 74  his insures that
11a70 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61   Robson memory a
11a80 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73  llocation limits
11a90 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e 6f 74 20   are.    ** not 
11aa0 65 78 63 65 65 64 65 64 20 65 76 65 6e 20 66 6f  exceeded even fo
11ab0 72 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  r corrupt databa
11ac0 73 65 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a 2f  se files..    */
11ad0 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46 69 65 6c  .    len = nFiel
11ae0 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20 69 66 28  d*5 + 3;.    if(
11af0 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f 66 66 73   len > (int)offs
11b00 65 74 20 29 20 6c 65 6e 20 3d 20 28 69 6e 74 29  et ) len = (int)
11b10 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a 20  offset;..    /* 
11b20 54 68 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f  The KeyFetch() o
11b30 72 20 44 61 74 61 46 65 74 63 68 28 29 20 61 62  r DataFetch() ab
11b40 6f 76 65 20 61 72 65 20 66 61 73 74 20 61 6e 64  ove are fast and
11b50 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e   will get the en
11b60 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f  tire.    ** reco
11b70 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73  rd header in mos
11b80 74 20 63 61 73 65 73 2e 20 20 42 75 74 20 74 68  t cases.  But th
11b90 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20  ey will fail to 
11ba0 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  get the complete
11bb0 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68  .    ** record h
11bc0 65 61 64 65 72 20 69 66 20 74 68 65 20 72 65 63  eader if the rec
11bd0 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65 73 20  ord header does 
11be0 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e  not fit on a sin
11bf0 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20  gle page.    ** 
11c00 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20  in the B-Tree.  
11c10 57 68 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e  When that happen
11c20 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56 64  s, use sqlite3Vd
11c30 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29  beMemFromBtree()
11c40 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69   to.    ** acqui
11c50 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  re the complete 
11c60 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20  header text..   
11c70 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65   */.    if( !zRe
11c80 63 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e 20 29  c && avail<len )
11c90 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61  {.      sMem.fla
11ca0 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 4d  gs = 0;.      sM
11cb0 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20 20  em.db = 0;.     
11cc0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
11cd0 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
11ce0 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70 43 2d  rsr, 0, len, pC-
11cf0 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29  >isIndex, &sMem)
11d00 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
11d10 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
11d20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
11d30 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  umn_out;.      }
11d40 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73  .      zData = s
11d50 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20  Mem.z;.    }.   
11d60 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38 20 2a   zEndHdr = (u8 *
11d70 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20 20  )&zData[len];.  
11d80 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a 29 26    zIdx = (u8 *)&
11d90 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a 20  zData[szHdr];.. 
11da0 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65 20 68     /* Scan the h
11db0 65 61 64 65 72 20 61 6e 64 20 75 73 65 20 69 74  eader and use it
11dc0 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65 20   to fill in the 
11dd0 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66 66  aType[] and aOff
11de0 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72 72  set[].    ** arr
11df0 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d 20 77  ays.  aType[i] w
11e00 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ill contain the 
11e10 74 79 70 65 20 69 6e 74 65 67 65 72 20 66 6f 72  type integer for
11e20 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20 2a 2a   the i-th.    **
11e30 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66 66   column and aOff
11e40 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74  set[i] will cont
11e50 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74 20 66  ain the offset f
11e60 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
11e70 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  g.    ** of the 
11e80 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20 73 74  record to the st
11e90 61 72 74 20 6f 66 20 74 68 65 20 64 61 74 61 20  art of the data 
11ea0 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63 6f 6c  for the i-th col
11eb0 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 66  umn.    */.    f
11ec0 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69 65 6c 64  or(i=0; i<nField
11ed0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
11ee0 28 20 7a 49 64 78 3c 7a 45 6e 64 48 64 72 20 29  ( zIdx<zEndHdr )
11ef0 7b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65  {.        aOffse
11f00 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20  t[i] = offset;. 
11f10 20 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 67         zIdx += g
11f20 65 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c  etVarint32(zIdx,
11f30 20 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20   aType[i]);.    
11f40 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71      szField = sq
11f50 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
11f60 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 69 5d 29  ypeLen(aType[i])
11f70 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ;.        offset
11f80 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20   += szField;.   
11f90 20 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 3c       if( offset<
11fa0 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54  szField ){  /* T
11fb0 72 75 65 20 69 66 20 6f 66 66 73 65 74 20 6f 76  rue if offset ov
11fc0 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20  erflows */.     
11fd0 20 20 20 20 20 7a 49 64 78 20 3d 20 26 7a 45 6e       zIdx = &zEn
11fe0 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72  dHdr[1];  /* For
11ff0 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ces SQLITE_CORRU
12000 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f 77 20  PT return below 
12010 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  */.          bre
12020 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
12030 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12040 20 20 20 2f 2a 20 49 66 20 69 20 69 73 20 6c 65     /* If i is le
12050 73 73 20 74 68 61 74 20 6e 46 69 65 6c 64 2c 20  ss that nField, 
12060 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6c  then there are l
12070 65 73 73 20 66 69 65 6c 64 73 20 69 6e 20 74 68  ess fields in th
12080 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 72 65  is.        ** re
12090 63 6f 72 64 20 74 68 61 6e 20 53 65 74 4e 75 6d  cord than SetNum
120a0 43 6f 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74 65  Columns indicate
120b0 64 20 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75  d there are colu
120c0 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20  mns in the.     
120d0 20 20 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74     ** table. Set
120e0 20 74 68 65 20 6f 66 66 73 65 74 20 66 6f 72 20   the offset for 
120f0 61 6e 79 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e  any extra column
12100 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e  s not present in
12110 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20  .        ** the 
12120 72 65 63 6f 72 64 20 74 6f 20 30 2e 20 54 68 69  record to 0. Thi
12130 73 20 74 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c  s tells code bel
12140 6f 77 20 74 6f 20 73 74 6f 72 65 20 61 20 4e 55  ow to store a NU
12150 4c 4c 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e  LL.        ** in
12160 73 74 65 61 64 20 6f 66 20 64 65 73 65 72 69 61  stead of deseria
12170 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66  lizing a value f
12180 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a  rom the record..
12190 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
121a0 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
121b0 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
121c0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
121d0 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
121e0 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67  );.    sMem.flag
121f0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20  s = MEM_Null;.. 
12200 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65     /* If we have
12210 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65   read more heade
12220 72 20 64 61 74 61 20 74 68 61 6e 20 77 61 73 20  r data than was 
12230 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
12240 20 68 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20   header,.    ** 
12250 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66  or if the end of
12260 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
12270 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70 61  appears to be pa
12280 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  st the end of th
12290 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c  e.    ** record,
122a0 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f   or if the end o
122b0 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  f the last field
122c0 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 62   appears to be b
122d0 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20  efore the end.  
122e0 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
122f0 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65  rd (when all fie
12300 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68  lds present), th
12310 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64 65  en we must be de
12320 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69  aling .    ** wi
12330 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  th a corrupt dat
12340 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  abase..    */.  
12350 20 20 69 66 28 20 28 7a 49 64 78 20 3e 20 7a 45    if( (zIdx > zE
12360 6e 64 48 64 72 29 20 7c 7c 20 28 6f 66 66 73 65  ndHdr) || (offse
12370 74 20 3e 20 70 61 79 6c 6f 61 64 53 69 7a 65 29  t > payloadSize)
12380 0a 20 20 20 20 20 20 20 20 20 7c 7c 20 28 7a 49  .         || (zI
12390 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f  dx==zEndHdr && o
123a0 66 66 73 65 74 21 3d 70 61 79 6c 6f 61 64 53 69  ffset!=payloadSi
123b0 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ze) ){.      rc 
123c0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
123d0 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
123e0 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
123f0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
12400 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20   Get the column 
12410 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20  information. If 
12420 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20 6e  aOffset[p2] is n
12430 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20  on-zero, then . 
12440 20 2a 2a 20 64 65 73 65 72 69 61 6c 69 7a 65 20   ** deserialize 
12450 74 68 65 20 76 61 6c 75 65 20 66 72 6f 6d 20 74  the value from t
12460 68 65 20 72 65 63 6f 72 64 2e 20 49 66 20 61 4f  he record. If aO
12470 66 66 73 65 74 5b 70 32 5d 20 69 73 20 7a 65 72  ffset[p2] is zer
12480 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e 20 74 68 65  o,.  ** then the
12490 72 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67  re are not enoug
124a0 68 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  h fields in the 
124b0 72 65 63 6f 72 64 20 74 6f 20 73 61 74 69 73 66  record to satisf
124c0 79 20 74 68 65 0a 20 20 2a 2a 20 72 65 71 75 65  y the.  ** reque
124d0 73 74 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  st.  In this cas
124e0 65 2c 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  e, set the value
124f0 20 4e 55 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69   NULL or to P4 i
12500 66 20 50 34 20 69 73 0a 20 20 2a 2a 20 61 20 70  f P4 is.  ** a p
12510 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d 20  ointer to a Mem 
12520 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69  object..  */.  i
12530 66 28 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 29  f( aOffset[p2] )
12540 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
12550 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
12560 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20     if( zRec ){. 
12570 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12580 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e  MemReleaseExtern
12590 61 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  al(pDest);.     
125a0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
125b0 61 6c 47 65 74 28 28 75 38 20 2a 29 26 7a 52 65  alGet((u8 *)&zRe
125c0 63 5b 61 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20  c[aOffset[p2]], 
125d0 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74  aType[p2], pDest
125e0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
125f0 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65      len = sqlite
12600 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
12610 65 6e 28 61 54 79 70 65 5b 70 32 5d 29 3b 0a 20  en(aType[p2]);. 
12620 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12630 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70  MemMove(&sMem, p
12640 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72 63 20  Dest);.      rc 
12650 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
12660 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c  FromBtree(pCrsr,
12670 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65   aOffset[p2], le
12680 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20  n, pC->isIndex, 
12690 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66  &sMem);.      if
126a0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
126b0 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
126c0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
126d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61       }.      zDa
126e0 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20  ta = sMem.z;.   
126f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
12700 72 69 61 6c 47 65 74 28 28 75 38 2a 29 7a 44 61  rialGet((u8*)zDa
12710 74 61 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70  ta, aType[p2], p
12720 44 65 73 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20  Dest);.    }.   
12730 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e   pDest->enc = en
12740 63 6f 64 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b  coding;.  }else{
12750 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
12760 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a  type==P4_MEM ){.
12770 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12780 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
12790 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70  pDest, pOp->p4.p
127a0 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Mem, MEM_Static)
127b0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
127c0 20 20 20 61 73 73 65 72 74 28 20 70 44 65 73 74     assert( pDest
127d0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
127e0 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20   );.    }.  }.. 
127f0 20 2f 2a 20 49 66 20 77 65 20 64 79 6e 61 6d 69   /* If we dynami
12800 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
12810 73 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  space to hold th
12820 65 20 64 61 74 61 20 28 69 6e 20 74 68 65 0a 20  e data (in the. 
12830 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
12840 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 63 61  emFromBtree() ca
12850 6c 6c 20 61 62 6f 76 65 29 20 74 68 65 6e 20 74  ll above) then t
12860 72 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20  ransfer control 
12870 6f 66 20 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e  of that.  ** dyn
12880 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
12890 65 64 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f  ed space over to
128a0 20 74 68 65 20 70 44 65 73 74 20 73 74 72 75 63   the pDest struc
128b0 74 75 72 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20  ture..  ** This 
128c0 70 72 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72  prevents a memor
128d0 79 20 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69  y copy..  */.  i
128e0 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20  f( sMem.zMalloc 
128f0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  ){.    assert( s
12900 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c  Mem.z==sMem.zMal
12910 6c 6f 63 20 29 3b 0a 20 20 20 20 61 73 73 65 72  loc );.    asser
12920 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67  t( !(pDest->flag
12930 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  s & MEM_Dyn) );.
12940 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44      assert( !(pD
12950 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  est->flags & (ME
12960 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29  M_Blob|MEM_Str))
12970 20 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d   || pDest->z==sM
12980 65 6d 2e 7a 20 29 3b 0a 20 20 20 20 70 44 65 73  em.z );.    pDes
12990 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  t->flags &= ~(ME
129a0 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74  M_Ephem|MEM_Stat
129b0 69 63 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  ic);.    pDest->
129c0 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
129d0 6d 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 20  m;.    pDest->z 
129e0 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44  = sMem.z;.    pD
129f0 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73  est->zMalloc = s
12a00 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d  Mem.zMalloc;.  }
12a10 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
12a20 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
12a30 61 62 6c 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70  able(pDest);..op
12a40 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55  _column_out:.  U
12a50 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
12a60 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47  ZE(pDest);.  REG
12a70 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
12a80 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62  >p3, pDest);.  b
12a90 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12aa0 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20  de: Affinity P1 
12ab0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
12ac0 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73  Apply affinities
12ad0 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50   to a range of P
12ae0 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  2 registers star
12af0 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a  ting with P1..**
12b00 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69  .** P4 is a stri
12b10 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
12b20 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54  aracters long. T
12b30 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72  he nth character
12b40 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
12b50 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
12b60 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
12b70 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
12b80 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a  sed for the nth.
12b90 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  ** memory cell i
12ba0 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a  n the range..*/.
12bb0 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79  case OP_Affinity
12bc0 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  : {.  const char
12bd0 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f   *zAffinity;   /
12be0 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
12bf0 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
12c00 20 20 63 68 61 72 20 63 41 66 66 3b 20 20 20 20    char cAff;    
12c10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
12c20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
12c30 20 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a   of affinity */.
12c40 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
12c50 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
12c60 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30  rt( zAffinity!=0
12c70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41   );.  assert( zA
12c80 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d  ffinity[pOp->p2]
12c90 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  ==0 );.  pIn1 = 
12ca0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
12cb0 20 20 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d    while( (cAff =
12cc0 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29   *(zAffinity++))
12cd0 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
12ce0 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61  t( pIn1 <= &p->a
12cf0 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a  Mem[p->nMem] );.
12d00 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
12d10 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
12d20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70      ExpandBlob(p
12d30 49 6e 31 29 3b 0a 20 20 20 20 61 70 70 6c 79 41  In1);.    applyA
12d40 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41  ffinity(pIn1, cA
12d50 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ff, encoding);. 
12d60 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
12d70 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12d80 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64  code: MakeRecord
12d90 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
12da0 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20  *.** Convert P2 
12db0 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e  registers beginn
12dc0 69 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f  ing with P1 into
12dd0 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72   the [record for
12de0 6d 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61  mat].** use as a
12df0 20 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20   data record in 
12e00 61 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  a database table
12e10 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20   or as a key.** 
12e20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68  in an index.  Th
12e30 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
12e40 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68  de can decode th
12e50 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a  e record later..
12e60 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
12e70 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  a string that is
12e80 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c   P2 characters l
12e90 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68  ong.  The nth ch
12ea0 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
12eb0 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
12ec0 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
12ed0 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
12ee0 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
12ef0 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20  he nth.** field 
12f00 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
12f10 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70  ..**.** The mapp
12f20 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74  ing from charact
12f30 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69  er to affinity i
12f40 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53  s given by the S
12f50 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61  QLITE_AFF_.** ma
12f60 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20  cros defined in 
12f70 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a  sqliteInt.h..**.
12f80 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c  ** If P4 is NULL
12f90 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20   then all index 
12fa0 66 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20  fields have the 
12fb0 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a  affinity NONE..*
12fc0 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65  /.case OP_MakeRe
12fd0 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e  cord: {.  u8 *zN
12fe0 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20  ewRecord;       
12ff0 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20   /* A buffer to 
13000 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f  hold the data fo
13010 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  r the new record
13020 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b   */.  Mem *pRec;
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13040 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  The new record *
13050 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20  /.  u64 nData;  
13060 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
13070 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
13080 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20   data space */. 
13090 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20   int nHdr;      
130a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
130b0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
130c0 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
130d0 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20  i64 nByte;      
130e0 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73         /* Data s
130f0 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f  pace required fo
13100 72 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f  r this record */
13110 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20  .  int nZero;   
13120 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
13130 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
13140 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
13150 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
13160 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20  int nVarint;    
13170 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13180 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76   of bytes in a v
13190 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73  arint */.  u32 s
131a0 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20  erial_type;     
131b0 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20    /* Type field 
131c0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30  */.  Mem *pData0
131d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
131e0 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65  irst field to be
131f0 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74   combined into t
13200 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d  he record */.  M
13210 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20  em *pLast;      
13220 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69        /* Last fi
13230 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  eld of the recor
13240 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  d */.  int nFiel
13250 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
13260 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   Number of field
13270 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
13280 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69  */.  char *zAffi
13290 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54  nity;       /* T
132a0 68 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69  he affinity stri
132b0 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ng for the recor
132c0 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f  d */.  int file_
132d0 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a  format;       /*
132e0 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20   File format to 
132f0 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67  use for encoding
13300 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13320 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e  Space used in zN
13330 65 77 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a 20 20  ewRecord[] */.  
13340 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
13350 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
13360 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a   of a field */..
13370 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68    /* Assuming th
13380 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
13390 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20  s N fields, the 
133a0 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f  record format lo
133b0 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68  oks.  ** like th
133c0 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d  is:.  **.  ** --
133d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
133e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
133f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13400 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13410 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64  ------.  ** | hd
13420 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20  r-size | type 0 
13430 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c  | type 1 | ... |
13440 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61   type N-1 | data
13450 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e  0 | ... | data N
13460 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  -1 | .  ** -----
13470 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13480 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13490 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
134a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
134b0 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61  ---.  **.  ** Da
134c0 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66  ta(0) is taken f
134d0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e  rom register P1.
134e0 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20    Data(1) comes 
134f0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
13500 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66  +1.  ** and so f
13510 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  roth..  **.  ** 
13520 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20  Each type field 
13530 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72  is a varint repr
13540 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72  esenting the ser
13550 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20  ial type of the 
13560 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  .  ** correspond
13570 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74  ing data element
13580 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62   (see sqlite3Vdb
13590 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20  eSerialType()). 
135a0 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a  The.  ** hdr-siz
135b0 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20  e field is also 
135c0 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  a varint which i
135d0 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f  s the offset fro
135e0 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  m the beginning.
135f0 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
13600 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a  rd to data0..  *
13610 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20  /.  nData = 0;  
13620 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13630 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
13640 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64  a space */.  nHd
13650 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
13660 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
13670 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
13680 63 65 20 2a 2f 0a 20 20 6e 42 79 74 65 20 3d 20  ce */.  nByte = 
13690 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61  0;         /* Da
136a0 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65  ta space require
136b0 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72  d for this recor
136c0 64 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30  d */.  nZero = 0
136d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
136e0 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
136f0 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
13700 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
13710 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31  nField = pOp->p1
13720 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ;.  zAffinity = 
13730 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
13740 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26  ert( nField>0 &&
13750 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
13760 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d  p->p2+nField<=p-
13770 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 44 61  >nMem+1 );.  pDa
13780 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65  ta0 = &aMem[nFie
13790 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20  ld];.  nField = 
137a0 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74  pOp->p2;.  pLast
137b0 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c   = &pData0[nFiel
137c0 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72  d-1];.  file_for
137d0 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74  mat = p->minWrit
137e0 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20  eFileFormat;..  
137f0 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65 20  /* Identify the 
13800 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
13810 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
13820 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20  ->p3<pOp->p1 || 
13830 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31  pOp->p3>=pOp->p1
13840 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f  +pOp->p2 );.  pO
13850 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
13860 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
13870 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
13880 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72  ;..  /* Loop thr
13890 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74  ough the element
138a0 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65  s that will make
138b0 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74   up the record t
138c0 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75  o figure.  ** ou
138d0 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65  t how much space
138e0 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
138f0 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
13900 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63  .  */.  for(pRec
13910 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70  =pData0; pRec<=p
13920 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20  Last; pRec++){. 
13930 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
13940 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20  Valid(pRec) );. 
13950 20 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79     if( zAffinity
13960 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41   ){.      applyA
13970 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41  ffinity(pRec, zA
13980 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61  ffinity[pRec-pDa
13990 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ta0], encoding);
139a0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
139b0 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a  Rec->flags&MEM_Z
139c0 65 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30  ero && pRec->n>0
139d0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
139e0 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
139f0 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a  ob(pRec);.    }.
13a00 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
13a10 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
13a20 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69  ialType(pRec, fi
13a30 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20  le_format);.    
13a40 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62  len = sqlite3Vdb
13a50 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73  eSerialTypeLen(s
13a60 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20  erial_type);.   
13a70 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20   nData += len;. 
13a80 20 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74     nHdr += sqlit
13a90 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69  e3VarintLen(seri
13aa0 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66  al_type);.    if
13ab0 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
13ac0 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
13ad0 20 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a    /* Only pure z
13ae0 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73  ero-filled BLOBs
13af0 20 63 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f   can be input to
13b00 20 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20   this Opcode..  
13b10 20 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74      ** We do not
13b20 20 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74   allow blobs wit
13b30 68 20 61 20 70 72 65 66 69 78 20 61 6e 64 20 61  h a prefix and a
13b40 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69   zero-filled tai
13b50 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72  l. */.      nZer
13b60 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
13b70 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ro;.    }else if
13b80 28 20 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e  ( len ){.      n
13b90 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  Zero = 0;.    }.
13ba0 20 20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68    }..  /* Add th
13bb0 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72  e initial header
13bc0 20 76 61 72 69 6e 74 20 61 6e 64 20 74 6f 74 61   varint and tota
13bd0 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20  l the size */.  
13be0 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20  nHdr += nVarint 
13bf0 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
13c00 65 6e 28 6e 48 64 72 29 3b 0a 20 20 69 66 28 20  en(nHdr);.  if( 
13c10 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56  nVarint<sqlite3V
13c20 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29  arintLen(nHdr) )
13c30 7b 0a 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20  {.    nHdr++;.  
13c40 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72  }.  nByte = nHdr
13c50 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20  +nData-nZero;.  
13c60 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
13c70 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
13c80 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
13c90 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
13ca0 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
13cb0 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  re the output re
13cc0 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75 66  gister has a buf
13cd0 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  fer large enough
13ce0 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20   to store .  ** 
13cf0 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20  the new record. 
13d00 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  The output regis
13d10 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73  ter (pOp->p3) is
13d20 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a   not allowed to.
13d30 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74    ** be one of t
13d40 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
13d50 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20  rs (because the 
13d60 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74  following call t
13d70 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  o.  ** sqlite3Vd
13d80 62 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c  beMemGrow() coul
13d90 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61  d clobber the va
13da0 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73  lue before it is
13db0 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69   used)..  */.  i
13dc0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
13dd0 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74  mGrow(pOut, (int
13de0 29 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20  )nByte, 0) ){.  
13df0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
13e00 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20   }.  zNewRecord 
13e10 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b  = (u8 *)pOut->z;
13e20 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65  ..  /* Write the
13e30 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d   record */.  i =
13e40 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65   putVarint32(zNe
13e50 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a  wRecord, nHdr);.
13e60 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61    for(pRec=pData
13e70 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20  0; pRec<=pLast; 
13e80 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72  pRec++){.    ser
13e90 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
13ea0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
13eb0 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
13ec0 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75  at);.    i += pu
13ed0 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52  tVarint32(&zNewR
13ee0 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c  ecord[i], serial
13ef0 5f 74 79 70 65 29 3b 20 20 20 20 20 20 2f 2a 20  _type);      /* 
13f00 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20  serial type */. 
13f10 20 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44   }.  for(pRec=pD
13f20 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73  ata0; pRec<=pLas
13f30 74 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20  t; pRec++){  /* 
13f40 73 65 72 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20  serial data */. 
13f50 20 20 20 69 20 2b 3d 20 73 71 6c 69 74 65 33 56     i += sqlite3V
13f60 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e  dbeSerialPut(&zN
13f70 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e  ewRecord[i], (in
13f80 74 29 28 6e 42 79 74 65 2d 69 29 2c 20 70 52 65  t)(nByte-i), pRe
13f90 63 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  c,file_format);.
13fa0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69 3d    }.  assert( i=
13fb0 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73  =nByte );..  ass
13fc0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
13fd0 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
13fe0 65 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  em );.  pOut->n 
13ff0 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
14000 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
14010 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e  M_Blob | MEM_Dyn
14020 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d  ;.  pOut->xDel =
14030 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20   0;.  if( nZero 
14040 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e  ){.    pOut->u.n
14050 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20  Zero = nZero;.  
14060 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
14070 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20   MEM_Zero;.  }. 
14080 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
14090 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
140a0 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
140b0 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64  s ever converted
140c0 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45   to text */.  RE
140d0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
140e0 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
140f0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
14100 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
14110 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
14120 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a   Count P1 P2 * *
14130 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74   *.**.** Store t
14140 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  he number of ent
14150 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72  ries (an integer
14160 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74   value) in the t
14170 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a  able or index .*
14180 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  * opened by curs
14190 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65  or P1 in registe
141a0 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  r P2.*/.#ifndef 
141b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
141c0 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43  ECOUNT.case OP_C
141d0 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
141e0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
141f0 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74  se */.  i64 nEnt
14200 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  ry;.  BtCursor *
14210 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20  pCrsr;..  pCrsr 
14220 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
14230 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20  p1]->pCursor;.  
14240 69 66 28 20 70 43 72 73 72 20 29 7b 0a 20 20 20  if( pCrsr ){.   
14250 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
14260 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26  eeCount(pCrsr, &
14270 6e 45 6e 74 72 79 29 3b 0a 20 20 7d 65 6c 73 65  nEntry);.  }else
14280 7b 0a 20 20 20 20 6e 45 6e 74 72 79 20 3d 20 30  {.    nEntry = 0
14290 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
142a0 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72  i = nEntry;.  br
142b0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
142c0 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f  * Opcode: Savepo
142d0 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  int P1 * * P4 *.
142e0 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65  **.** Open, rele
142f0 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20  ase or rollback 
14300 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61  the savepoint na
14310 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72  med by parameter
14320 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a   P4, depending.*
14330 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  * on the value o
14340 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20  f P1. To open a 
14350 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  new savepoint, P
14360 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65  1==0. To release
14370 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20   (commit) an.** 
14380 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
14390 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f  nt, P1==1, or to
143a0 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69   rollback an exi
143b0 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20  sting savepoint 
143c0 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  P1==2..*/.case O
143d0 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20  P_Savepoint: {. 
143e0 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14400 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20   /* Value of P1 
14410 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61  operand */.  cha
14420 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
14430 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14440 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e  Name of savepoin
14450 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65  t */.  int nName
14460 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
14470 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  New;.  Savepoint
14480 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20   *pSavepoint;.  
14490 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b  Savepoint *pTmp;
144a0 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
144b0 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20  t;.  int ii;..  
144c0 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
144d0 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  zName = pOp->p4.
144e0 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20  z;..  /* Assert 
144f0 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61  that the p1 para
14500 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20  meter is valid. 
14510 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  Also that if the
14520 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20  re is no open.  
14530 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
14540 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f  then there canno
14550 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69  t be any savepoi
14560 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73  nts. .  */.  ass
14570 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
14580 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75  int==0 || db->au
14590 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
145a0 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56   assert( p1==SAV
145b0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31  EPOINT_BEGIN||p1
145c0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
145d0 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  ASE||p1==SAVEPOI
145e0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20  NT_ROLLBACK );. 
145f0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
14600 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69  vepoint || db->i
14610 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
14620 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  point==0 );.  as
14630 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70  sert( checkSavep
14640 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b  ointCount(db) );
14650 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45  ..  if( p1==SAVE
14660 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20  POINT_BEGIN ){. 
14670 20 20 20 69 66 28 20 64 62 2d 3e 77 72 69 74 65     if( db->write
14680 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20  VdbeCnt>0 ){.   
14690 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65     /* A new save
146a0 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20  point cannot be 
146b0 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65  created if there
146c0 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
146d0 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74  e .      ** stat
146e0 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65  ements (i.e. ope
146f0 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63  n read/write inc
14700 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61  remental blob ha
14710 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f  ndles)..      */
14720 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
14730 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
14740 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
14750 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20   open savepoint 
14760 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
14770 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
14780 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
14790 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
147a0 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
147b0 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69      nName = sqli
147c0 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d  te3Strlen30(zNam
147d0 65 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72  e);..      /* Cr
147e0 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70  eate a new savep
147f0 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20  oint structure. 
14800 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20  */.      pNew = 
14810 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
14820 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61  aw(db, sizeof(Sa
14830 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31  vepoint)+nName+1
14840 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65  );.      if( pNe
14850 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65  w ){.        pNe
14860 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72  w->zName = (char
14870 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20   *)&pNew[1];.   
14880 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77       memcpy(pNew
14890 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20  ->zName, zName, 
148a0 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20  nName+1);.    . 
148b0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
148c0 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72  re is no open tr
148d0 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
148e0 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73  mark this as a s
148f0 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a  pecial.        *
14900 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  * "transaction s
14910 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20  avepoint". */.  
14920 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
14930 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
14940 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
14950 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
14960 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
14970 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
14980 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
14990 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  e{.          db-
149a0 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20  >nSavepoint++;. 
149b0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20 20         }.    .  
149c0 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68        /* Link th
149d0 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  e new savepoint 
149e0 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
149f0 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e  e handle's list.
14a00 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77   */.        pNew
14a10 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53  ->pNext = db->pS
14a20 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
14a30 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
14a40 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20   = pNew;.       
14a50 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
14a60 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
14a70 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
14a80 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
14a90 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20  .    iSavepoint 
14aa0 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e  = 0;..    /* Fin
14ab0 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65  d the named save
14ac0 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20  point. If there 
14ad0 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70  is no such savep
14ae0 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20  oint, then an.  
14af0 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73    ** an error is
14b00 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
14b10 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66   user.  */.    f
14b20 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70  or(.      pSavep
14b30 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  oint = db->pSave
14b40 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53  point; .      pS
14b50 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69  avepoint && sqli
14b60 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65  te3StrICmp(pSave
14b70 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  point->zName, zN
14b80 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76  ame);.      pSav
14b90 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
14ba0 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29  int->pNext.    )
14bb0 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69  {.      iSavepoi
14bc0 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  nt++;.    }.    
14bd0 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20  if( !pSavepoint 
14be0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
14bf0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
14c00 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73  rrMsg, db, "no s
14c10 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25  uch savepoint: %
14c20 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  s", zName);.    
14c30 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
14c40 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ROR;.    }else i
14c50 66 28 20 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  f( .        db->
14c60 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20 7c  writeVdbeCnt>0 |
14c70 7c 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  | (p1==SAVEPOINT
14c80 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 64 62 2d  _ROLLBACK && db-
14c90 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31  >activeVdbeCnt>1
14ca0 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
14cb0 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  /* It is not pos
14cc0 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65  sible to release
14cd0 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65   (commit) a save
14ce0 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61  point if there a
14cf0 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74  re .      ** act
14d00 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d  ive write statem
14d10 65 6e 74 73 2e 20 49 74 20 69 73 20 6e 6f 74 20  ents. It is not 
14d20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 6f 6c 6c  possible to roll
14d30 62 61 63 6b 20 61 20 73 61 76 65 70 6f 69 6e 74  back a savepoint
14d40 0a 20 20 20 20 20 20 2a 2a 20 69 66 20 74 68 65  .      ** if the
14d50 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
14d60 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 74 20  e statements at 
14d70 61 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  all..      */.  
14d80 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
14d90 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
14da0 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 22  , db, .        "
14db0 63 61 6e 6e 6f 74 20 25 73 20 73 61 76 65 70 6f  cannot %s savepo
14dc0 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d  int - SQL statem
14dd0 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
14de0 22 2c 0a 20 20 20 20 20 20 20 20 28 70 31 3d 3d  ",.        (p1==
14df0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
14e00 43 4b 20 3f 20 22 72 6f 6c 6c 62 61 63 6b 22 3a  CK ? "rollback":
14e10 20 22 72 65 6c 65 61 73 65 22 29 0a 20 20 20 20   "release").    
14e20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20    );.      rc = 
14e30 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
14e40 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f   }else{..      /
14e50 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
14e60 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20  her or not this 
14e70 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  is a transaction
14e80 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73   savepoint. If s
14e90 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20  o,.      ** and 
14ea0 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53  this is a RELEAS
14eb0 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20  E command, then 
14ec0 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
14ed0 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a  saction .      *
14ee0 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20  * is committed. 
14ef0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
14f00 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f  int isTransactio
14f10 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  n = pSavepoint->
14f20 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e  pNext==0 && db->
14f30 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
14f40 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66  epoint;.      if
14f50 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20  ( isTransaction 
14f60 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  && p1==SAVEPOINT
14f70 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
14f80 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71      if( (rc = sq
14f90 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
14fa0 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
14fb0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
14fc0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
14fd0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
14fe0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
14ff0 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  it = 1;.        
15000 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
15010 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
15020 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20  USY ){.         
15030 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20   p->pc = pc;.   
15040 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
15050 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
15060 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
15070 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
15080 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
15090 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
150a0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
150b0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
150c0 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20  vepoint = 0;.   
150d0 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b       rc = p->rc;
150e0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
150f0 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74        iSavepoint
15100 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
15110 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d  t - iSavepoint -
15120 20 31 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   1;.        for(
15130 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
15140 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
15150 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
15160 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62  treeSavepoint(db
15170 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70  ->aDb[ii].pBt, p
15180 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
15190 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
151a0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
151b0 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
151c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
151d0 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
151e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
151f0 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
15200 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20  INT_ROLLBACK && 
15210 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54  (db->flags&SQLIT
15220 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29  E_InternChanges)
15230 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
15240 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
15250 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
15260 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
15270 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65  sqlite3ResetInte
15280 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30  rnalSchema(db, 0
15290 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  );.          db-
152a0 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c  >flags = (db->fl
152b0 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74  ags | SQLITE_Int
152c0 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20  ernChanges);.   
152d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
152e0 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72   .      /* Regar
152f0 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
15300 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
15310 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20  SE or ROLLBACK, 
15320 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20  destroy all .   
15330 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73     ** savepoints
15340 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f   nested inside o
15350 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  f the savepoint 
15360 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
15370 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c  n. */.      whil
15380 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  e( db->pSavepoin
15390 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b  t!=pSavepoint ){
153a0 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20  .        pTmp = 
153b0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
153c0 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
153d0 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70  epoint = pTmp->p
153e0 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
153f0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
15400 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64  pTmp);.        d
15410 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
15420 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
15430 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45  /* If it is a RE
15440 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74  LEASE, then dest
15450 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e  roy the savepoin
15460 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
15470 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f   on .      ** to
15480 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f  o. If it is a RO
15490 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20  LLBACK TO, then 
154a0 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  set the number o
154b0 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20  f deferred .    
154c0 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20    ** constraint 
154d0 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65  violations prese
154e0 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
154f0 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  se to the value 
15500 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20  stored.      ** 
15510 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69  when the savepoi
15520 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20  nt was created. 
15530 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31   */.      if( p1
15540 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
15550 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ASE ){.        a
15560 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e  ssert( pSavepoin
15570 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t==db->pSavepoin
15580 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  t );.        db-
15590 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53  >pSavepoint = pS
155a0 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b  avepoint->pNext;
155b0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
155c0 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65  DbFree(db, pSave
155d0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
155e0 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
155f0 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  on ){.          
15600 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
15610 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
15620 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
15630 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
15640 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
15650 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
15660 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
15670 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  }..  break;.}../
15680 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f  * Opcode: AutoCo
15690 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  mmit P1 P2 * * *
156a0 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64  .**.** Set the d
156b0 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d  atabase auto-com
156c0 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28  mit flag to P1 (
156d0 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69  1 or 0). If P2 i
156e0 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20  s true, roll.** 
156f0 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74  back any current
15700 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20  ly active btree 
15710 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66  transactions. If
15720 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
15730 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70  ctive.** VMs (ap
15740 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e  art from this on
15750 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42  e), then a ROLLB
15760 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f  ACK fails.  A CO
15770 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a  MMIT fails if.**
15780 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
15790 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72  e writing VMs or
157a0 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61 74   active VMs that
157b0 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63 68   use shared cach
157c0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  e..**.** This in
157d0 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73  struction causes
157e0 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e   the VM to halt.
157f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f  .*/.case OP_Auto
15800 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20  Commit: {.  int 
15810 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
15820 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61  t;.  int iRollba
15830 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e  ck;.  int turnOn
15840 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75  AC;..  desiredAu
15850 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e  toCommit = pOp->
15860 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20  p1;.  iRollback 
15870 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72  = pOp->p2;.  tur
15880 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41  nOnAC = desiredA
15890 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62  utoCommit && !db
158a0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  ->autoCommit;.  
158b0 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
158c0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
158d0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
158e0 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
158f0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
15900 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62  mit==1 || iRollb
15910 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ack==0 );.  asse
15920 72 74 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64  rt( db->activeVd
15930 62 65 43 6e 74 3e 30 20 29 3b 20 20 2f 2a 20 41  beCnt>0 );  /* A
15940 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65  t least this one
15950 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f   VM is active */
15960 0a 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  ..  if( turnOnAC
15970 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26   && iRollback &&
15980 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
15990 6e 74 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49  nt>1 ){.    /* I
159a0 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
159b0 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20  on implements a 
159c0 52 4f 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68  ROLLBACK and oth
159d0 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a  er VMs are.    *
159e0 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c  * still running,
159f0 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69   and a transacti
15a00 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20 72 65  on is active, re
15a10 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e  turn an error in
15a20 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20  dicating.    ** 
15a30 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
15a40 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
15a50 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
15a60 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
15a70 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
15a80 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f  , db, "cannot ro
15a90 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  llback transacti
15aa0 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22  on - ".        "
15ab0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
15ac0 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
15ad0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
15ae0 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  SY;.  }else if( 
15af0 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f  turnOnAC && !iRo
15b00 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 77 72  llback && db->wr
15b10 69 74 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a  iteVdbeCnt>0 ){.
15b20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
15b30 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
15b40 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61  ments a COMMIT a
15b50 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  nd other VMs are
15b60 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20   writing.    ** 
15b70 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
15b80 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
15b90 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
15ba0 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
15bb0 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  t. .    */.    s
15bc0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
15bd0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
15be0 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
15bf0 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a  transaction - ".
15c00 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
15c10 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
15c20 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20  ess");.    rc = 
15c30 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
15c40 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64  else if( desired
15c50 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e  AutoCommit!=db->
15c60 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
15c70 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20    if( iRollback 
15c80 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
15c90 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
15ca0 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73  it==1 );.      s
15cb0 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
15cc0 6c 28 64 62 29 3b 0a 20 20 20 20 20 20 64 62 2d  l(db);.      db-
15cd0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
15ce0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
15cf0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
15d00 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
15d10 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
15d20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
15d30 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  urn;.    }else{.
15d40 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
15d50 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69 72  mmit = (u8)desir
15d60 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
15d70 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
15d80 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
15d90 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
15da0 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
15db0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
15dc0 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64  ommit = (u8)(1-d
15dd0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
15de0 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63  );.        p->rc
15df0 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
15e00 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  USY;.        got
15e10 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
15e20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
15e30 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
15e40 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20  atement==0 );.  
15e50 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61    sqlite3CloseSa
15e60 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20  vepoints(db);.  
15e70 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
15e80 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
15e90 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  rc = SQLITE_DONE
15ea0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
15eb0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
15ec0 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20  RROR;.    }.    
15ed0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
15ee0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
15ef0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
15f00 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
15f10 0a 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72  .        (!desir
15f20 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63  edAutoCommit)?"c
15f30 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72  annot start a tr
15f40 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e  ansaction within
15f50 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a   a transaction":
15f60 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c  (.        (iRoll
15f70 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f  back)?"cannot ro
15f80 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e  llback - no tran
15f90 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
15fa0 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  e":.            
15fb0 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63         "cannot c
15fc0 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73  ommit - no trans
15fd0 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
15fe0 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20  "));.         . 
15ff0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
16000 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61  RROR;.  }.  brea
16010 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
16020 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20   Transaction P1 
16030 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42  P2 * * *.**.** B
16040 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  egin a transacti
16050 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e 73 61 63  on.  The transac
16060 74 69 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20 61  tion ends when a
16070 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62   Commit or Rollb
16080 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73  ack.** opcode is
16090 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20 44   encountered.  D
160a0 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
160b0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73 65 74 74  ON CONFLICT sett
160c0 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e  ing, the.** tran
160d0 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c  saction might al
160e0 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  so be rolled bac
160f0 6b 20 69 66 20 61 6e 20 65 72 72 6f 72 20 69 73  k if an error is
16100 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a   encountered..**
16110 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
16120 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
16130 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63  ase file on whic
16140 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  h the transactio
16150 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e  n is.** started.
16160 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65    Index 0 is the
16170 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
16180 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20  ile and index 1 
16190 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75  is the.** file u
161a0 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
161b0 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63  y tables.  Indic
161c0 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20  es of 2 or more 
161d0 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20  are used for.** 
161e0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
161f0 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20  es..**.** If P2 
16200 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
16210 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  n a write-transa
16220 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
16230 2e 20 20 41 20 52 45 53 45 52 56 45 44 20 6c 6f  .  A RESERVED lo
16240 63 6b 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65  ck is.** obtaine
16250 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  d on the databas
16260 65 20 66 69 6c 65 20 77 68 65 6e 20 61 20 77 72  e file when a wr
16270 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
16280 69 73 20 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a  is started.  No.
16290 2a 2a 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ** other process
162a0 20 63 61 6e 20 73 74 61 72 74 20 61 6e 6f 74 68   can start anoth
162b0 65 72 20 77 72 69 74 65 20 74 72 61 6e 73 61 63  er write transac
162c0 74 69 6f 6e 20 77 68 69 6c 65 20 74 68 69 73 20  tion while this 
162d0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a  transaction is.*
162e0 2a 20 75 6e 64 65 72 77 61 79 2e 20 20 53 74 61  * underway.  Sta
162f0 72 74 69 6e 67 20 61 20 77 72 69 74 65 20 74 72  rting a write tr
16300 61 6e 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63  ansaction also c
16310 72 65 61 74 65 73 20 61 20 72 6f 6c 6c 62 61 63  reates a rollbac
16320 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20  k journal. A.** 
16330 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
16340 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
16350 64 20 62 65 66 6f 72 65 20 61 6e 79 20 63 68 61  d before any cha
16360 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65  nges can be made
16370 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
16380 61 73 65 2e 20 20 49 66 20 50 32 20 69 73 20 32  ase.  If P2 is 2
16390 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 65 6e   or greater then
163a0 20 61 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f   an EXCLUSIVE lo
163b0 63 6b 20 69 73 20 61 6c 73 6f 20 6f 62 74 61 69  ck is also obtai
163c0 6e 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 66 69  ned.** on the fi
163d0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77  le..**.** If a w
163e0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
163f0 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20   is started and 
16400 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d  the Vdbe.usesStm
16410 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73  tJournal flag is
16420 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66  .** true (this f
16430 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68  lag is set if th
16440 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66  e Vdbe may modif
16450 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  y more than one 
16460 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74  row and may.** t
16470 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
16480 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74  ception), a stat
16490 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
164a0 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70  n may also be op
164b0 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70  ened..** More sp
164c0 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74  ecifically, a st
164d0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
164e0 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66  ion is opened if
164f0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
16500 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  * connection is 
16510 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e  currently not in
16520 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   autocommit mode
16530 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
16540 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76  e other.** activ
16550 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20  e statements. A 
16560 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
16570 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65  ction allows the
16580 20 61 66 66 65 63 74 73 20 6f 66 20 74 68 69 73   affects of this
16590 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72  .** VDBE to be r
165a0 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72  olled back after
165b0 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75   an error withou
165c0 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c  t having to roll
165d0 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74   back the.** ent
165e0 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ire transaction.
165f0 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20   If no error is 
16600 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65  encountered, the
16610 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
16620 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61  action.** will a
16630 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d  utomatically com
16640 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
16650 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
16660 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P2 is zero, th
16670 65 6e 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 69  en a read-lock i
16680 73 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68  s obtained on th
16690 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
166a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e  .*/.case OP_Tran
166b0 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72  saction: {.  Btr
166c0 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
166d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
166e0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
166f0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
16700 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
16710 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
16720 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
16730 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
16740 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ..  if( pBt ){. 
16750 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
16760 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
16770 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  Bt, pOp->p2);.  
16780 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
16790 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
167a0 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
167b0 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
167c0 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
167d0 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
167e0 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  n;.    }.    if(
167f0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
16800 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
16810 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
16820 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
16830 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73  pOp->p2 && p->us
16840 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20  esStmtJournal . 
16850 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f      && (db->auto
16860 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
16870 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31  >activeVdbeCnt>1
16880 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
16890 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
168a0 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
168b0 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t) );.      if( 
168c0 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
168d0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
168e0 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
168f0 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61  nt>=0 && db->nSa
16900 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20  vepoint>=0 );.  
16910 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
16920 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20  ment++; .       
16930 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d   p->iStatement =
16940 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
16950 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  + db->nStatement
16960 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
16970 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
16980 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20  eBeginStmt(pBt, 
16990 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a  p->iStatement);.
169a0 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20  .      /* Store 
169b0 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
169c0 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
169d0 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72  e handles deferr
169e0 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20  ed constraint.  
169f0 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20      ** counter. 
16a00 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
16a10 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65   transaction nee
16a20 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
16a30 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74  back,.      ** t
16a40 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  he value of this
16a50 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74   counter needs t
16a60 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f  o be restored to
16a70 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e  o.  */.      p->
16a80 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64  nStmtDefCons = d
16a90 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
16aa0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
16ab0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
16ac0 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
16ad0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
16ae0 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
16af0 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
16b00 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
16b10 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
16b20 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20  er P2..** P3==1 
16b30 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
16b40 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73  rsion.  P3==2 is
16b50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
16b60 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69  rmat..** P3==3 i
16b70 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
16b80 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
16b90 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
16ba0 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
16bb0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
16bc0 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
16bd0 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
16be0 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
16bf0 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
16c00 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  tables..**.** Th
16c10 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65  ere must be a re
16c20 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad-lock on the d
16c30 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20  atabase (either 
16c40 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  a transaction.**
16c50 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
16c60 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62   or there must b
16c70 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  e an open cursor
16c80 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63  ) before.** exec
16c90 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  uting this instr
16ca0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
16cb0 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b  OP_ReadCookie: {
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16cd0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
16ce0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61  e */.  int iMeta
16cf0 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
16d00 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 69  nt iCookie;..  i
16d10 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
16d20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70  iCookie = pOp->p
16d30 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  3;.  assert( pOp
16d40 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p3<SQLITE_N_BT
16d50 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
16d60 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
16d70 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
16d80 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
16d90 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a  [iDb].pBt!=0 );.
16da0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
16db0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44  reeMask & (1<<iD
16dc0 62 29 29 21 3d 30 20 29 3b 0a 0a 20 20 73 71 6c  b))!=0 );..  sql
16dd0 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
16de0 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
16df0 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32  t, iCookie, (u32
16e00 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f   *)&iMeta);.  pO
16e10 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b  ut->u.i = iMeta;
16e20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
16e30 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69  Opcode: SetCooki
16e40 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
16e50 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
16e60 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
16e70 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65 74  er P3 (interpret
16e80 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
16e90 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65  ).** into cookie
16ea0 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61   number P2 of da
16eb0 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d 3d  tabase P1.  P2==
16ec0 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20  1 is the schema 
16ed0 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32  version.  .** P2
16ee0 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
16ef0 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d  ase format. P2==
16f00 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  3 is the recomme
16f10 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
16f20 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73   .** size, and s
16f30 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
16f40 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
16f50 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
16f60 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64  ==1 is the .** d
16f70 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
16f80 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f  d to store tempo
16f90 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
16fa0 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** A transaction
16fb0 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
16fc0 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e   before executin
16fd0 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
16fe0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f  /.case OP_SetCoo
16ff0 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kie: {       /* 
17000 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62  in3 */.  Db *pDb
17010 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
17020 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52  >p2<SQLITE_N_BTR
17030 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73  EE_META );.  ass
17040 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
17050 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
17060 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
17070 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
17080 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  (1<<pOp->p1))!=0
17090 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
170a0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
170b0 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
170c0 74 21 3d 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d  t!=0 );.  pIn3 =
170d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
170e0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
170f0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33  mIntegerify(pIn3
17100 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  );.  /* See note
17110 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
17120 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
17130 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
17140 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
17150 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
17160 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29  , pOp->p2, (int)
17170 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66  pIn3->u.i);.  if
17180 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
17190 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
171a0 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74  ){.    /* When t
171b0 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
171c0 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64   changes, record
171d0 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20   the new cookie 
171e0 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20  internally */.  
171f0 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
17200 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
17210 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a  (int)pIn3->u.i;.
17220 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
17230 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
17240 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69  anges;.  }else i
17250 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
17260 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b  E_FILE_FORMAT ){
17270 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63  .    /* Record c
17280 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69  hanges in the fi
17290 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20  le format */.   
172a0 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
172b0 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38  ile_format = (u8
172c0 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a  )pIn3->u.i;.  }.
172d0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31    if( pOp->p1==1
172e0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c   ){.    /* Inval
172f0 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72  idate all prepar
17300 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68  ed statements wh
17310 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20  enever the TEMP 
17320 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20  database.    ** 
17330 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65  schema is change
17340 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34  d.  Ticket #1644
17350 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45   */.    sqlite3E
17360 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
17370 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
17380 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
17390 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
173a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72 69  ./* Opcode: Veri
173b0 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 2a  fyCookie P1 P2 *
173c0 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
173d0 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c   value of global
173e0 20 64 61 74 61 62 61 73 65 20 70 61 72 61 6d 65   database parame
173f0 74 65 72 20 6e 75 6d 62 65 72 20 30 20 28 74 68  ter number 0 (th
17400 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65 72 73  e.** schema vers
17410 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20 73 75  ion) and make su
17420 72 65 20 69 74 20 69 73 20 65 71 75 61 6c 20 74  re it is equal t
17430 6f 20 50 32 2e 20 20 0a 2a 2a 20 50 31 20 69 73  o P2.  .** P1 is
17440 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 75   the database nu
17450 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 30 20  mber which is 0 
17460 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
17470 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e  abase file.** an
17480 64 20 31 20 66 6f 72 20 74 68 65 20 66 69 6c 65  d 1 for the file
17490 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61   holding tempora
174a0 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 73 6f  ry tables and so
174b0 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62 65 72  me higher number
174c0 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69 61 72  .** for auxiliar
174d0 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  y databases..**.
174e0 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68  ** The cookie ch
174f0 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20  anges its value 
17500 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
17510 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
17520 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  nges..** This op
17530 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20  eration is used 
17540 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74  to detect when t
17550 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68  hat the cookie h
17560 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e  as changed.** an
17570 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65  d that the curre
17580 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73  nt process needs
17590 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
175a0 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74  chema..**.** Eit
175b0 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
175c0 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76 65 20  n needs to have 
175d0 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f 72 20  been started or 
175e0 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73  an OP_Open needs
175f0 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63 75 74  .** to be execut
17600 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69 73 68  ed (to establish
17610 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20 62 65   a read lock) be
17620 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f 64 65  fore this opcode
17630 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a   is.** invoked..
17640 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72 69 66  */.case OP_Verif
17650 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74  yCookie: {.  int
17660 20 69 4d 65 74 61 3b 0a 20 20 42 74 72 65 65 20   iMeta;.  Btree 
17670 2a 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  *pBt;.  assert( 
17680 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
17690 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
176a0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
176b0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
176c0 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
176d0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
176e0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69  Op->p1].pBt;.  i
176f0 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 73 71  f( pBt ){.    sq
17700 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
17710 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48  a(pBt, BTREE_SCH
17720 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33  EMA_VERSION, (u3
17730 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 7d  2 *)&iMeta);.  }
17740 65 6c 73 65 7b 0a 20 20 20 20 69 4d 65 74 61 20  else{.    iMeta 
17750 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  = 0;.  }.  if( i
17760 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20 29 7b  Meta!=pOp->p2 ){
17770 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
17780 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
17790 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
177a0 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
177b0 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61  rDup(db, "databa
177c0 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
177d0 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20  anged");.    /* 
177e0 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f  If the schema-co
177f0 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61  okie from the da
17800 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63  tabase file matc
17810 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a  hes the cookie .
17820 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69      ** stored wi
17830 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  th the in-memory
17840 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
17850 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64  of the schema, d
17860 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c  o.    ** not rel
17870 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66  oad the schema f
17880 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
17890 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20   file..    **.  
178a0 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d    ** If virtual-
178b0 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73  tables are in us
178c0 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a  e, this is not j
178d0 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ust an optimizat
178e0 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65  ion..    ** Ofte
178f0 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72  n, v-tables stor
17900 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20  e their data in 
17910 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62  other SQLite tab
17920 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a  les, which.    *
17930 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72  * are queried fr
17940 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28  om within xNext(
17950 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61  ) and other v-ta
17960 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e  ble methods usin
17970 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65  g.    ** prepare
17980 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75  d queries. If su
17990 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75  ch a query is ou
179a0 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f  t-of-date, we do
179b0 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20   not want to.   
179c0 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20   ** discard the 
179d0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
179e0 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64   as the user cod
179f0 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  e implementing t
17a00 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c  he.    ** v-tabl
17a10 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20  e would have to 
17a20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65  be ready for the
17a30 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
17a40 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20  ructure itself. 
17a50 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61     ** to be inva
17a60 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72  lidated whenever
17a70 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
17a80 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  is called from w
17a90 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20  ithin .    ** a 
17aa0 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a  v-table method..
17ab0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
17ac0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
17ad0 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
17ae0 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b  cookie!=iMeta ){
17af0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
17b00 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
17b10 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
17b20 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74      }..    sqlit
17b30 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
17b40 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
17b50 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
17b60 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72  SCHEMA;.  }.  br
17b70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
17b80 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50  e: OpenRead P1 P
17b90 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
17ba0 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c   Open a read-onl
17bb0 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65  y cursor for the
17bc0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
17bd0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
17be0 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61  is.** P2 in a da
17bf0 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
17c00 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
17c10 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
17c20 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d   P3. .** P3==0 m
17c30 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61  eans the main da
17c40 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65  tabase, P3==1 me
17c50 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ans the database
17c60 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65   used for .** te
17c70 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20  mporary tables, 
17c80 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75  and P3>1 means u
17c90 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f  sed the correspo
17ca0 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a  nding attached.*
17cb0 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76  * database.  Giv
17cc0 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72  e the new cursor
17cd0 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f   an identifier o
17ce0 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a  f P1.  The P1.**
17cf0 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74   values need not
17d00 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62   be contiguous b
17d10 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73  ut all P1 values
17d20 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c   should be small
17d30 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74   integers..** It
17d40 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
17d50 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69   P1 to be negati
17d60 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ve..**.** If P5!
17d70 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20  =0 then use the 
17d80 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
17d90 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f  ter P2 as the ro
17da0 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20  ot page, not.** 
17db0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20  the value of P2 
17dc0 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  itself..**.** Th
17dd0 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65  ere will be a re
17de0 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad lock on the d
17df0 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72  atabase whenever
17e00 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20   there is an.** 
17e10 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66  open cursor.  If
17e20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61   the database wa
17e30 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72  s unlocked prior
17e40 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63   to this instruc
17e50 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72  tion.** then a r
17e60 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  ead lock is acqu
17e70 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ired as part of 
17e80 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17e90 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63  .  A read.** loc
17ea0 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70  k allows other p
17eb0 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64  rocesses to read
17ec0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75   the database bu
17ed0 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61  t prohibits.** a
17ee0 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ny other process
17ef0 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20   from modifying 
17f00 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
17f10 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a  he read lock is.
17f20 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e  ** released when
17f30 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65   all cursors are
17f40 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69   closed.  If thi
17f50 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  s instruction at
17f60 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74  tempts.** to get
17f70 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74   a read lock but
17f80 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69   fails, the scri
17f90 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69  pt terminates wi
17fa0 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f  th an.** SQLITE_
17fb0 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e  BUSY error code.
17fc0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
17fd0 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
17fe0 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
17ff0 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
18000 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
18010 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
18020 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
18030 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
18040 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
18050 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e   structure, then
18060 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20   said structure 
18070 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
18080 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
18090 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
180a0 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e  f the index bein
180b0 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77  g opened. Otherw
180c0 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
180d0 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
180e0 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f  ue, it is set to
180f0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
18100 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
18110 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ble..**.** See a
18120 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a 2a  lso OpenWrite..*
18130 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
18140 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20  nWrite P1 P2 P3 
18150 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
18160 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75   a read/write cu
18170 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e  rsor named P1 on
18180 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
18190 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a  dex whose root.*
181a0 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f  * page is P2.  O
181b0 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74  r if P5!=0 use t
181c0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
181d0 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e  gister P2 to fin
181e0 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61  d the.** root pa
181f0 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  ge..**.** The P4
18200 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
18210 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
18220 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
18230 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
18240 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
18250 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
18260 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
18270 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
18280 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
18290 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
182a0 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
182b0 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
182c0 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
182d0 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
182e0 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
182f0 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
18300 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
18310 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
18320 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
18330 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
18340 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68   table, or to th
18350 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64  e.** largest ind
18360 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  ex of any column
18370 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
18380 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75  at is actually u
18390 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  sed..**.** This 
183a0 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b  instruction work
183b0 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e  s just like Open
183c0 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74  Read except that
183d0 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75   it opens the cu
183e0 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f  rsor.** in read/
183f0 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72  write mode.  For
18400 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20   a given table, 
18410 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65  there can be one
18420 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e   or more read-on
18430 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72  ly.** cursors or
18440 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77   a single read/w
18450 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74 20  rite cursor but 
18460 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20  not both..**.** 
18470 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61  See also OpenRea
18480 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  d..*/.case OP_Op
18490 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f  enRead:.case OP_
184a0 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69  OpenWrite: {.  i
184b0 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79  nt nField;.  Key
184c0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
184d0 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20    int p2;.  int 
184e0 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61  iDb;.  int wrFla
184f0 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a  g;.  Btree *pX;.
18500 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
18510 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  ur;.  Db *pDb;..
18520 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64    if( p->expired
18530 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
18540 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62  ITE_ABORT;.    b
18550 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69  reak;.  }..  nFi
18560 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49  eld = 0;.  pKeyI
18570 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20  nfo = 0;.  p2 = 
18580 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d  pOp->p2;.  iDb =
18590 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
185a0 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
185b0 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
185c0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
185d0 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29  Mask & (1<<iDb))
185e0 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
185f0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20  db->aDb[iDb];.  
18600 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  pX = pDb->pBt;. 
18610 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29   assert( pX!=0 )
18620 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
18630 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
18640 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  e ){.    wrFlag 
18650 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 44 62  = 1;.    if( pDb
18660 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
18670 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57  format < p->minW
18680 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29  riteFileFormat )
18690 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72  {.      p->minWr
186a0 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20  iteFileFormat = 
186b0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
186c0 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d  le_format;.    }
186d0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72  .  }else{.    wr
186e0 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Flag = 0;.  }.  
186f0 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
18700 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
18710 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
18720 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
18730 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
18740 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  2];.    assert( 
18750 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29  memIsValid(pIn2)
18760 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
18770 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn2->flags & M
18780 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
18790 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
187a0 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
187b0 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29  ;.    p2 = (int)
187c0 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f  pIn2->u.i;.    /
187d0 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61  * The p2 value a
187e0 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d  lways comes from
187f0 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61   a prior OP_Crea
18800 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61  teTable opcode a
18810 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f  nd.    ** that o
18820 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
18830 73 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c  s set the p2 val
18840 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20  ue to 2 or more 
18850 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20  or else fail..  
18860 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65    ** If there we
18870 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68  re a failure, th
18880 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
18890 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ment would have 
188a0 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65  halted.    ** be
188b0 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68  fore reaching th
188c0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
188d0 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  */.    if( NEVER
188e0 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20  (p2<2) ) {.     
188f0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
18900 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
18910 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
18920 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
18930 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
18940 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
18950 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66  O ){.    pKeyInf
18960 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
18970 49 6e 66 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e  Info;.    pKeyIn
18980 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d  fo->enc = ENC(p-
18990 3e 64 62 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64  >db);.    nField
189a0 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   = pKeyInfo->nFi
189b0 65 6c 64 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69  eld+1;.  }else i
189c0 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
189d0 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20  P4_INT32 ){.    
189e0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
189f0 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  .i;.  }.  assert
18a00 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
18a10 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
18a20 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
18a30 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c  p1, nField, iDb,
18a40 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d   1);.  if( pCur=
18a50 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
18a60 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
18a70 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69  w = 1;.  pCur->i
18a80 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20  sOrdered = 1;.  
18a90 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18aa0 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20  eCursor(pX, p2, 
18ab0 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f  wrFlag, pKeyInfo
18ac0 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29  , pCur->pCursor)
18ad0 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e  ;.  pCur->pKeyIn
18ae0 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 0a  fo = pKeyInfo;..
18af0 20 20 2f 2a 20 53 69 6e 63 65 20 69 74 20 70 65    /* Since it pe
18b00 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79  rforms no memory
18b10 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49   allocation or I
18b20 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75  O, the only valu
18b30 65 73 20 74 68 61 74 0a 20 20 2a 2a 20 73 71 6c  es that.  ** sql
18b40 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
18b50 29 20 6d 61 79 20 72 65 74 75 72 6e 20 61 72 65  ) may return are
18b60 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 61 6e   SQLITE_EMPTY an
18b70 64 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 0a 20 20  d SQLITE_OK. .  
18b80 2a 2a 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  ** SQLITE_EMPTY 
18b90 69 73 20 6f 6e 6c 79 20 72 65 74 75 72 6e 65 64  is only returned
18ba0 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67   when attempting
18bb0 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 74 61 62   to open the tab
18bc0 6c 65 0a 20 20 2a 2a 20 72 6f 6f 74 65 64 20 61  le.  ** rooted a
18bd0 74 20 70 61 67 65 20 31 20 6f 66 20 61 20 7a 65  t page 1 of a ze
18be0 72 6f 2d 62 79 74 65 20 64 61 74 61 62 61 73 65  ro-byte database
18bf0 2e 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
18c00 72 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59  rc==SQLITE_EMPTY
18c10 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   || rc==SQLITE_O
18c20 4b 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  K );.  if( rc==S
18c30 51 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b 0a 20  QLITE_EMPTY ){. 
18c40 20 20 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72     pCur->pCursor
18c50 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 0;.    rc = S
18c60 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20  QLITE_OK;.  }.. 
18c70 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62 65   /* Set the Vdbe
18c80 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 61  Cursor.isTable a
18c90 6e 64 20 69 73 49 6e 64 65 78 20 76 61 72 69 61  nd isIndex varia
18ca0 62 6c 65 73 2e 20 50 72 65 76 69 6f 75 73 20 76  bles. Previous v
18cb0 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20  ersions of.  ** 
18cc0 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63  SQLite used to c
18cd0 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74  heck if the root
18ce0 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65  -page flags were
18cf0 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f   sane at this po
18d00 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70  int.  ** and rep
18d10 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72  ort database cor
18d20 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20  ruption if they 
18d30 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68  were not, but th
18d40 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a  is check has.  *
18d50 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e  * since moved in
18d60 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79  to the btree lay
18d70 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72  er.  */  .  pCur
18d80 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d  ->isTable = pOp-
18d90 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49  >p4type!=P4_KEYI
18da0 4e 46 4f 3b 0a 20 20 70 43 75 72 2d 3e 69 73 49  NFO;.  pCur->isI
18db0 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e 69 73  ndex = !pCur->is
18dc0 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a  Table;.  break;.
18dd0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
18de0 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50  enEphemeral P1 P
18df0 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  2 * P4 *.**.** O
18e00 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
18e10 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65   P1 to a transie
18e20 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  nt table..** The
18e30 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79   cursor is alway
18e40 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72  s opened read/wr
18e50 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20  ite even if .** 
18e60 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
18e70 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20  e is read-only. 
18e80 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a   The ephemeral.*
18e90 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74  * table is delet
18ea0 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
18eb0 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   when the cursor
18ec0 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a   is closed..**.*
18ed0 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
18ee0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
18ef0 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74   the ephemeral t
18f00 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
18f10 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  sor points to a 
18f20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50  BTree table if P
18f30 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54  4==0 and to a BT
18f40 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20  ree index.** if 
18f50 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66  P4 is not 0.  If
18f60 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
18f70 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   it points to a 
18f80 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
18f90 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65  e.** that define
18fa0 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  s the format of 
18fb0 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65  keys in the inde
18fc0 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  x..**.** This op
18fd0 63 6f 64 65 20 77 61 73 20 6f 6e 63 65 20 63 61  code was once ca
18fe0 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20  lled OpenTemp.  
18ff0 42 75 74 20 74 68 61 74 20 63 72 65 61 74 65 64  But that created
19000 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65  .** confusion be
19010 63 61 75 73 65 20 74 68 65 20 74 65 72 6d 20 22  cause the term "
19020 74 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69 67  temp table", mig
19030 68 74 20 72 65 66 65 72 20 65 69 74 68 65 72 0a  ht refer either.
19040 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20 74 61 62  ** to a TEMP tab
19050 6c 65 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  le at the SQL le
19060 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61 62  vel, or to a tab
19070 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20  le opened by.** 
19080 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 54 68  this opcode.  Th
19090 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  en this opcode w
190a0 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74  as call OpenVirt
190b0 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ual.  But.** tha
190c0 74 20 63 72 65 61 74 65 64 20 63 6f 6e 66 75 73  t created confus
190d0 69 6f 6e 20 77 69 74 68 20 74 68 65 20 77 68 6f  ion with the who
190e0 6c 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  le virtual-table
190f0 20 69 64 65 61 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   idea..*/./* Opc
19100 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64  ode: OpenAutoind
19110 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ex P1 P2 * P4 *.
19120 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
19130 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65  e works the same
19140 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   as OP_OpenEphem
19150 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a  eral.  It has a.
19160 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d  ** different nam
19170 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68  e to distinguish
19180 20 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65   its use.  Table
19190 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a  s created using.
191a0 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ** by this opcod
191b0 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66  e will be used f
191c0 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  or automatically
191d0 20 63 72 65 61 74 65 64 20 74 72 61 6e 73 69 65   created transie
191e0 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e  nt.** indices in
191f0 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20   joins..*/.case 
19200 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  OP_OpenAutoindex
19210 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45  : .case OP_OpenE
19220 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64  phemeral: {.  Vd
19230 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20  beCursor *pCx;. 
19240 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
19250 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20  t vfsFlags = .  
19260 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
19270 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20  READWRITE |.    
19280 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52    SQLITE_OPEN_CR
19290 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  EATE |.      SQL
192a0 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49  ITE_OPEN_EXCLUSI
192b0 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  VE |.      SQLIT
192c0 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43  E_OPEN_DELETEONC
192d0 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  LOSE |.      SQL
192e0 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45  ITE_OPEN_TRANSIE
192f0 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73 65 72 74  NT_DB;..  assert
19300 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
19310 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
19320 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
19330 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
19340 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  1);.  if( pCx==0
19350 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
19360 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
19370 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   1;.  rc = sqlit
19380 65 33 42 74 72 65 65 4f 70 65 6e 28 30 2c 20 64  e3BtreeOpen(0, d
19390 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20  b, &pCx->pBt, . 
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49         BTREE_OMI
193c0 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45  T_JOURNAL | BTRE
193d0 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e  E_SINGLE | pOp->
193e0 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20  p5, vfsFlags);. 
193f0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
19400 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  OK ){.    rc = s
19410 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
19420 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20  Trans(pCx->pBt, 
19430 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  1);.  }.  if( rc
19440 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
19450 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73     /* If a trans
19460 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65  ient index is re
19470 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69  quired, create i
19480 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20  t by calling.   
19490 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
194a0 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69  CreateTable() wi
194b0 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f  th the BTREE_BLO
194c0 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65  BKEY flag before
194d0 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20  .    ** opening 
194e0 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65  it. If a transie
194f0 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75  nt table is requ
19500 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74  ired, just use t
19510 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61  he.    ** automa
19520 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
19530 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d  table with root-
19540 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f  page 1 (an BLOB_
19550 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20  INTKEY table).. 
19560 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f     */.    if( pO
19570 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 20 29  p->p4.pKeyInfo )
19580 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f  {.      int pgno
19590 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
195a0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
195b0 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20  KEYINFO );.     
195c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
195d0 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43  eeCreateTable(pC
195e0 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42  x->pBt, &pgno, B
195f0 54 52 45 45 5f 42 4c 4f 42 4b 45 59 29 3b 20 0a  TREE_BLOBKEY); .
19600 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
19610 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
19620 20 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d     assert( pgno=
19630 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29  =MASTER_ROOT+1 )
19640 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
19650 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
19660 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f  r(pCx->pBt, pgno
19670 2c 20 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20  , 1, .          
19680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19690 20 20 20 20 20 20 28 4b 65 79 49 6e 66 6f 2a 29        (KeyInfo*)
196a0 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e  pOp->p4.z, pCx->
196b0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
196c0 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
196d0 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
196e0 66 6f 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d  fo;.        pCx-
196f0 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d  >pKeyInfo->enc =
19700 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20   ENC(p->db);.   
19710 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e     }.      pCx->
19720 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20  isTable = 0;.   
19730 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
19740 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
19750 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
19760 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20  MASTER_ROOT, 1, 
19770 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  0, pCx->pCursor)
19780 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  ;.      pCx->isT
19790 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  able = 1;.    }.
197a0 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64    }.  pCx->isOrd
197b0 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21  ered = (pOp->p5!
197c0 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44  =BTREE_UNORDERED
197d0 29 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65  );.  pCx->isInde
197e0 78 20 3d 20 21 70 43 78 2d 3e 69 73 54 61 62 6c  x = !pCx->isTabl
197f0 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  e;.  break;.}../
19800 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73  * Opcode: OpenPs
19810 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20  eudo P1 P2 P3 * 
19820 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  *.**.** Open a n
19830 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70  ew cursor that p
19840 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20  oints to a fake 
19850 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
19860 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  ins a single.** 
19870 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68  row of data.  Th
19880 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61  e content of tha
19890 74 20 6f 6e 65 20 72 6f 77 20 69 6e 20 74 68 65  t one row in the
198a0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f   content of memo
198b0 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  ry.** register P
198c0 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  2.  In other wor
198d0 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65  ds, cursor P1 be
198e0 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66  comes an alias f
198f0 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42  or the .** MEM_B
19900 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74  lob content cont
19910 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65  ained in registe
19920 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73  r P2..**.** A ps
19930 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74  eudo-table creat
19940 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
19950 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c  e is used to hol
19960 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  d a single.** ro
19970 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68  w output from th
19980 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74  e sorter so that
19990 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20   the row can be 
199a0 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a  decomposed into.
199b0 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f  ** individual co
199c0 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20  lumns using the 
199d0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
199e0 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
199f0 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68   opcode.** is th
19a00 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70  e only cursor op
19a10 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20  code that works 
19a20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61  with a pseudo-ta
19a30 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  ble..**.** P3 is
19a40 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66   the number of f
19a50 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
19a60 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62  ords that will b
19a70 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74  e stored by.** t
19a80 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  he pseudo-table.
19a90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
19aa0 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65  Pseudo: {.  Vdbe
19ab0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
19ac0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
19ad0 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
19ae0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
19af0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33  pOp->p1, pOp->p3
19b00 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20  , -1, 0);.  if( 
19b10 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
19b20 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
19b30 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
19b40 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20  >pseudoTableReg 
19b50 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78  = pOp->p2;.  pCx
19b60 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
19b70 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20   pCx->isIndex = 
19b80 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
19b90 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20  * Opcode: Close 
19ba0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
19bb0 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20   Close a cursor 
19bc0 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
19bd0 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20  d as P1.  If P1 
19be0 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e  is not.** curren
19bf0 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69  tly open, this i
19c00 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20  nstruction is a 
19c10 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
19c20 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73  P_Close: {.  ass
19c30 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
19c40 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
19c50 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74  ursor );.  sqlit
19c60 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
19c70 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  (p, p->apCsr[pOp
19c80 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43  ->p1]);.  p->apC
19c90 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b  sr[pOp->p1] = 0;
19ca0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19cb0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 65 20 50  Opcode: SeekGe P
19cc0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
19cd0 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
19ce0 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
19cf0 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
19d00 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
19d10 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
19d20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
19d30 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65 20  ister P3 as the 
19d40 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20  key.  If cursor 
19d50 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
19d60 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
19d70 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
19d80 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
19d90 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
19da0 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
19db0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
19dc0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
19dd0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
19de0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
19df0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
19e00 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79  e smallest entry
19e10 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65   that .** is gre
19e20 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
19e30 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
19e40 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
19e50 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
19e60 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
19e70 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
19e80 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
19e90 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
19ea0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
19eb0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
19ec0 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
19ed0 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74  , SeekLt, SeekGt
19ee0 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
19ef0 70 63 6f 64 65 3a 20 53 65 65 6b 47 74 20 50 31  pcode: SeekGt P1
19f00 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
19f10 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
19f20 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
19f30 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
19f40 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
19f50 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
19f60 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
19f70 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
19f80 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
19f90 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
19fa0 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
19fb0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
19fc0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
19fd0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
19fe0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
19ff0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1a000 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1a010 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1a020 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1a030 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1a040 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1a050 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1a060 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1a070 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1a080 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65  e no records gre
1a090 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68  ater than .** th
1a0a0 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1a0b0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1a0c0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1a0d0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1a0e0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
1a0f0 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65  inct, SeekLt, Se
1a100 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1a110 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1a120 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20  t P1 P2 P3 P4 * 
1a130 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1a140 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1a150 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1a160 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1a170 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1a180 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1a190 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1a1a0 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1a1b0 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1a1c0 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1a1d0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1a1e0 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1a1f0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1a200 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1a210 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1a220 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1a230 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1a240 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1a250 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1a260 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1a270 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1a280 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
1a290 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1a2a0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65  re no records le
1a2b0 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  ss than .** the 
1a2c0 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1a2d0 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1a2e0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
1a2f0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1a300 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
1a310 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  ct, SeekGt, Seek
1a320 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1a330 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20   Opcode: SeekLe 
1a340 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1a350 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1a360 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1a370 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1a380 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1a390 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1a3a0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1a3b0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1a3c0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1a3d0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1a3e0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1a3f0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1a400 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1a410 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1a420 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1a430 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1a440 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1a450 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1a460 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
1a470 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1a480 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1a490 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1a4a0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1a4b0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1a4c0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1a4d0 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74  cords .** less t
1a4e0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1a4f0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1a500 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1a510 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1a520 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1a530 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
1a540 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20  stinct, SeekGt, 
1a550 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a  SeekGe, SeekLt.*
1a560 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 74  /.case OP_SeekLt
1a570 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1a580 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1a590 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20 20 20 20  P_SeekLe:       
1a5a0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1a5b0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 65  /.case OP_SeekGe
1a5c0 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1a5d0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1a5e0 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20 20 20 20  P_SeekGt: {     
1a5f0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1a600 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  /.  int res;.  i
1a610 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72  nt oc;.  VdbeCur
1a620 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63  sor *pC;.  Unpac
1a630 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69  kedRecord r;.  i
1a640 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34  nt nField;.  i64
1a650 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54   iKey;      /* T
1a660 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20  he rowid we are 
1a670 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20  to seek to */.. 
1a680 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1a690 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1a6a0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1a6b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
1a6c0 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
1a6d0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1a6e0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1a6f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1a700 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
1a710 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  0 );.  assert( O
1a720 50 5f 53 65 65 6b 4c 65 20 3d 3d 20 4f 50 5f 53  P_SeekLe == OP_S
1a730 65 65 6b 4c 74 2b 31 20 29 3b 0a 20 20 61 73 73  eekLt+1 );.  ass
1a740 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 65 20 3d  ert( OP_SeekGe =
1a750 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 32 20 29 3b  = OP_SeekLt+2 );
1a760 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1a770 65 6b 47 74 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGt == OP_SeekL
1a780 74 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  t+3 );.  assert(
1a790 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
1a7a0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72  ;.  if( pC->pCur
1a7b0 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 6f 63  sor!=0 ){.    oc
1a7c0 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
1a7d0 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
1a7e0 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  = 0;.    if( pC-
1a7f0 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
1a800 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76    /* The input v
1a810 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74  alue in P3 might
1a820 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a   be of any type:
1a830 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20   integer, real, 
1a840 73 74 72 69 6e 67 2c 0a 20 20 20 20 20 20 2a 2a  string,.      **
1a850 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20   blob, or NULL. 
1a860 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f   But it needs to
1a870 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62   be an integer b
1a880 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a  efore we can do.
1a890 20 20 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65        ** the see
1a8a0 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e  k, so covert it.
1a8b0 20 2a 2f 0a 20 20 20 20 20 20 70 49 6e 33 20 3d   */.      pIn3 =
1a8c0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1a8d0 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  .      applyNume
1a8e0 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33  ricAffinity(pIn3
1a8f0 29 3b 0a 20 20 20 20 20 20 69 4b 65 79 20 3d 20  );.      iKey = 
1a900 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
1a910 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20 20 20 20  lue(pIn3);.     
1a920 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1a930 64 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a  d = 0;..      /*
1a940 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
1a950 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f   could not be co
1a960 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
1a970 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a  integer without.
1a980 20 20 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66        ** loss of
1a990 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
1a9a0 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65  en special proce
1a9b0 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65  ssing is require
1a9c0 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66  d... */.      if
1a9d0 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1a9e0 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
1a9f0 20 20 20 20 20 20 20 20 69 66 28 20 28 70 49 6e          if( (pIn
1aa00 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
1aa10 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
1aa20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50       /* If the P
1aa30 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62  3 value cannot b
1aa40 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1aa50 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e   any kind of a n
1aa60 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 20  umber,.         
1aa70 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65   ** then the see
1aa80 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  k is not possibl
1aa90 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32  e, so jump to P2
1aaa0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 70 63   */.          pc
1aab0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1aac0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1aad0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1aae0 20 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63     /* If we reac
1aaf0 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68  h this point, th
1ab00 65 6e 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  en the P3 value 
1ab10 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69  must be a floati
1ab20 6e 67 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 6f  ng.        ** po
1ab30 69 6e 74 20 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20  int number. */. 
1ab40 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
1ab50 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1ab60 4d 5f 52 65 61 6c 29 21 3d 30 20 29 3b 0a 0a 20  M_Real)!=0 );.. 
1ab70 20 20 20 20 20 20 20 69 66 28 20 69 4b 65 79 3d         if( iKey=
1ab80 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20  =SMALLEST_INT64 
1ab90 26 26 20 28 70 49 6e 33 2d 3e 72 3c 28 64 6f 75  && (pIn3->r<(dou
1aba0 62 6c 65 29 69 4b 65 79 20 7c 7c 20 70 49 6e 33  ble)iKey || pIn3
1abb0 2d 3e 72 3e 30 29 20 29 7b 0a 20 20 20 20 20 20  ->r>0) ){.      
1abc0 20 20 20 20 2f 2a 20 54 68 65 20 50 33 20 76 61      /* The P3 va
1abd0 6c 75 65 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  lue is too large
1abe0 20 69 6e 20 6d 61 67 6e 69 74 75 64 65 20 74 6f   in magnitude to
1abf0 20 62 65 20 65 78 70 72 65 73 73 65 64 20 61 73   be expressed as
1ac00 20 61 6e 0a 20 20 20 20 20 20 20 20 20 20 2a 2a   an.          **
1ac10 20 69 6e 74 65 67 65 72 2e 20 2a 2f 0a 20 20 20   integer. */.   
1ac20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a         res = 1;.
1ac30 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
1ac40 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20 20 20 20 20  n3->r<0 ){.     
1ac50 20 20 20 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f         if( oc>=O
1ac60 50 5f 53 65 65 6b 47 65 20 29 7b 20 20 61 73 73  P_SeekGe ){  ass
1ac70 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1ac80 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Ge || oc==OP_See
1ac90 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20  kGt );.         
1aca0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1acb0 33 42 74 72 65 65 46 69 72 73 74 28 70 43 2d 3e  3BtreeFirst(pC->
1acc0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ace0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1acf0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1ad00 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1ad10 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1ad20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1ad30 20 20 20 20 20 20 69 66 28 20 6f 63 3c 3d 4f 50        if( oc<=OP
1ad40 5f 53 65 65 6b 4c 65 20 29 7b 20 20 61 73 73 65  _SeekLe ){  asse
1ad50 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
1ad60 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
1ad70 4c 65 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Le );.          
1ad80 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1ad90 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43  BtreeLast(pC->pC
1ada0 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
1adc0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1add0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ade0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1adf0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1ae00 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
1ae10 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20   res ){.        
1ae20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1ae30 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   - 1;.          
1ae40 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  }.          brea
1ae50 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  k;.        }else
1ae60 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
1ae70 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Lt || oc==OP_See
1ae80 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  kGe ){.         
1ae90 20 2f 2a 20 55 73 65 20 74 68 65 20 63 65 69 6c   /* Use the ceil
1aea0 69 6e 67 28 29 20 66 75 6e 63 74 69 6f 6e 20 74  ing() function t
1aeb0 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e  o convert real->
1aec0 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  int */.         
1aed0 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3e 20 28   if( pIn3->r > (
1aee0 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b  double)iKey ) iK
1aef0 65 79 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65  ey++;.        }e
1af00 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  lse{.          /
1af10 2a 20 55 73 65 20 74 68 65 20 66 6c 6f 6f 72 28  * Use the floor(
1af20 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f  ) function to co
1af30 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20  nvert real->int 
1af40 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  */.          ass
1af50 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1af60 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Le || oc==OP_See
1af70 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20  kGt );.         
1af80 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3c 20 28   if( pIn3->r < (
1af90 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b  double)iKey ) iK
1afa0 65 79 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ey--;.        }.
1afb0 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20 20 72        } .      r
1afc0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1afd0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1afe0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  C->pCursor, 0, (
1aff0 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65  u64)iKey, 0, &re
1b000 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
1b010 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1b020 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1b030 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1b040 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
1b050 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
1b060 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1b070 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  alid = 1;.      
1b080 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20    pC->lastRowid 
1b090 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 7d 0a  = iKey;.      }.
1b0a0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1b0b0 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
1b0c0 34 2e 69 3b 0a 20 20 20 20 20 20 61 73 73 65 72  4.i;.      asser
1b0d0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
1b0e0 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20  P4_INT32 );.    
1b0f0 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
1b100 3e 30 20 29 3b 0a 20 20 20 20 20 20 72 2e 70 4b  >0 );.      r.pK
1b110 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
1b120 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e  yInfo;.      r.n
1b130 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69  Field = (u16)nFi
1b140 65 6c 64 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 54  eld;..      /* T
1b150 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20  he next line of 
1b160 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73  code computes as
1b170 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66   follows, only f
1b180 61 73 74 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20  aster:.      ** 
1b190 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
1b1a0 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGt || oc==OP_Se
1b1b0 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20 2a 2a  ekLe ){.      **
1b1c0 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
1b1d0 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 3b  NPACKED_INCRKEY;
1b1e0 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73  .      **   }els
1b1f0 65 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  e{.      **     
1b200 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20  r.flags = 0;.   
1b210 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 20 20     **   }.      
1b220 2a 2f 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  */.      r.flags
1b230 20 3d 20 28 75 31 36 29 28 55 4e 50 41 43 4b 45   = (u16)(UNPACKE
1b240 44 5f 49 4e 43 52 4b 45 59 20 2a 20 28 31 20 26  D_INCRKEY * (1 &
1b250 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 74   (oc - OP_SeekLt
1b260 29 29 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  )));.      asser
1b270 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 74  t( oc!=OP_SeekGt
1b280 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50   || r.flags==UNP
1b290 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b  ACKED_INCRKEY );
1b2a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1b2b0 63 21 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20  c!=OP_SeekLe || 
1b2c0 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45  r.flags==UNPACKE
1b2d0 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20  D_INCRKEY );.   
1b2e0 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1b2f0 50 5f 53 65 65 6b 47 65 20 7c 7c 20 72 2e 66 6c  P_SeekGe || r.fl
1b300 61 67 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ags==0 );.      
1b310 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1b320 65 65 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61 67 73  eekLt || r.flags
1b330 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 72 2e  ==0 );..      r.
1b340 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
1b350 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
1b360 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20  LITE_DEBUG.     
1b370 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
1b380 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
1b390 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
1b3a0 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
1b3b0 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
1b3c0 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28       ExpandBlob(
1b3d0 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 20 20 72  r.aMem);.      r
1b3e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1b3f0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1b400 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20  C->pCursor, &r, 
1b410 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
1b420 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1b430 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1b440 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1b450 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
1b460 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  .      pC->rowid
1b470 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1b480 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72   }.    pC->defer
1b490 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1b4a0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
1b4b0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1b4c0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1b4d0 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33  TEST.    sqlite3
1b4e0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
1b4f0 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
1b500 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b  oc>=OP_SeekGe ){
1b510 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
1b520 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGe || oc==O
1b530 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20  P_SeekGt );.    
1b540 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28    if( res<0 || (
1b550 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
1b560 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20 20 20 20  _SeekGt) ){.    
1b570 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1b580 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43  BtreeNext(pC->pC
1b590 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1b5a0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1b5b0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1b5c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1b5d0 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72  r;.        pC->r
1b5e0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1b5f0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
1b600 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
1b610 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
1b620 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
1b630 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c  oc==OP_SeekLt ||
1b640 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29   oc==OP_SeekLe )
1b650 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3e  ;.      if( res>
1b660 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
1b670 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29 20 29  oc==OP_SeekLt) )
1b680 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
1b690 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
1b6a0 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ous(pC->pCursor,
1b6b0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1b6c0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1b6d0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1b6e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1b6f0 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1b700 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20  Valid = 0;.     
1b710 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1b720 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20  /* res might be 
1b730 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65  negative because
1b740 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d   the table is em
1b750 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20  pty.  Check to. 
1b760 20 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66         ** see if
1b770 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73   this is the cas
1b780 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
1b790 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69        res = sqli
1b7a0 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e  te3BtreeEof(pC->
1b7b0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1b7c0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
1b7d0 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
1b7e0 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a  .    if( res ){.
1b7f0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1b800 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  p2 - 1;.    }.  
1b810 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68  }else{.    /* Th
1b820 69 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20  is happens when 
1b830 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70  attempting to op
1b840 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6d  en the sqlite3_m
1b850 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20 20 20  aster table.    
1b860 2a 2a 20 66 6f 72 20 72 65 61 64 20 61 63 63 65  ** for read acce
1b870 73 73 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  ss returns SQLIT
1b880 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68 69 73  E_EMPTY. In this
1b890 20 63 61 73 65 20 61 6c 77 61 79 73 0a 20 20 20   case always.   
1b8a0 20 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a 75 6d   ** take the jum
1b8b0 70 20 28 73 69 6e 63 65 20 74 68 65 72 65 20 61  p (since there a
1b8c0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 69 6e  re no records in
1b8d0 20 74 68 65 20 74 61 62 6c 65 29 2e 0a 20 20 20   the table)..   
1b8e0 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   */.    pc = pOp
1b8f0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
1b900 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1b910 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32 20  ode: Seek P1 P2 
1b920 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69  * * *.**.** P1 i
1b930 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20  s an open table 
1b940 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
1b950 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72   a rowid integer
1b960 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f  .  Arrange.** fo
1b970 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20  r P1 to move so 
1b980 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1b990 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76 65  o the rowid give
1b9a0 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  n by P2..**.** T
1b9b0 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20  his is actually 
1b9c0 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e  a deferred seek.
1b9d0 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c    Nothing actual
1b9e0 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c  ly happens until
1b9f0 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69  .** the cursor i
1ba00 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61  s used to read a
1ba10 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77   record.  That w
1ba20 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a  ay, if no reads.
1ba30 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e  ** occur, no unn
1ba40 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70  ecessary I/O hap
1ba50 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  pens..*/.case OP
1ba60 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69  _Seek: {    /* i
1ba70 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
1ba80 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
1ba90 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1baa0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1bab0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1bac0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1bad0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1bae0 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53   );.  if( ALWAYS
1baf0 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29  (pC->pCursor!=0)
1bb00 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1bb10 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1bb20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
1bb30 20 30 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26   0;.    pIn2 = &
1bb40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
1bb50 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
1bb60 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62  get = sqlite3Vdb
1bb70 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b  eIntValue(pIn2);
1bb80 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
1bb90 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70  Valid = 0;.    p
1bba0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1bbb0 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  o = 1;.  }.  bre
1bbc0 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63  ak;.}.  ../* Opc
1bbd0 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32  ode: Found P1 P2
1bbe0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
1bbf0 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
1bc00 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
1bc10 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
1bc20 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
1bc30 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
1bc40 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
1bc50 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
1bc60 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
1bc70 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
1bc80 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a  .** record..**.*
1bc90 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
1bca0 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
1bcb0 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
1bcc0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
1bcd0 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61  3 and P4.** is a
1bce0 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
1bcf0 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
1bd00 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
1bd10 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69  o P2 and.** P1 i
1bd20 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
1bd30 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  at the matching 
1bd40 65 6e 74 72 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  entry..*/./* Opc
1bd50 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31  ode: NotFound P1
1bd60 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
1bd70 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
1bd80 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
1bd90 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
1bda0 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
1bdb0 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
1bdc0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1bdd0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
1bde0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
1bdf0 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
1be00 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
1be10 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  * .** Cursor P1 
1be20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
1be30 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
1be40 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
1be50 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
1be60 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69  is not the prefi
1be70 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
1be80 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
1be90 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20   is made to P2. 
1bea0 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20   If P1 .** does 
1beb0 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79  contain an entry
1bec0 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61   whose prefix ma
1bed0 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20  tches the P3/P4 
1bee0 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74  record then cont
1bef0 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72  rol.** falls thr
1bf00 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
1bf10 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64   instruction and
1bf20 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
1bf30 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d  ting at the.** m
1bf40 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
1bf50 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1bf60 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c  ound, NotExists,
1bf70 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73   IsUnique.*/.cas
1bf80 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20  e OP_NotFound:  
1bf90 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1bfa0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75  3 */.case OP_Fou
1bfb0 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
1bfc0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1bfd0 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  nt alreadyExists
1bfe0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1bff0 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
1c000 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1c010 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61  *pIdxKey;.  Unpa
1c020 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20  ckedRecord r;.  
1c030 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f  char aTempRec[RO
1c040 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61  UND8(sizeof(Unpa
1c050 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73  ckedRecord)) + s
1c060 69 7a 65 6f 66 28 4d 65 6d 29 2a 33 20 2b 20 37  izeof(Mem)*3 + 7
1c070 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ];..#ifdef SQLIT
1c080 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
1c090 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a  _found_count++;.
1c0a0 23 65 6e 64 69 66 0a 0a 20 20 61 6c 72 65 61 64  #endif..  alread
1c0b0 79 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 61  yExists = 0;.  a
1c0c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1c0d0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1c0e0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
1c0f0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1c100 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1c110 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1c120 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1c130 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 49 6e  ( pC!=0 );.  pIn
1c140 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1c150 33 5d 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53  3];.  if( ALWAYS
1c160 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29  (pC->pCursor!=0)
1c170 20 29 7b 0a 0a 20 20 20 20 61 73 73 65 72 74 28   ){..    assert(
1c180 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
1c190 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
1c1a0 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 20  p4.i>0 ){.      
1c1b0 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
1c1c0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20  >pKeyInfo;.     
1c1d0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1c1e0 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20  )pOp->p4.i;.    
1c1f0 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b    r.aMem = pIn3;
1c200 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1c210 45 42 55 47 0a 20 20 20 20 20 20 7b 20 69 6e 74  EBUG.      { int
1c220 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
1c230 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
1c240 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1c250 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
1c260 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 72  }.#endif.      r
1c270 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
1c280 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a  D_PREFIX_MATCH;.
1c290 20 20 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20        pIdxKey = 
1c2a0 26 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  &r;.    }else{. 
1c2b0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e       assert( pIn
1c2c0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  3->flags & MEM_B
1c2d0 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 61 73 73  lob );.      ass
1c2e0 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ert( (pIn3->flag
1c2f0 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30  s & MEM_Zero)==0
1c300 20 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62   );  /* zeroblob
1c310 73 20 61 6c 72 65 61 64 79 20 65 78 70 61 6e 64  s already expand
1c320 65 64 20 2a 2f 0a 20 20 20 20 20 20 70 49 64 78  ed */.      pIdx
1c330 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
1c340 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43  eRecordUnpack(pC
1c350 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33  ->pKeyInfo, pIn3
1c360 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 0a 20 20  ->n, pIn3->z,.  
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c390 20 20 20 20 20 20 61 54 65 6d 70 52 65 63 2c 20        aTempRec, 
1c3a0 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29  sizeof(aTempRec)
1c3b0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  );.      if( pId
1c3c0 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20 20 20  xKey==0 ){.     
1c3d0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
1c3e0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 49        }.      pI
1c3f0 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c 3d 20  dxKey->flags |= 
1c400 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
1c410 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20 20 20  MATCH;.    }.   
1c420 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1c430 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1c440 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49  (pC->pCursor, pI
1c450 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65  dxKey, 0, 0, &re
1c460 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  s);.    if( pOp-
1c470 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20  >p4.i==0 ){.    
1c480 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
1c490 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  eteUnpackedRecor
1c4a0 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20 20 20  d(pIdxKey);.    
1c4b0 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
1c4c0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1c4d0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
1c4e0 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20    alreadyExists 
1c4f0 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 20 20  = (res==0);.    
1c500 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1c510 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
1c520 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1c530 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
1c540 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1c550 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20  ==OP_Found ){.  
1c560 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69    if( alreadyExi
1c570 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  sts ) pc = pOp->
1c580 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
1c590 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65 61 64  .    if( !alread
1c5a0 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70  yExists ) pc = p
1c5b0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1c5c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c5d0 70 63 6f 64 65 3a 20 49 73 55 6e 69 71 75 65 20  pcode: IsUnique 
1c5e0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1c5f0 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1c600 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 69 6e 64 65   open on an inde
1c610 78 20 62 2d 74 72 65 65 20 2d 20 74 68 61 74 20  x b-tree - that 
1c620 69 73 20 74 6f 20 73 61 79 2c 20 61 20 62 74 72  is to say, a btr
1c630 65 65 20 77 68 69 63 68 0a 2a 2a 20 6e 6f 20 64  ee which.** no d
1c640 61 74 61 20 61 6e 64 20 77 68 65 72 65 20 74 68  ata and where th
1c650 65 20 6b 65 79 20 61 72 65 20 72 65 63 6f 72 64  e key are record
1c660 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 4f  s generated by O
1c670 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77 69 74  P_MakeRecord wit
1c680 68 0a 2a 2a 20 74 68 65 20 6c 69 73 74 20 66 69  h.** the list fi
1c690 65 6c 64 20 62 65 69 6e 67 20 74 68 65 20 69 6e  eld being the in
1c6a0 74 65 67 65 72 20 52 4f 57 49 44 20 6f 66 20 74  teger ROWID of t
1c6b0 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 74 68  he entry that th
1c6c0 65 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79  e index.** entry
1c6d0 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a   refers to..**.*
1c6e0 2a 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65  * The P3 registe
1c6f0 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e  r contains an in
1c700 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d  teger record num
1c710 62 65 72 2e 20 43 61 6c 6c 20 74 68 69 73 20 72  ber. Call this r
1c720 65 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d 62 65 72  ecord .** number
1c730 20 52 2e 20 52 65 67 69 73 74 65 72 20 50 34 20   R. Register P4 
1c740 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1c750 61 20 73 65 74 20 6f 66 20 4e 20 63 6f 6e 74 69  a set of N conti
1c760 67 75 6f 75 73 20 72 65 67 69 73 74 65 72 73 0a  guous registers.
1c770 2a 2a 20 74 68 61 74 20 6d 61 6b 65 20 75 70 20  ** that make up 
1c780 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1c790 78 20 6b 65 79 20 74 68 61 74 20 63 61 6e 20 62  x key that can b
1c7a0 65 20 75 73 65 64 20 77 69 74 68 20 63 75 72 73  e used with curs
1c7b0 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 76 61  or P1..** The va
1c7c0 6c 75 65 20 6f 66 20 4e 20 63 61 6e 20 62 65 20  lue of N can be 
1c7d0 69 6e 66 65 72 72 65 64 20 66 72 6f 6d 20 74 68  inferred from th
1c7e0 65 20 63 75 72 73 6f 72 2e 20 4e 20 69 6e 63 6c  e cursor. N incl
1c7f0 75 64 65 73 20 74 68 65 20 72 6f 77 69 64 0a 2a  udes the rowid.*
1c800 2a 20 76 61 6c 75 65 20 61 70 70 65 6e 64 65 64  * value appended
1c810 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74   to the end of t
1c820 68 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64 2e  he index record.
1c830 20 54 68 69 73 20 72 6f 77 69 64 20 76 61 6c 75   This rowid valu
1c840 65 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d 61 79 20  e may.** or may 
1c850 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  not be the same 
1c860 61 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  as R..**.** If a
1c870 6e 79 20 6f 66 20 74 68 65 20 4e 20 72 65 67 69  ny of the N regi
1c880 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
1c890 77 69 74 68 20 72 65 67 69 73 74 65 72 20 50 34  with register P4
1c8a0 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c   contains a NULL
1c8b0 0a 2a 2a 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20  .** value, jump 
1c8c0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1c8d0 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69  2..**.** Otherwi
1c8e0 73 65 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63  se, this instruc
1c8f0 74 69 6f 6e 20 63 68 65 63 6b 73 20 69 66 20 63  tion checks if c
1c900 75 72 73 6f 72 20 50 31 20 63 6f 6e 74 61 69 6e  ursor P1 contain
1c910 73 20 61 6e 20 65 6e 74 72 79 0a 2a 2a 20 77 68  s an entry.** wh
1c920 65 72 65 20 74 68 65 20 66 69 72 73 74 20 28 4e  ere the first (N
1c930 2d 31 29 20 66 69 65 6c 64 73 20 6d 61 74 63 68  -1) fields match
1c940 20 62 75 74 20 74 68 65 20 72 6f 77 69 64 20 76   but the rowid v
1c950 61 6c 75 65 20 61 74 20 74 68 65 20 65 6e 64 0a  alue at the end.
1c960 2a 2a 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ** of the index 
1c970 65 6e 74 72 79 20 69 73 20 6e 6f 74 20 52 2e 20  entry is not R. 
1c980 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
1c990 75 63 68 20 65 6e 74 72 79 2c 20 63 6f 6e 74 72  uch entry, contr
1c9a0 6f 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74 6f 20 69  ol jumps.** to i
1c9b0 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f  nstruction P2. O
1c9c0 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 72 6f  therwise, the ro
1c9d0 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c  wid of the confl
1c9e0 69 63 74 69 6e 67 20 69 6e 64 65 78 0a 2a 2a 20  icting index.** 
1c9f0 65 6e 74 72 79 20 69 73 20 63 6f 70 69 65 64 20  entry is copied 
1ca00 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61  to register P3 a
1ca10 6e 64 20 63 6f 6e 74 72 6f 6c 20 66 61 6c 6c 73  nd control falls
1ca20 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1ca30 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74  next.** instruct
1ca40 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
1ca50 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  lso: NotFound, N
1ca60 6f 74 45 78 69 73 74 73 2c 20 46 6f 75 6e 64 0a  otExists, Found.
1ca70 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 55 6e 69  */.case OP_IsUni
1ca80 71 75 65 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  que: {        /*
1ca90 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1caa0 75 31 36 20 69 69 3b 0a 20 20 56 64 62 65 43 75  u16 ii;.  VdbeCu
1cab0 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42 74 43  rsor *pCx;.  BtC
1cac0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1cad0 75 31 36 20 6e 46 69 65 6c 64 3b 0a 20 20 4d 65  u16 nField;.  Me
1cae0 6d 20 2a 61 4d 78 3b 0a 20 20 55 6e 70 61 63 6b  m *aMx;.  Unpack
1caf0 65 64 52 65 63 6f 72 64 20 72 3b 20 20 20 20 20  edRecord r;     
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cb10 42 2d 54 72 65 65 20 69 6e 64 65 78 20 73 65 61  B-Tree index sea
1cb20 72 63 68 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34  rch key */.  i64
1cb30 20 52 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   R;             
1cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb50 2f 2a 20 52 6f 77 69 64 20 73 74 6f 72 65 64 20  /* Rowid stored 
1cb60 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 2a  in register P3 *
1cb70 2f 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  /..  pIn3 = &aMe
1cb80 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 4d  m[pOp->p3];.  aM
1cb90 78 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  x = &aMem[pOp->p
1cba0 34 2e 69 5d 3b 0a 20 20 2f 2a 20 41 73 73 65 72  4.i];.  /* Asser
1cbb0 74 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65  t that the value
1cbc0 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20  s of parameters 
1cbd0 50 31 20 61 6e 64 20 50 34 20 61 72 65 20 69 6e  P1 and P4 are in
1cbe0 20 72 61 6e 67 65 2e 20 2a 2f 0a 20 20 61 73 73   range. */.  ass
1cbf0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1cc00 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1cc10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
1cc20 69 3e 30 20 26 26 20 70 4f 70 2d 3e 70 34 2e 69  i>0 && pOp->p4.i
1cc30 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61  <=p->nMem );.  a
1cc40 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1cc50 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1cc60 6e 43 75 72 73 6f 72 20 29 3b 0a 0a 20 20 2f 2a  nCursor );..  /*
1cc70 20 46 69 6e 64 20 74 68 65 20 69 6e 64 65 78 20   Find the index 
1cc80 63 75 72 73 6f 72 2e 20 2a 2f 0a 20 20 70 43 78  cursor. */.  pCx
1cc90 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1cca0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1ccb0 70 43 78 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76  pCx->deferredMov
1ccc0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 78 2d  eto==0 );.  pCx-
1ccd0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b  >seekResult = 0;
1cce0 0a 20 20 70 43 78 2d 3e 63 61 63 68 65 53 74 61  .  pCx->cacheSta
1ccf0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1cd00 45 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 78  E;.  pCrsr = pCx
1cd10 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a  ->pCursor;..  /*
1cd20 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65 20 76   If any of the v
1cd30 61 6c 75 65 73 20 61 72 65 20 4e 55 4c 4c 2c 20  alues are NULL, 
1cd40 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 2a  take the jump. *
1cd50 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 78  /.  nField = pCx
1cd60 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  ->pKeyInfo->nFie
1cd70 6c 64 3b 0a 20 20 66 6f 72 28 69 69 3d 30 3b 20  ld;.  for(ii=0; 
1cd80 69 69 3c 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29  ii<nField; ii++)
1cd90 7b 0a 20 20 20 20 69 66 28 20 61 4d 78 5b 69 69  {.    if( aMx[ii
1cda0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
1cdb0 6c 6c 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ll ){.      pc =
1cdc0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1cdd0 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b 0a 20      pCrsr = 0;. 
1cde0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1cdf0 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  }.  }.  assert( 
1ce00 28 61 4d 78 5b 6e 46 69 65 6c 64 5d 2e 66 6c 61  (aMx[nField].fla
1ce10 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
1ce20 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 72 73  0 );..  if( pCrs
1ce30 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 50  r!=0 ){.    /* P
1ce40 6f 70 75 6c 61 74 65 20 74 68 65 20 69 6e 64 65  opulate the inde
1ce50 78 20 73 65 61 72 63 68 20 6b 65 79 2e 20 2a 2f  x search key. */
1ce60 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
1ce70 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 3b  = pCx->pKeyInfo;
1ce80 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
1ce90 6e 46 69 65 6c 64 20 2b 20 31 3b 0a 20 20 20 20  nField + 1;.    
1cea0 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
1ceb0 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48  ED_PREFIX_SEARCH
1cec0 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 61  ;.    r.aMem = a
1ced0 4d 78 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  Mx;.#ifdef SQLIT
1cee0 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e  E_DEBUG.    { in
1cef0 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
1cf00 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
1cf10 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1cf20 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
1cf30 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
1cf40 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 76 61  * Extract the va
1cf50 6c 75 65 20 6f 66 20 52 20 66 72 6f 6d 20 72 65  lue of R from re
1cf60 67 69 73 74 65 72 20 50 33 2e 20 2a 2f 0a 20 20  gister P3. */.  
1cf70 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1cf80 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29  Integerify(pIn3)
1cf90 3b 0a 20 20 20 20 52 20 3d 20 70 49 6e 33 2d 3e  ;.    R = pIn3->
1cfa0 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61  u.i;..    /* Sea
1cfb0 72 63 68 20 74 68 65 20 42 2d 54 72 65 65 20 69  rch the B-Tree i
1cfc0 6e 64 65 78 2e 20 49 66 20 6e 6f 20 63 6f 6e 66  ndex. If no conf
1cfd0 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20 69  licting record i
1cfe0 73 20 66 6f 75 6e 64 2c 20 6a 75 6d 70 0a 20 20  s found, jump.  
1cff0 20 20 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65    ** to P2. Othe
1d000 72 77 69 73 65 2c 20 63 6f 70 79 20 74 68 65 20  rwise, copy the 
1d010 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e  rowid of the con
1d020 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20  flicting record 
1d030 74 6f 0a 20 20 20 20 2a 2a 20 72 65 67 69 73 74  to.    ** regist
1d040 65 72 20 50 33 20 61 6e 64 20 66 61 6c 6c 20 74  er P3 and fall t
1d050 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
1d060 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  xt instruction. 
1d070 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
1d080 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1d090 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
1d0a0 72 2c 20 30 2c 20 30 2c 20 26 70 43 78 2d 3e 73  r, 0, 0, &pCx->s
1d0b0 65 65 6b 52 65 73 75 6c 74 29 3b 0a 20 20 20 20  eekResult);.    
1d0c0 69 66 28 20 28 72 2e 66 6c 61 67 73 20 26 20 55  if( (r.flags & U
1d0d0 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53  NPACKED_PREFIX_S
1d0e0 45 41 52 43 48 29 20 7c 7c 20 72 2e 72 6f 77 69  EARCH) || r.rowi
1d0f0 64 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20 70 63  d==R ){.      pc
1d100 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1d110 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1d120 20 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 72 2e 72   pIn3->u.i = r.r
1d130 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  owid;.    }.  }.
1d140 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1d150 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73  pcode: NotExists
1d160 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1d170 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f 6e 74  .** Use the cont
1d180 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
1d190 50 33 20 61 73 20 61 20 69 6e 74 65 67 65 72 20  P3 as a integer 
1d1a0 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63 6f 72  key.  If a recor
1d1b0 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61 74 20  d .** with that 
1d1c0 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  key does not exi
1d1d0 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66 20 50  st in table of P
1d1e0 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  1, then jump to 
1d1f0 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 72  P2. .** If the r
1d200 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69 73 74  ecord does exist
1d210 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
1d220 75 67 68 2e 20 20 54 68 65 20 63 75 72 73 6f 72  ugh.  The cursor
1d230 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69   is left .** poi
1d240 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72 65 63  nting to the rec
1d250 6f 72 64 20 69 66 20 69 74 20 65 78 69 73 74 73  ord if it exists
1d260 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66  ..**.** The diff
1d270 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74  erence between t
1d280 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  his operation an
1d290 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74 68  d NotFound is th
1d2a0 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61  at this.** opera
1d2b0 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 65  tion assumes the
1d2c0 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74 65 67   key is an integ
1d2d0 65 72 20 61 6e 64 20 74 68 61 74 20 50 31 20 69  er and that P1 i
1d2e0 73 20 61 20 74 61 62 6c 65 20 77 68 65 72 65 61  s a table wherea
1d2f0 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61 73  s.** NotFound as
1d300 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61 20 62  sumes key is a b
1d310 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1d320 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64 20  from MakeRecord 
1d330 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  and.** P1 is an 
1d340 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  index..**.** See
1d350 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1d360 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65  tFound, IsUnique
1d370 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45  .*/.case OP_NotE
1d380 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20  xists: {        
1d390 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1d3a0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1d3b0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
1d3c0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
1d3d0 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70    u64 iKey;..  p
1d3e0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
1d3f0 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
1d400 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1d410 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
1d420 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1d430 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1d440 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1d450 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1d460 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1d470 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1d480 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61  ->isTable );.  a
1d490 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
1d4a0 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
1d4b0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
1d4c0 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72  ursor;.  if( pCr
1d4d0 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 72 65 73  sr!=0 ){.    res
1d4e0 20 3d 20 30 3b 0a 20 20 20 20 69 4b 65 79 20 3d   = 0;.    iKey =
1d4f0 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn3->u.i;.    
1d500 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d510 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1d520 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20  pCrsr, 0, iKey, 
1d530 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43  0, &res);.    pC
1d540 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 49  ->lastRowid = pI
1d550 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 70 43 2d  n3->u.i;.    pC-
1d560 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1d570 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20  res==0 ?1:0;.   
1d580 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
1d590 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
1d5a0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1d5b0 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  ALE;.    pC->def
1d5c0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1d5d0 0a 20 20 20 20 69 66 28 20 72 65 73 21 3d 30 20  .    if( res!=0 
1d5e0 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
1d5f0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
1d600 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77   assert( pC->row
1d610 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a  idIsValid==0 );.
1d620 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 73 65      }.    pC->se
1d630 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a  ekResult = res;.
1d640 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
1d650 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65  This happens whe
1d660 6e 20 61 6e 20 61 74 74 65 6d 70 74 20 74 6f 20  n an attempt to 
1d670 6f 70 65 6e 20 61 20 72 65 61 64 20 63 75 72 73  open a read curs
1d680 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20 20 20 2a  or on the .    *
1d690 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  * sqlite_master 
1d6a0 74 61 62 6c 65 20 72 65 74 75 72 6e 73 20 53 51  table returns SQ
1d6b0 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20 20 20 20  LITE_EMPTY..    
1d6c0 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  */.    pc = pOp-
1d6d0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73  >p2 - 1;.    ass
1d6e0 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
1d6f0 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20  Valid==0 );.    
1d700 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
1d710 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   0;.  }.  break;
1d720 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1d730 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20  equence P1 P2 * 
1d740 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74  * *.**.** Find t
1d750 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c  he next availabl
1d760 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
1d770 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  r for cursor P1.
1d780 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73 65  .** Write the se
1d790 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e  quence number in
1d7a0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
1d7b0 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65 20  ** The sequence 
1d7c0 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75  number on the cu
1d7d0 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  rsor is incremen
1d7e0 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a  ted after this.*
1d7f0 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  * instruction.  
1d800 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
1d810 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20  ence: {         
1d820 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
1d830 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
1d840 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1d850 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1d860 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1d870 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1d880 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  ]!=0 );.  pOut->
1d890 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  u.i = p->apCsr[p
1d8a0 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e  Op->p1]->seqCoun
1d8b0 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  t++;.  break;.}.
1d8c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77  ../* Opcode: New
1d8d0 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a  Rowid P1 P2 P3 *
1d8e0 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e   *.**.** Get a n
1d8f0 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  ew integer recor
1d900 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20  d number (a.k.a 
1d910 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73  "rowid") used as
1d920 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61   the key to a ta
1d930 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f  ble..** The reco
1d940 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
1d950 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
1d960 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65   as a key in the
1d970 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62   database.** tab
1d980 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  le that cursor P
1d990 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68  1 points to.  Th
1d9a0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  e new record num
1d9b0 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a  ber is written.*
1d9c0 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67  * written to reg
1d9d0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
1d9e0 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20  If P3>0 then P3 
1d9f0 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
1da00 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
1da10 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61  of this VDBE tha
1da20 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20  t holds .** the 
1da30 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73  largest previous
1da40 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ly generated rec
1da50 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e  ord number. No n
1da60 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
1da70 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64  s are.** allowed
1da80 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
1da90 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65   this value. Whe
1daa0 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61  n this value rea
1dab0 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d  ches its maximum
1dac0 2c 20 0a 2a 2a 20 61 20 53 51 4c 49 54 45 5f 46  , .** a SQLITE_F
1dad0 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e  ULL error is gen
1dae0 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72  erated. The P3 r
1daf0 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74  egister is updat
1db00 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a  ed with the '.**
1db10 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
1db20 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50  d number. This P
1db30 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75  3 mechanism is u
1db40 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c  sed to help impl
1db50 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54  ement the.** AUT
1db60 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75  OINCREMENT featu
1db70 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  re..*/.case OP_N
1db80 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  ewRowid: {      
1db90 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1dba0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34  release */.  i64
1dbb0 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
1dbc0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
1dbd0 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  owid */.  VdbeCu
1dbe0 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
1dbf0 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61   /* Cursor of ta
1dc00 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e  ble to get the n
1dc10 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e  ew rowid */.  in
1dc20 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
1dc30 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
1dc40 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65  f an sqlite3Btre
1dc50 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74  eLast() */.  int
1dc60 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
1dc70 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
1dc80 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
1dc90 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a  er of searches *
1dca0 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
1dcb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1dcc0 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c  gister holding l
1dcd0 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72  argest rowid for
1dce0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
1dcf0 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
1dd00 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f  Frame;     /* Ro
1dd10 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45  ot frame of VDBE
1dd20 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20   */..  v = 0;.  
1dd30 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
1dd40 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1dd50 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1dd60 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1dd70 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1dd80 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1dd90 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28   );.  if( NEVER(
1dda0 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20  pC->pCursor==0) 
1ddb0 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65  ){.    /* The ze
1ddc0 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ro initializatio
1ddd0 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74  n above is all t
1dde0 68 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f  hat is needed */
1ddf0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
1de00 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20   The next rowid 
1de10 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  or record number
1de20 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d   (different term
1de30 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20  s for the same. 
1de40 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20     ** thing) is 
1de50 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77  obtained in a tw
1de60 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d  o-step algorithm
1de70 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1de80 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74  First we attempt
1de90 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72   to find the lar
1dea0 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
1deb0 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a  wid and add one.
1dec0 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20      ** to that. 
1ded0 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67   But if the larg
1dee0 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
1def0 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68  id is already th
1df00 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a  e maximum.    **
1df10 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
1df20 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61  r, we have to fa
1df30 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
1df40 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20  e second.    ** 
1df50 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c  probabilistic al
1df60 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20  gorithm.    **. 
1df70 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64     ** The second
1df80 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f   algorithm is to
1df90 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20   select a rowid 
1dfa0 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65  at random and se
1dfb0 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61  e if.    ** it a
1dfc0 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e  lready exists in
1dfd0 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
1dfe0 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
1dff0 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a  t, we have.    *
1e000 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66  * succeeded.  If
1e010 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69   the random rowi
1e020 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65  d does exist, we
1e030 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e   select a new on
1e040 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79  e.    ** and try
1e050 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30   again, up to 10
1e060 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a  0 times..    */.
1e070 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1e080 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 63  isTable );.    c
1e090 6e 74 20 3d 20 30 3b 0a 0a 23 69 66 64 65 66 20  nt = 0;..#ifdef 
1e0a0 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57  SQLITE_32BIT_ROW
1e0b0 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  ID.#   define MA
1e0c0 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66  X_ROWID 0x7fffff
1e0d0 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20  ff.#else.    /* 
1e0e0 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63  Some compilers c
1e0f0 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f  omplain about co
1e100 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66  nstants of the f
1e110 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66  orm 0x7fffffffff
1e120 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f  ffffff..    ** O
1e130 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  thers complain a
1e140 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66  bout 0x7ffffffff
1e150 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65  ffffffffLL.  The
1e160 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1e170 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f   seems.    ** to
1e180 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e   provide the con
1e190 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69  stant while maki
1e1a0 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  ng all compilers
1e1b0 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23   happy..    */.#
1e1c0 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
1e1d0 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75  WID  (i64)( (((u
1e1e0 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
1e1f0 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66  32) | (u64)0xfff
1e200 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a  fffff ).#endif..
1e210 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65      if( !pC->use
1e220 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
1e230 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
1e240 42 74 72 65 65 47 65 74 43 61 63 68 65 64 52 6f  BtreeGetCachedRo
1e250 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  wid(pC->pCursor)
1e260 3b 0a 20 20 20 20 20 20 69 66 28 20 76 3d 3d 30  ;.      if( v==0
1e270 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1e280 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1e290 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1e2a0 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
1e2b0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1e2c0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
1e2d0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1e2e0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
1e2f0 20 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20          if( res 
1e300 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d  ){.          v =
1e310 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d   1;   /* IMP: R-
1e320 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20  61914-48074 */. 
1e330 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1e340 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1e350 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1e360 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43  orIsValid(pC->pC
1e370 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
1e380 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1e390 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
1e3a0 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
1e3b0 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1e3c0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1e3d0 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61  ;   /* Cannot fa
1e3e0 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72  il following Btr
1e3f0 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20 20  eeLast() */.    
1e400 20 20 20 20 20 20 69 66 28 20 76 3d 3d 4d 41 58        if( v==MAX
1e410 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20  _ROWID ){.      
1e420 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e        pC->useRan
1e430 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20  domRowid = 1;.  
1e440 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1e450 20 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20             v++; 
1e460 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33    /* IMP: R-2953
1e470 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20  8-34987 */.     
1e480 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
1e490 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65  .      }..#ifnde
1e4a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
1e4b0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20  TOINCREMENT.    
1e4c0 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
1e4d0 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
1e4e0 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
1e4f0 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
1e500 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
1e510 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
1e520 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
1e530 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
1e540 20 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65        for(pFrame
1e550 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
1e560 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72  me->pParent; pFr
1e570 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
1e580 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ent);.          
1e590 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
1e5a0 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
1e5b0 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
1e5c0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1e5d0 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e  Op->p3<=pFrame->
1e5e0 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
1e5f0 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65    pMem = &pFrame
1e600 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
1e610 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1e620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73            /* Ass
1e630 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
1e640 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
1e650 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ll. */.         
1e660 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1e670 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
1e680 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61         pMem = &a
1e690 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1e6a0 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
1e6b0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d  ToChange(p, pMem
1e6c0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
1e6d0 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
1e6e0 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b  IsValid(pMem) );
1e6f0 0a 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ..        REGIST
1e700 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
1e710 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  , pMem);.       
1e720 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1e730 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b  ntegerify(pMem);
1e740 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1e750 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
1e760 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20  MEM_Int)!=0 );  
1e770 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73  /* mem(P3) holds
1e780 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20   an integer */. 
1e790 20 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d         if( pMem-
1e7a0 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
1e7b0 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
1e7c0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
1e7d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
1e7e0 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  ULL;   /* IMP: R
1e7f0 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a  -12275-61338 */.
1e800 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
1e810 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1e820 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
1e830 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d       if( v<pMem-
1e840 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20  >u.i+1 ){.      
1e850 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
1e860 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  i + 1;.        }
1e870 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75  .        pMem->u
1e880 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a  .i = v;.      }.
1e890 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 73 71  #endif..      sq
1e8a0 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
1e8b0 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75  hedRowid(pC->pCu
1e8c0 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49  rsor, v<MAX_ROWI
1e8d0 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20  D ? v+1 : 0);.  
1e8e0 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d 3e    }.    if( pC->
1e8f0 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
1e900 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45  {.      /* IMPLE
1e910 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
1e920 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74  07677-41881 If t
1e930 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44  he largest ROWID
1e940 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65   is equal to the
1e950 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73  .      ** larges
1e960 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67  t possible integ
1e970 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35  er (922337203685
1e980 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68  4775807) then th
1e990 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
1e9a0 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74   ** engine start
1e9b0 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69  s picking positi
1e9c0 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57  ve candidate ROW
1e9d0 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e  IDs at random un
1e9e0 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20  til.      ** it 
1e9f0 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69  finds one that i
1ea00 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
1ea10 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20   used. */.      
1ea20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d  assert( pOp->p3=
1ea30 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e  =0 );  /* We can
1ea40 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d  not be in random
1ea50 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74   rowid mode if t
1ea60 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20  his is.         
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea80 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e      ** an AUTOIN
1ea90 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a  CREMENT table. *
1eaa0 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20 74 68  /.      /* on th
1eab0 65 20 66 69 72 73 74 20 61 74 74 65 6d 70 74 2c  e first attempt,
1eac0 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65 20 6d   simply do one m
1ead0 6f 72 65 20 74 68 61 6e 20 70 72 65 76 69 6f 75  ore than previou
1eae0 73 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20 64  s */.      v = d
1eaf0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  b->lastRowid;.  
1eb00 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f      v &= (MAX_RO
1eb10 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75  WID>>1); /* ensu
1eb20 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65  re doesn't go ne
1eb30 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20  gative */.      
1eb40 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e  v++; /* ensure n
1eb50 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20  on-zero */.     
1eb60 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20   cnt = 0;.      
1eb70 77 68 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20  while(   ((rc = 
1eb80 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1eb90 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1eba0 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
1ebb0 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  v,.             
1ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebe0 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53      0, &res))==S
1ebf0 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20  QLITE_OK).      
1ec00 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30        && (res==0
1ec10 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
1ec20 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20   (++cnt<100)){. 
1ec30 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73         /* collis
1ec40 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65  ion - try anothe
1ec50 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a  r random rowid *
1ec60 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  /.        sqlite
1ec70 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a  3_randomness(siz
1ec80 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20  eof(v), &v);.   
1ec90 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29       if( cnt<5 )
1eca0 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  {.          /* t
1ecb0 72 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f  ry "small" rando
1ecc0 6d 20 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65  m rowids for the
1ecd0 20 69 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74   initial attempt
1ece0 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76  s */.          v
1ecf0 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20   &= 0xffffff;.  
1ed00 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1ed10 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58         v &= (MAX
1ed20 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65  _ROWID>>1); /* e
1ed30 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f  nsure doesn't go
1ed40 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20   negative */.   
1ed50 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76       }.        v
1ed60 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f  ++; /* ensure no
1ed70 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n-zero */.      
1ed80 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  }.      if( rc==
1ed90 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
1eda0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
1edb0 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
1edc0 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32     /* IMP: R-382
1edd0 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20  19-53002 */.    
1ede0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1edf0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1ee00 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
1ee10 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56  t( v>0 );  /* EV
1ee20 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20  : R-40812-03570 
1ee30 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  */.    }.    pC-
1ee40 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1ee50 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  0;.    pC->defer
1ee60 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1ee70 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
1ee80 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1ee90 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
1eea0 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
1eeb0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
1eec0 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34  sert P1 P2 P3 P4
1eed0 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20   P5.**.** Write 
1eee0 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68  an entry into th
1eef0 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  e table of curso
1ef00 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74  r P1.  A new ent
1ef10 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ry is.** created
1ef20 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61   if it doesn't a
1ef30 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20  lready exist or 
1ef40 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20  the data for an 
1ef50 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72  existing.** entr
1ef60 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  y is overwritten
1ef70 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74  .  The data is t
1ef80 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f  he value MEM_Blo
1ef90 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  b stored in regi
1efa0 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  ster.** number P
1efb0 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74  2. The key is st
1efc0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1efd0 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73   P3. The key mus
1efe0 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e  t.** be a MEM_In
1eff0 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
1f000 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
1f010 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
1f020 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
1f030 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
1f040 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
1f050 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20  therwise not).  
1f060 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41  If the OPFLAG_LA
1f070 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20  STROWID flag of 
1f080 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68  P5 is set,.** th
1f090 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72  en rowid is stor
1f0a0 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e  ed for subsequen
1f0b0 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a  t return by the.
1f0c0 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ** sqlite3_last_
1f0d0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
1f0e0 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69  unction (otherwi
1f0f0 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66  se it is unmodif
1f100 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ied)..**.** If t
1f110 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
1f120 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20  KRESULT flag of 
1f130 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 69 66  P5 is set and if
1f140 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
1f150 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20  * the last seek 
1f160 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f  operation (OP_No
1f170 74 45 78 69 73 74 73 29 20 77 61 73 20 61 20 73  tExists) was a s
1f180 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69  uccess, then thi
1f190 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77  s.** operation w
1f1a0 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20  ill not attempt 
1f1b0 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70 72  to find the appr
1f1c0 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f  opriate row befo
1f1d0 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20  re doing.** the 
1f1e0 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20  insert but will 
1f1f0 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69 74  instead overwrit
1f200 65 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 74  e the row that t
1f210 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1f220 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
1f230 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62  ng to.  Presumab
1f240 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50  ly, the prior OP
1f250 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64  _NotExists opcod
1f260 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79  e.** has already
1f270 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20   positioned the 
1f280 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79  cursor correctly
1f290 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70  .  This is an op
1f2a0 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68  timization.** th
1f2b0 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72  at boosts perfor
1f2c0 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e  mance by avoidin
1f2d0 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b  g redundant seek
1f2e0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
1f2f0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
1f300 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
1f310 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  n this opcode is
1f320 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55   part of an.** U
1f330 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e  PDATE operation.
1f340 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20    Otherwise (if 
1f350 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61  the flag is clea
1f360 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  r) then this opc
1f370 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f  ode.** is part o
1f380 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72  f an INSERT oper
1f390 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66  ation.  The diff
1f3a0 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69  erence is only i
1f3b0 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74  mportant to.** t
1f3c0 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a  he update hook..
1f3d0 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  **.** Parameter 
1f3e0 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20  P4 may point to 
1f3f0 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  a string contain
1f400 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61  ing the table-na
1f410 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65  me, or.** may be
1f420 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20   NULL. If it is 
1f430 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
1f440 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a  he update-hook .
1f450 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64  ** (sqlite3.xUpd
1f460 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20  ateCallback) is 
1f470 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e  invoked followin
1f480 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69  g a successful i
1f490 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41  nsert..**.** (WA
1f4a0 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50  RNING/TODO: If P
1f4b0 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75  1 is a pseudo-cu
1f4c0 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64  rsor and P2 is d
1f4d0 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c  ynamically.** al
1f4e0 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77  located, then ow
1f4f0 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73  nership of P2 is
1f500 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20   transferred to 
1f510 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  the pseudo-curso
1f520 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65  r.** and registe
1f530 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68  r P2 becomes eph
1f540 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20  emeral.  If the 
1f550 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65  cursor is change
1f560 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  d, the.** value 
1f570 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77  of register P2 w
1f580 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e  ill then change.
1f590 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73    Make sure this
1f5a0 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75   does not.** cau
1f5b0 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  se any problems.
1f5c0 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ).**.** This ins
1f5d0 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
1f5e0 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20  rks on tables.  
1f5f0 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
1f600 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
1f610 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f  r indices is OP_
1f620 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a  IdxInsert..*/./*
1f630 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49   Opcode: InsertI
1f640 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  nt P1 P2 P3 P4 P
1f650 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
1f660 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20  ks exactly like 
1f670 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74  OP_Insert except
1f680 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73   that the key is
1f690 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
1f6a0 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68  value P3, not th
1f6b0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69  e value of the i
1f6c0 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e  nteger stored in
1f6d0 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f   register P3..*/
1f6e0 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a  .case OP_Insert:
1f6f0 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74   .case OP_Insert
1f700 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44  Int: {.  Mem *pD
1f710 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45  ata;       /* ME
1f720 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64  M cell holding d
1f730 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ata for the reco
1f740 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  rd to be inserte
1f750 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79  d */.  Mem *pKey
1f760 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  ;        /* MEM 
1f770 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79  cell holding key
1f780 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64    for the record
1f790 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20   */.  i64 iKey; 
1f7a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69          /* The i
1f7b0 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20  nteger ROWID or 
1f7c0 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f  key for the reco
1f7d0 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  rd to be inserte
1f7e0 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
1f7f0 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73  r *pC;   /* Curs
1f800 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f  or to table into
1f810 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73   which insert is
1f820 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
1f830 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20  t nZero;        
1f840 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
1f850 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65 6e  o-bytes to appen
1f860 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52  d */.  int seekR
1f870 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75  esult;   /* Resu
1f880 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b  lt of prior seek
1f890 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53   or 0 if no USES
1f8a0 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a  EEKRESULT flag *
1f8b0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1f8c0 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73  zDb;  /* databas
1f8d0 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79  e name - used by
1f8e0 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
1f8f0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1f900 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65   *zTbl; /* Table
1f910 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20   name - used by 
1f920 74 68 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20  the opdate hook 
1f930 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20  */.  int op;    
1f940 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65         /* Opcode
1f950 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b   for update hook
1f960 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  : SQLITE_UPDATE 
1f970 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  or SQLITE_INSERT
1f980 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26   */..  pData = &
1f990 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
1f9a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1f9b0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1f9c0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1f9d0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1f9e0 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43  d(pData) );.  pC
1f9f0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1fa00 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1fa10 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1fa20 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1fa30 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1fa40 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
1fa50 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
1fa60 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1fa70 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
1fa80 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61  E(pOp->p2, pData
1fa90 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  );..  if( pOp->o
1faa0 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
1fab0 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26   ){.    pKey = &
1fac0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1fad0 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d     assert( pKey-
1fae0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1faf0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1fb00 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29  memIsValid(pKey)
1fb10 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
1fb20 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
1fb30 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20  pKey);.    iKey 
1fb40 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d  = pKey->u.i;.  }
1fb50 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
1fb60 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1fb70 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20  P_InsertInt );. 
1fb80 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70     iKey = pOp->p
1fb90 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f  3;.  }..  if( pO
1fba0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p5 & OPFLAG_N
1fbb0 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
1fbc0 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70  nge++;.  if( pOp
1fbd0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41  ->p5 & OPFLAG_LA
1fbe0 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61  STROWID ) db->la
1fbf0 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a  stRowid = iKey;.
1fc00 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
1fc10 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
1fc20 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20  .    pData->z = 
1fc30 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20  0;.    pData->n 
1fc40 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 0;.  }else{.  
1fc50 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d    assert( pData-
1fc60 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
1fc70 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20  ob|MEM_Str) );. 
1fc80 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20   }.  seekResult 
1fc90 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  = ((pOp->p5 & OP
1fca0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
1fcb0 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
1fcc0 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28  sult : 0);.  if(
1fcd0 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
1fce0 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
1fcf0 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75  nZero = pData->u
1fd00 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b  .nZero;.  }else{
1fd10 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a  .    nZero = 0;.
1fd20 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74 72    }.  sqlite3Btr
1fd30 65 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64  eeSetCachedRowid
1fd40 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29  (pC->pCursor, 0)
1fd50 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1fd60 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
1fd70 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79  pCursor, 0, iKey
1fd80 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74              pDat
1fda0 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20  a->z, pData->n, 
1fdb0 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20  nZero,.         
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdd0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1fde0 47 5f 41 50 50 45 4e 44 2c 20 73 65 65 6b 52 65  G_APPEND, seekRe
1fdf0 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e  sult.  );.  pC->
1fe00 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1fe10 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
1fe20 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
1fe30 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1fe40 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
1fe50 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
1fe60 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
1fe70 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
1fe80 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
1fe90 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
1fea0 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
1feb0 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64  z ){.    zDb = d
1fec0 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
1fed0 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20  zName;.    zTbl 
1fee0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
1fef0 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20   op = ((pOp->p5 
1ff00 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
1ff10 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41  E) ? SQLITE_UPDA
1ff20 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45  TE : SQLITE_INSE
1ff30 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  RT);.    assert(
1ff40 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1ff50 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
1ff60 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
1ff70 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c  ateArg, op, zDb,
1ff80 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20   zTbl, iKey);.  
1ff90 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
1ffa0 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72  b>=0 );.  }.  br
1ffb0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1ffc0 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20  e: Delete P1 P2 
1ffd0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  * P4 *.**.** Del
1ffe0 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61  ete the record a
1fff0 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63  t which the P1 c
20000 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74  ursor is current
20010 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a  ly pointing..**.
20020 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 77 69  ** The cursor wi
20030 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74  ll be left point
20040 69 6e 67 20 61 74 20 65 69 74 68 65 72 20 74 68  ing at either th
20050 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72  e next or the pr
20060 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64  evious.** record
20070 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49   in the table. I
20080 66 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69  f it is left poi
20090 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78  nting at the nex
200a0 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a  t record, then.*
200b0 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20  * the next Next 
200c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c  instruction will
200d0 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65   be a no-op.  He
200e0 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20  nce it is OK to 
200f0 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f  delete.** a reco
20100 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  rd from within a
20110 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a  n Next loop..**.
20120 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
20130 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
20140 20 50 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P2 is set, then
20150 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
20160 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72  count is.** incr
20170 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
20180 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50  se not)..**.** P
20190 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73  1 must not be ps
201a0 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20  eudo-table.  It 
201b0 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  has to be a real
201c0 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d   table with.** m
201d0 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a  ultiple rows..**
201e0 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
201f0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69   NULL, then it i
20200 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
20210 65 20 74 61 62 6c 65 20 74 68 61 74 20 50 31 20  e table that P1 
20220 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74  is.** pointing t
20230 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65 20 68  o.  The update h
20240 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f  ook will be invo
20250 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69 73 74  ked, if it exist
20260 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  s..** If P4 is n
20270 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  ot NULL then the
20280 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
20290 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69  have been positi
202a0 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50  oned.** using OP
202b0 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20  _NotFound prior 
202c0 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73  to invoking this
202d0 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
202e0 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20   OP_Delete: {.  
202f0 69 36 34 20 69 4b 65 79 3b 0a 20 20 56 64 62 65  i64 iKey;.  Vdbe
20300 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 69  Cursor *pC;..  i
20310 4b 65 79 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  Key = 0;.  asser
20320 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
20330 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
20340 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
20350 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
20360 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
20370 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
20380 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20  ->pCursor!=0 ); 
20390 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66   /* Only valid f
203a0 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20  or real tables, 
203b0 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20  no pseudotables 
203c0 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  */..  /* If the 
203d0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c  update-hook will
203e0 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74   be invoked, set
203f0 20 69 4b 65 79 20 74 6f 20 74 68 65 20 72 6f 77   iKey to the row
20400 69 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 72  id of the.  ** r
20410 6f 77 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64  ow being deleted
20420 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
20430 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
20440 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
20450 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
20460 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
20470 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69  assert( pC->rowi
20480 64 49 73 56 61 6c 69 64 20 29 3b 20 20 2f 2a 20  dIsValid );  /* 
20490 6c 61 73 74 52 6f 77 69 64 20 73 65 74 20 62 79  lastRowid set by
204a0 20 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e 6f 74   previous OP_Not
204b0 46 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69 4b 65  Found */.    iKe
204c0 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69  y = pC->lastRowi
204d0 64 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65  d;.  }..  /* The
204e0 20 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63 6f 64   OP_Delete opcod
204f0 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73  e always follows
20500 20 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73   an OP_NotExists
20510 20 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72 0a 20   or OP_Last or. 
20520 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   ** OP_Column on
20530 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
20540 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65  without any inte
20550 72 76 65 6e 69 6e 67 20 6f 70 65 72 61 74 69 6f  rvening operatio
20560 6e 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d 69 67  ns that.  ** mig
20570 68 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76 61 6c  ht move or inval
20580 69 64 61 74 65 20 74 68 65 20 63 75 72 73 6f 72  idate the cursor
20590 2e 20 20 48 65 6e 63 65 20 63 75 72 73 6f 72 20  .  Hence cursor 
205a0 70 43 20 69 73 20 61 6c 77 61 79 73 20 70 6f 69  pC is always poi
205b0 6e 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20 74 68  nting.  ** to th
205c0 65 20 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65  e row to be dele
205d0 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69  ted and the sqli
205e0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
205f0 65 74 6f 28 29 20 6f 70 65 72 61 74 69 6f 6e 0a  eto() operation.
20600 20 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20 61 6c    ** below is al
20610 77 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64  ways a no-op and
20620 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 20 57   cannot fail.  W
20630 65 20 77 69 6c 6c 20 72 75 6e 20 69 74 20 61 6e  e will run it an
20640 79 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a 20 20  yhow, though,.  
20650 2a 2a 20 74 6f 20 67 75 61 72 64 20 61 67 61 69  ** to guard agai
20660 6e 73 74 20 66 75 74 75 72 65 20 63 68 61 6e 67  nst future chang
20670 65 73 20 74 6f 20 74 68 65 20 63 6f 64 65 20 67  es to the code g
20680 65 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f 0a  enerator..  **/.
20690 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
206a0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
206b0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
206c0 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
206d0 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56  o(pC);.  if( NEV
206e0 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  ER(rc!=SQLITE_OK
206f0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
20700 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
20710 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
20720 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
20730 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63  Cursor, 0);.  rc
20740 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
20750 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f  elete(pC->pCurso
20760 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  r);.  pC->cacheS
20770 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
20780 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
20790 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
207a0 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
207b0 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
207c0 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70  TE_OK && db->xUp
207d0 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
207e0 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
207f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
20800 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
20810 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63  Db].zName;.    c
20820 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 20  onst char *zTbl 
20830 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
20840 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
20850 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
20860 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45  Arg, SQLITE_DELE
20870 54 45 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69  TE, zDb, zTbl, i
20880 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Key);.    assert
20890 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
208a0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
208b0 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  2 & OPFLAG_NCHAN
208c0 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
208d0 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a  +;.  break;.}./*
208e0 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f   Opcode: ResetCo
208f0 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  unt * * * * *.**
20900 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
20910 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
20920 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f  ter is copied to
20930 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
20940 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63  ndle.** change c
20950 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64  ounter (returned
20960 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63   by subsequent c
20970 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f  alls to sqlite3_
20980 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54  changes())..** T
20990 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65  hen the VMs inte
209a0 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e  rnal change coun
209b0 74 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e  ter resets to 0.
209c0 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64  .** This is used
209d0 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
209e0 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rams..*/.case OP
209f0 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20  _ResetCount: {. 
20a00 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
20a10 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
20a20 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68  hange);.  p->nCh
20a30 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61  ange = 0;.  brea
20a40 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
20a50 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a   RowData P1 P2 *
20a60 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
20a70 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
20a80 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
20a90 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72 73  ow data for curs
20aa0 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
20ab0 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
20ac0 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
20ad0 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73  .  .** It is jus
20ae0 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  t copied onto th
20af0 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78  e P2 register ex
20b00 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
20b10 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
20b20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
20b30 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
20b40 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
20b50 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
20b60 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
20b70 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
20b80 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
20b90 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
20ba0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  /./* Opcode: Row
20bb0 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Key P1 P2 * * *.
20bc0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
20bd0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
20be0 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65   complete row ke
20bf0 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  y for cursor P1.
20c00 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20  .** There is no 
20c10 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
20c20 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a  f the data.  .**
20c30 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69   The key is copi
20c40 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 33 20 72  ed onto the P3 r
20c50 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20  egister exactly 
20c60 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75  as .** it is fou
20c70 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nd in the databa
20c80 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
20c90 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
20ca0 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
20cb0 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
20cc0 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
20cd0 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
20ce0 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
20cf0 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
20d00 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65   OP_RowKey:.case
20d10 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20   OP_RowData: {. 
20d20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20d30 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
20d40 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69  sr;.  u32 n;.  i
20d50 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20  64 n64;..  pOut 
20d60 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
20d70 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
20d80 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
20d90 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52    /* Note that R
20da0 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74  owKey and RowDat
20db0 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61  a are really exa
20dc0 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e  ctly the same in
20dd0 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61  struction */.  a
20de0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
20df0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
20e00 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
20e10 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
20e20 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
20e30 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f  C->isTable || pO
20e40 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f  p->opcode==OP_Ro
20e50 77 4b 65 79 20 29 3b 0a 20 20 61 73 73 65 72 74  wKey );.  assert
20e60 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c  ( pC->isIndex ||
20e70 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
20e80 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73  _RowData );.  as
20e90 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
20ea0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c   assert( pC->nul
20eb0 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73  lRow==0 );.  ass
20ec0 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
20ed0 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
20ee0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
20ef0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73  sor!=0 );.  pCrs
20f00 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
20f10 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
20f20 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
20f30 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 0a  alid(pCrsr) );..
20f40 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b    /* The OP_RowK
20f50 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74  ey and OP_RowDat
20f60 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73  a opcodes always
20f70 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78   follow OP_NotEx
20f80 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f  ists or.  ** OP_
20f90 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77  Rewind/Op_Next w
20fa0 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69  ith no interveni
20fb0 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  ng instructions 
20fc0 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c  that might inval
20fd0 69 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63  idate.  ** the c
20fe0 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 74 68  ursor.  Hence th
20ff0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69  e following sqli
21000 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
21010 65 74 6f 28 29 20 63 61 6c 6c 20 69 73 20 61 6c  eto() call is al
21020 77 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f  ways.  ** a no-o
21030 70 20 61 6e 64 20 63 61 6e 20 6e 65 76 65 72 20  p and can never 
21040 66 61 69 6c 2e 20 20 42 75 74 20 77 65 20 6c 65  fail.  But we le
21050 61 76 65 20 69 74 20 69 6e 20 70 6c 61 63 65 20  ave it in place 
21060 61 73 20 61 20 73 61 66 65 74 79 2e 0a 20 20 2a  as a safety..  *
21070 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
21080 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
21090 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
210a0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
210b0 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e  eto(pC);.  if( N
210c0 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
210d0 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  OK) ) goto abort
210e0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
210f0 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65    if( pC->isInde
21100 78 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  x ){.    assert(
21110 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b   !pC->isTable );
21120 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
21130 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
21140 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20  rsr, &n64);.    
21150 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
21160 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54  TE_OK );    /* T
21170 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43  rue because of C
21180 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61  ursorMoveto() ca
21190 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20  ll above */.    
211a0 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d  if( n64>db->aLim
211b0 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
211c0 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
211d0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
211e0 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33     }.    n = (u3
211f0 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2)n64;.  }else{.
21200 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21210 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
21220 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73  rsr, &n);.    as
21230 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
21240 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74  _OK );    /* Dat
21250 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66  aSize() cannot f
21260 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ail */.    if( n
21270 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74  >(u32)db->aLimit
21280 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
21290 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
212a0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
212b0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c   }.  }.  if( sql
212c0 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
212d0 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20  pOut, n, 0) ){. 
212e0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
212f0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
21300 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
21310 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
21320 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
21330 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63  sIndex ){.    rc
21340 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
21350 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ey(pCrsr, 0, n, 
21360 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73  pOut->z);.  }els
21370 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
21380 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72  te3BtreeData(pCr
21390 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
213a0 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  z);.  }.  pOut->
213b0 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
213c0 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
213d0 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
213e0 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a  cast to text */.
213f0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
21400 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
21410 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21420 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
21430 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  * * *.**.** Stor
21440 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
21450 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
21460 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
21470 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
21480 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
21490 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
214a0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
214b0 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
214c0 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
214d0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
214e0 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
214f0 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
21500 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
21510 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
21520 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
21530 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
21540 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
21550 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
21560 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
21570 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
21580 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
21590 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
215a0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
215b0 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
215c0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
215d0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
215e0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
215f0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
21600 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
21610 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
21620 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
21630 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
21640 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
21650 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
21660 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
21670 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
21680 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  w ){.    pOut->f
21690 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
216a0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65  .    break;.  }e
216b0 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65  lse if( pC->defe
216c0 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20  rredMoveto ){.  
216d0 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f    v = pC->moveto
216e0 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20  Target;.#ifndef 
216f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
21700 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65  UALTABLE.  }else
21710 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75   if( pC->pVtabCu
21720 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61  rsor ){.    pVta
21730 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72  b = pC->pVtabCur
21740 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20  sor->pVtab;.    
21750 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
21760 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73  >pModule;.    as
21770 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
21780 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20  Rowid );.    rc 
21790 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  = pModule->xRowi
217a0 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  d(pC->pVtabCurso
217b0 72 2c 20 26 76 29 3b 0a 20 20 20 20 69 6d 70 6f  r, &v);.    impo
217c0 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20  rtVtabErrMsg(p, 
217d0 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f  pVtab);.#endif /
217e0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
217f0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20  RTUALTABLE */.  
21800 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
21810 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
21820 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 );.    rc = sq
21830 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
21840 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69  oveto(pC);.    i
21850 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
21860 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
21870 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72 6f 77  .    if( pC->row
21880 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20  idIsValid ){.   
21890 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52     v = pC->lastR
218a0 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  owid;.    }else{
218b0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
218c0 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
218d0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29  pC->pCursor, &v)
218e0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
218f0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
21900 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62    /* Always so b
21910 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
21920 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65 20 2a  Moveto() above *
21930 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f  /.    }.  }.  pO
21940 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62  ut->u.i = v;.  b
21950 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21960 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a  de: NullRow P1 *
21970 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76   * * *.**.** Mov
21980 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20  e the cursor P1 
21990 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20  to a null row.  
219a0 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  Any OP_Column op
219b0 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74  erations.** that
219c0 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65   occur while the
219d0 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68   cursor is on th
219e0 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20  e null row will 
219f0 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20  always.** write 
21a00 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  a NULL..*/.case 
21a10 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20  OP_NullRow: {.  
21a20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
21a30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21a40 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
21a50 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
21a60 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21a70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
21a80 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
21a90 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
21aa0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
21ab0 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 43 2d  d = 0;.  if( pC-
21ac0 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20  >pCursor ){.    
21ad0 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
21ae0 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72  rCursor(pC->pCur
21af0 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  sor);.  }.  brea
21b00 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
21b10 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20   Last P1 P2 * * 
21b20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
21b30 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
21b40 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e  d or Column or N
21b50 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
21b60 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
21b70 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73  refer to the las
21b80 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64  t entry in the d
21b90 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
21ba0 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68   index..** If th
21bb0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
21bc0 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32   is empty and P2
21bd0 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  >0, then jump im
21be0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
21bf0 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f  .** If P2 is 0 o
21c00 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f  r if the table o
21c10 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65  r index is not e
21c20 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75  mpty, fall throu
21c30 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
21c40 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
21c50 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  on..*/.case OP_L
21c60 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ast: {        /*
21c70 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
21c80 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
21c90 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
21ca0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
21cb0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
21cc0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
21cd0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
21ce0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
21cf0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
21d00 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
21d10 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  C->pCursor;.  if
21d20 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20  ( pCrsr==0 ){.  
21d30 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 65 6c    res = 1;.  }el
21d40 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  se{.    rc = sql
21d50 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
21d60 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a  rsr, &res);.  }.
21d70 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
21d80 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64  (u8)res;.  pC->d
21d90 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
21da0 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  0;.  pC->rowidIs
21db0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
21dc0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
21dd0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
21de0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 72  ( pOp->p2>0 && r
21df0 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
21e00 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
21e10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
21e20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20  Opcode: Sort P1 
21e30 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
21e40 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
21e50 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
21e60 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77   thing as OP_Rew
21e70 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a  ind except that.
21e80 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73  ** it increments
21e90 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   an undocumented
21ea0 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
21eb0 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
21ec0 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67  g..**.** Sorting
21ed0 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64   is accomplished
21ee0 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f   by writing reco
21ef0 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69  rds into a sorti
21f00 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65  ng index,.** the
21f10 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74  n rewinding that
21f20 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69   index and playi
21f30 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20  ng it back from 
21f40 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20  beginning to.** 
21f50 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65  end.  We use the
21f60 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20   OP_Sort opcode 
21f70 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65  instead of OP_Re
21f80 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a  wind to do the.*
21f90 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74  * rewinding so t
21fa0 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hat the global v
21fb0 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  ariable will be 
21fc0 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a  incremented and.
21fd0 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ** regression te
21fe0 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e  sts can determin
21ff0 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
22000 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69   the optimizer i
22010 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f  s.** correctly o
22020 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f  ptimizing out so
22030 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rts..*/.case OP_
22040 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Sort: {        /
22050 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66  * jump */.#ifdef
22060 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
22070 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
22080 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  t++;.  sqlite3_s
22090 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23  earch_count--;.#
220a0 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e  endif.  p->aCoun
220b0 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
220c0 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b  TATUS_SORT-1]++;
220d0 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
220e0 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e  gh into OP_Rewin
220f0 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  d */.}./* Opcode
22100 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a  : Rewind P1 P2 *
22110 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
22120 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
22130 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
22140 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
22150 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
22160 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
22170 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74  first entry in t
22180 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
22190 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
221a0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
221b0 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
221c0 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
221d0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
221e0 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
221f0 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
22200 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
22210 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
22220 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
22230 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
22240 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
22250 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20  OP_Rewind: {    
22260 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
22270 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
22280 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
22290 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
222a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
222b0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
222c0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
222d0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
222e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
222f0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 72 65 73  ( pC!=0 );.  res
22300 20 3d 20 31 3b 0a 20 20 69 66 28 20 28 70 43 72   = 1;.  if( (pCr
22310 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
22320 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )!=0 ){.    rc =
22330 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72   sqlite3BtreeFir
22340 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
22350 0a 20 20 20 20 70 43 2d 3e 61 74 46 69 72 73 74  .    pC->atFirst
22360 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a   = res==0 ?1:0;.
22370 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
22380 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
22390 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
223a0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
223b0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
223c0 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70  lid = 0;.  }.  p
223d0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
223e0 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20  )res;.  assert( 
223f0 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
22400 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
22410 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
22420 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
22430 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
22440 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  ../* Opcode: Nex
22450 74 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a  t P1 P2 * * P5.*
22460 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72  *.** Advance cur
22470 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
22480 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
22490 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61  next key/data pa
224a0 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
224b0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
224c0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f   there are no mo
224d0 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  re key/value pai
224e0 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
224f0 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
22500 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
22510 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
22520 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65  e cursor advance
22530 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
22540 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
22550 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
22560 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
22570 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
22580 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
22590 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a  pseudo-table..**
225a0 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
225b0 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
225c0 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
225d0 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
225e0 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
225f0 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
22600 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
22610 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  emented..**.** S
22620 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f  ee also: Prev.*/
22630 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
22640 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a   P1 P2 * * P5.**
22650 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73  .** Back up curs
22660 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
22670 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
22680 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61  revious key/data
22690 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
226a0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
226b0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
226c0 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c  previous key/val
226d0 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
226e0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
226f0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
22700 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
22710 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62   if the cursor b
22720 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73  ackup was succes
22730 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
22740 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
22750 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
22760 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
22770 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
22780 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
22790 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  e..**.** If P5 i
227a0 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
227b0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
227c0 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
227d0 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
227e0 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
227f0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
22800 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f   incremented..*/
22810 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20  .case OP_Prev:  
22820 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
22830 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a  */.case OP_Next:
22840 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
22850 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
22860 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
22870 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
22880 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f  res;..  CHECK_FO
22890 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 61  R_INTERRUPT;.  a
228a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
228b0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
228c0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
228d0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 41 72  ert( pOp->p5<=Ar
228e0 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e  raySize(p->aCoun
228f0 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ter) );.  pC = p
22900 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22910 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30 20 29 7b  ;.  if( pC==0 ){
22920 0a 20 20 20 20 62 72 65 61 6b 3b 20 20 2f 2a 20  .    break;  /* 
22930 53 65 65 20 74 69 63 6b 65 74 20 23 32 32 37 33  See ticket #2273
22940 20 2a 2f 0a 20 20 7d 0a 20 20 70 43 72 73 72 20   */.  }.  pCrsr 
22950 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
22960 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b   if( pCrsr==0 ){
22970 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
22980 20 3d 20 31 3b 0a 20 20 20 20 62 72 65 61 6b 3b   = 1;.    break;
22990 0a 20 20 7d 0a 20 20 72 65 73 20 3d 20 31 3b 0a  .  }.  res = 1;.
229a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
229b0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
229c0 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 6f  );.  rc = pOp->o
229d0 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74 20 3f  pcode==OP_Next ?
229e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
229f0 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 20 3a  t(pCrsr, &res) :
22a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
22a20 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
22a30 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65 73 29  ous(pCrsr, &res)
22a40 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
22a50 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
22a60 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
22a70 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
22a80 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
22a90 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
22aa0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
22ab0 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  5 ) p->aCounter[
22ac0 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69  pOp->p5-1]++;.#i
22ad0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
22ae0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61  .    sqlite3_sea
22af0 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
22b00 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f  dif.  }.  pC->ro
22b10 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
22b20 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22b30 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74  pcode: IdxInsert
22b40 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
22b50 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32  *.** Register P2
22b60 20 68 6f 6c 64 73 20 61 20 53 51 4c 20 69 6e 64   holds a SQL ind
22b70 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e  ex key made usin
22b80 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63  g the.** MakeRec
22b90 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ord instructions
22ba0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
22bb0 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a  rites that key.*
22bc0 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78  * into the index
22bd0 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74   P1.  Data for t
22be0 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e  he entry is nil.
22bf0 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66  .**.** P3 is a f
22c00 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69 64 65  lag that provide
22c10 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
22c20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68 61  b-tree layer tha
22c30 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74  t this.** insert
22c40 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
22c50 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a   an append..**.*
22c60 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
22c70 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  on only works fo
22c80 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20  r indices.  The 
22c90 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
22ca0 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61  uction.** for ta
22cb0 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72  bles is OP_Inser
22cc0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  t..*/.case OP_Id
22cd0 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20  xInsert: {      
22ce0 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
22cf0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
22d00 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
22d10 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63  .  int nKey;.  c
22d20 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b  onst char *zKey;
22d30 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
22d40 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22d50 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
22d60 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22d70 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22d80 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
22d90 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
22da0 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
22db0 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
22dc0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73  M_Blob );.  pCrs
22dd0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
22de0 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
22df0 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61  rsr!=0) ){.    a
22e00 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
22e10 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  le==0 );.    rc 
22e20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
22e30 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  2);.    if( rc==
22e40 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
22e50 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     nKey = pIn2->
22e60 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20  n;.      zKey = 
22e70 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72  pIn2->z;.      r
22e80 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22e90 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b  Insert(pCrsr, zK
22ea0 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c  ey, nKey, "", 0,
22eb0 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20   0, pOp->p3, .  
22ec0 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70          ((pOp->p
22ed0 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
22ee0 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
22ef0 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a  seekResult : 0).
22f00 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 61        );.      a
22f10 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
22f20 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
22f30 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53        pC->cacheS
22f40 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
22f50 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ALE;.    }.  }. 
22f60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
22f70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20  code: IdxDelete 
22f80 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
22f90 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
22fa0 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
22fb0 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
22fc0 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
22fd0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
22fe0 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
22ff0 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
23000 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
23010 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
23020 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
23030 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
23040 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
23050 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
23060 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
23070 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
23080 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
23090 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
230a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
230b0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
230c0 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
230d0 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
230e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
230f0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
23100 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
23110 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
23120 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
23130 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
23140 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c  Cursor;.  if( AL
23150 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29  WAYS(pCrsr!=0) )
23160 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  {.    r.pKeyInfo
23170 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
23180 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
23190 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20  (u16)pOp->p3;.  
231a0 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20    r.flags = 0;. 
231b0 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65     r.aMem = &aMe
231c0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64  m[pOp->p2];.#ifd
231d0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
231e0 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72      { int i; for
231f0 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
23200 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
23210 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
23220 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
23230 66 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  f.    rc = sqlit
23240 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
23250 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c  acked(pCrsr, &r,
23260 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
23270 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
23280 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b  _OK && res==0 ){
23290 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
232a0 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
232b0 43 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  Crsr);.    }.   
232c0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
232d0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
232e0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
232f0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
23300 41 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ALE;.  }.  break
23310 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
23320 49 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a  IdxRowid P1 P2 *
23330 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
23340 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
23350 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
23360 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
23370 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
23380 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
23390 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
233a0 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
233b0 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
233c0 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
233d0 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
233e0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
233f0 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
23400 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
23410 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
23420 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
23430 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
23440 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20  OP_IdxRowid: {  
23450 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
23460 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
23470 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
23480 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  rsr;.  VdbeCurso
23490 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77  r *pC;.  i64 row
234a0 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  id;..  assert( p
234b0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
234c0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
234d0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
234e0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
234f0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23500 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
23510 75 72 73 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 66  ursor;.  pOut->f
23520 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
23530 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
23540 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72  rsr!=0) ){.    r
23550 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
23560 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
23570 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 72  .    if( NEVER(r
23580 63 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  c) ) goto abort_
23590 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
235a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
235b0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
235c0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
235d0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
235e0 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 6e 75  .    if( !pC->nu
235f0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 72  llRow ){.      r
23600 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
23610 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73  dxRowid(db, pCrs
23620 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  r, &rowid);.    
23630 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
23640 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
23650 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
23660 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
23670 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20        pOut->u.i 
23680 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70  = rowid;.      p
23690 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
236a0 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _Int;.    }.  }.
236b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
236c0 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20  pcode: IdxGE P1 
236d0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
236e0 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
236f0 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
23700 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
23710 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
23720 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
23730 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20  mits the ROWID. 
23740 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
23750 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20  y value against 
23760 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68  the index .** th
23770 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
23780 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
23790 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57  ignoring the ROW
237a0 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
237b0 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
237c0 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
237d0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
237e0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
237f0 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
23800 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
23810 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
23820 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
23830 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
23840 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
23850 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20  n-zero then the 
23860 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63  key value is inc
23870 72 65 61 73 65 64 20 62 79 20 61 6e 20 65 70 73  reased by an eps
23880 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72 20 74  ilon .** prior t
23890 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
238a0 2e 20 20 54 68 69 73 20 6d 61 6b 65 20 74 68 65  .  This make the
238b0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b   opcode work lik
238c0 65 20 49 64 78 47 54 20 65 78 63 65 70 74 0a 2a  e IdxGT except.*
238d0 2a 20 74 68 61 74 20 69 66 20 74 68 65 20 6b 65  * that if the ke
238e0 79 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  y from register 
238f0 50 33 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  P3 is a prefix o
23900 66 20 74 68 65 20 6b 65 79 20 69 6e 20 74 68 65  f the key in the
23910 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 20   cursor,.** the 
23920 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 20  result is false 
23930 77 68 65 72 65 61 73 20 69 74 20 77 6f 75 6c 64  whereas it would
23940 20 62 65 20 74 72 75 65 20 77 69 74 68 20 49 64   be true with Id
23950 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  xGT..*/./* Opcod
23960 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20 50  e: IdxLT P1 P2 P
23970 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
23980 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
23990 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
239a0 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
239b0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
239c0 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
239d0 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d   the ROWID.  Com
239e0 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
239f0 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
23a00 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
23a10 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
23a20 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
23a30 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f  ring the ROWID o
23a40 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
23a50 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
23a60 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
23a70 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
23a80 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
23a90 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72   to P2..** Other
23aa0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
23ab0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
23ac0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
23ad0 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65   If P5 is non-ze
23ae0 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20  ro then the key 
23af0 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73  value is increas
23b00 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e  ed by an epsilon
23b10 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20 74 68   prior .** to th
23b20 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54  e comparison.  T
23b30 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20 6f 70  his makes the op
23b40 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49  code work like I
23b50 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  dxLE..*/.case OP
23b60 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20  _IdxLT:         
23b70 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
23b80 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20 20 20   OP_IdxGE: {    
23b90 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
23ba0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
23bb0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e  .  int res;.  Un
23bc0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
23bd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
23be0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
23bf0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
23c00 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
23c10 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
23c20 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
23c30 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65  sert( pC->isOrde
23c40 72 65 64 20 29 3b 0a 20 20 69 66 28 20 41 4c 57  red );.  if( ALW
23c50 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21  AYS(pC->pCursor!
23c60 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  =0) ){.    asser
23c70 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
23c80 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
23c90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
23ca0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
23cb0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
23cc0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
23cd0 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 72 2e 70  INT32 );.    r.p
23ce0 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
23cf0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
23d00 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
23d10 3e 70 34 2e 69 3b 0a 20 20 20 20 69 66 28 20 70  >p4.i;.    if( p
23d20 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
23d30 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
23d40 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55 4e 50  ED_INCRKEY | UNP
23d50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57  ACKED_IGNORE_ROW
23d60 49 44 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ID;.    }else{. 
23d70 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
23d80 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52  NPACKED_IGNORE_R
23d90 4f 57 49 44 3b 0a 20 20 20 20 7d 0a 20 20 20 20  OWID;.    }.    
23da0 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
23db0 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
23dc0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
23dd0 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
23de0 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
23df0 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
23e00 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
23e10 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
23e20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
23e30 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65  dbeIdxKeyCompare
23e40 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a  (pC, &r, &res);.
23e50 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
23e60 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 7b  ode==OP_IdxLT ){
23e70 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d 72 65  .      res = -re
23e80 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  s;.    }else{.  
23e90 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
23ea0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
23eb0 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73 2b 2b  E );.      res++
23ec0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
23ed0 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 70  res>0 ){.      p
23ee0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20  c = pOp->p2 - 1 
23ef0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
23f00 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23f10 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32  e: Destroy P1 P2
23f20 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65   P3 * *.**.** De
23f30 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64  lete an entire d
23f40 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
23f50 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
23f60 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61  t page in the da
23f70 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69  tabase.** file i
23f80 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a  s given by P1..*
23f90 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62  *.** The table b
23fa0 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69  eing destroyed i
23fb0 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
23fc0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
23fd0 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d  3==0.  If.** P3=
23fe0 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
23ff0 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
24000 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
24010 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
24020 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
24030 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
24040 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
24050 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
24060 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55  BLE..**.** If AU
24070 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62  TOVACUUM is enab
24080 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70  led then it is p
24090 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
240a0 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a  ther root page.*
240b0 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64  * might be moved
240c0 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20   into the newly 
240d0 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67  deleted root pag
240e0 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  e in order to ke
240f0 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70  ep all.** root p
24100 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20  ages contiguous 
24110 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
24120 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
24130 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a  .  The former.**
24140 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
24150 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76  ot page that mov
24160 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62  ed - its value b
24170 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f  efore the move o
24180 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20  ccurred -.** is 
24190 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
241a0 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61  er P2.  If no pa
241b0 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20  ge .** movement 
241c0 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65  was required (be
241d0 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
241e0 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61  being dropped wa
241f0 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68  s already .** th
24200 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68  e last one in th
24210 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e  e database) then
24220 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65   a zero is store
24230 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
24240 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  ..** If AUTOVACU
24250 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74  UM is disabled t
24260 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74  hen a zero is st
24270 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
24280 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
24290 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61  lso: Clear.*/.ca
242a0 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b  se OP_Destroy: {
242b0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
242c0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
242d0 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69   iMoved;.  int i
242e0 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56 64  Cnt;.  Vdbe *pVd
242f0 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 23  be;.  int iDb;.#
24300 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
24310 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
24320 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f    iCnt = 0;.  fo
24330 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62  r(pVdbe=db->pVdb
24340 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62 65 20  e; pVdbe; pVdbe 
24350 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b  = pVdbe->pNext){
24360 0a 20 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e  .    if( pVdbe->
24370 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49  magic==VDBE_MAGI
24380 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e  C_RUN && pVdbe->
24390 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26  inVtabMethod<2 &
243a0 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 29  & pVdbe->pc>=0 )
243b0 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a  {.      iCnt++;.
243c0 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a      }.  }.#else.
243d0 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61 63 74    iCnt = db->act
243e0 69 76 65 56 64 62 65 43 6e 74 3b 0a 23 65 6e 64  iveVdbeCnt;.#end
243f0 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  if.  pOut->flags
24400 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69   = MEM_Null;.  i
24410 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20  f( iCnt>1 ){.   
24420 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
24430 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f  KED;.    p->erro
24440 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f  rAction = OE_Abo
24450 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rt;.  }else{.   
24460 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
24470 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6e 74      assert( iCnt
24480 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==1 );.    asser
24490 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
244a0 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20   & (1<<iDb))!=0 
244b0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
244c0 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c  te3BtreeDropTabl
244d0 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  e(db->aDb[iDb].p
244e0 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d  Bt, pOp->p1, &iM
244f0 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d  oved);.    pOut-
24500 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
24510 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
24520 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65  = iMoved;.#ifnde
24530 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
24540 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28  TOVACUUM.    if(
24550 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
24560 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20  & iMoved!=0 ){. 
24570 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74       sqlite3Root
24580 50 61 67 65 4d 6f 76 65 64 28 26 64 62 2d 3e 61  PageMoved(&db->a
24590 44 62 5b 69 44 62 5d 2c 20 69 4d 6f 76 65 64 2c  Db[iDb], iMoved,
245a0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20   pOp->p1);.     
245b0 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
245c0 75 6c 74 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 23  ult = 1;.    }.#
245d0 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
245e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
245f0 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a   Clear P1 P2 P3.
24600 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
24610 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
24620 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
24630 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
24640 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74  oot page.** in t
24650 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
24660 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
24670 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65    But, unlike De
24680 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a  stroy, do not.**
24690 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c   remove the tabl
246a0 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20  e or index from 
246b0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
246c0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  e..**.** The tab
246d0 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69  le being clear i
246e0 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
246f0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
24700 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d  2==0.  If.** P2=
24710 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
24720 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
24730 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
24740 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
24750 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
24760 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
24770 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
24780 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
24790 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  BLE..**.** If th
247a0 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P3 value is no
247b0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
247c0 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20   table referred 
247d0 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a  to must be an.**
247e0 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61   intkey table (a
247f0 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74  n SQL table, not
24800 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74   an index). In t
24810 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77  his case the row
24820 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e   change .** coun
24830 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
24840 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
24850 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
24860 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
24870 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20  d. .** If P3 is 
24880 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
24890 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  o, then the valu
248a0 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  e stored in regi
248b0 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c  ster P3 is.** al
248c0 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  so incremented b
248d0 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
248e0 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
248f0 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
24900 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
24910 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65   Destroy.*/.case
24920 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69   OP_Clear: {.  i
24930 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20  nt nChange;. .  
24940 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61  nChange = 0;.  a
24950 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
24960 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
24970 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20  p2))!=0 );.  rc 
24980 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
24990 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
249a0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
249b0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
249c0 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
249d0 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
249e0 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
249f0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
24a00 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
24a10 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
24a20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
24a30 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
24a40 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
24a50 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
24a60 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
24a70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b  3]);.      aMem[
24a80 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20  pOp->p3].u.i += 
24a90 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20  nChange;.    }. 
24aa0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
24ab0 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
24ac0 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20  Table P1 P2 * * 
24ad0 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  *.**.** Allocate
24ae0 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20   a new table in 
24af0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
24b00 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
24b10 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
24b20 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
24b30 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
24b40 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
24b50 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
24b60 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
24b70 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
24b80 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
24b90 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
24ba0 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  er P2.**.** The 
24bb0 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
24bc0 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61  en a table and a
24bd0 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a  n index is this:
24be0 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a    A table must.*
24bf0 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20  * have a 4-byte 
24c00 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20  integer key and 
24c10 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61  can have arbitra
24c20 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64  ry data.  An ind
24c30 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62  ex.** has an arb
24c40 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e  itrary key but n
24c50 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65  o data..**.** Se
24c60 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e  e also: CreateIn
24c70 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  dex.*/./* Opcode
24c80 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31  : CreateIndex P1
24c90 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
24ca0 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69  Allocate a new i
24cb0 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e  ndex in the main
24cc0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
24cd0 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
24ce0 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
24cf0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
24d00 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
24d10 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
24d20 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
24d30 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
24d40 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
24d50 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
24d60 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  * register P2..*
24d70 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e  *.** See documen
24d80 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65  tation on OP_Cre
24d90 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64  ateTable for add
24da0 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
24db0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
24dc0 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20  CreateIndex:    
24dd0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
24de0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61  prerelease */.ca
24df0 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  se OP_CreateTabl
24e00 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  e: {          /*
24e10 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
24e20 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a   */.  int pgno;.
24e30 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44    int flags;.  D
24e40 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20  b *pDb;..  pgno 
24e50 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
24e60 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24e70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
24e80 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
24e90 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
24ea0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
24eb0 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
24ec0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24ed0 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
24ee0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
24ef0 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61  ode==OP_CreateTa
24f00 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c  ble ){.    /* fl
24f10 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
24f20 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73  EY; */.    flags
24f30 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b   = BTREE_INTKEY;
24f40 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c  .  }else{.    fl
24f50 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42  ags = BTREE_BLOB
24f60 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  KEY;.  }.  rc = 
24f70 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
24f80 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74  teTable(pDb->pBt
24f90 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b  , &pgno, flags);
24fa0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
24fb0 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  gno;.  break;.}.
24fc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73  ./* Opcode: Pars
24fd0 65 53 63 68 65 6d 61 20 50 31 20 50 32 20 2a 20  eSchema P1 P2 * 
24fe0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20  P4 *.**.** Read 
24ff0 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e  and parse all en
25000 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53  tries from the S
25010 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62  QLITE_MASTER tab
25020 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  le of database P
25030 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20  1.** that match 
25040 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
25050 20 50 34 2e 20 20 50 32 20 69 73 20 74 68 65 20   P4.  P2 is the 
25060 22 66 6f 72 63 65 22 20 66 6c 61 67 2e 20 20 20  "force" flag.   
25070 41 6c 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65  Always do.** the
25080 20 70 61 72 73 69 6e 67 20 69 66 20 50 32 20 69   parsing if P2 i
25090 73 20 74 72 75 65 2e 20 20 49 66 20 50 32 20 69  s true.  If P2 i
250a0 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 74 68  s false, then th
250b0 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 0a  is routine is a.
250c0 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20  ** no-op if the 
250d0 73 63 68 65 6d 61 20 69 73 20 6e 6f 74 20 63 75  schema is not cu
250e0 72 72 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20  rrently loaded. 
250f0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
25100 20 69 66 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c   if P2.** is fal
25110 73 65 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  se, the SQLITE_M
25120 41 53 54 45 52 20 74 61 62 6c 65 20 69 73 20 6f  ASTER table is o
25130 6e 6c 79 20 70 61 72 73 65 64 20 69 66 20 74 68  nly parsed if th
25140 65 20 72 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a  e rest of the.**
25150 20 73 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61   schema is alrea
25160 64 79 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74  dy loaded into t
25170 68 65 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e  he symbol table.
25180 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
25190 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70  de invokes the p
251a0 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20  arser to create 
251b0 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  a new virtual ma
251c0 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72  chine,.** then r
251d0 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74  uns the new virt
251e0 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74  ual machine.  It
251f0 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e   is thus a re-en
25200 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f  trant opcode..*/
25210 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63  .case OP_ParseSc
25220 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44  hema: {.  int iD
25230 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b;.  const char 
25240 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72  *zMaster;.  char
25250 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61   *zSql;.  InitDa
25260 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20  ta initData;..  
25270 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
25280 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
25290 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
252a0 3b 0a 0a 20 20 2f 2a 20 49 66 20 70 4f 70 2d 3e  ;..  /* If pOp->
252b0 70 32 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68  p2 is 0, then th
252c0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 62 65 69  is opcode is bei
252d0 6e 67 20 65 78 65 63 75 74 65 64 20 74 6f 20 72  ng executed to r
252e0 65 61 64 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c  ead a.  ** singl
252f0 65 20 72 6f 77 2c 20 66 6f 72 20 65 78 61 6d 70  e row, for examp
25300 6c 65 20 74 68 65 20 72 6f 77 20 63 6f 72 72 65  le the row corre
25310 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 6e 65  sponding to a ne
25320 77 20 69 6e 64 65 78 0a 20 20 2a 2a 20 63 72 65  w index.  ** cre
25330 61 74 65 64 20 62 79 20 74 68 69 73 20 56 44 42  ated by this VDB
25340 45 2c 20 66 72 6f 6d 20 74 68 65 20 73 71 6c 69  E, from the sqli
25350 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e  te_master table.
25360 20 49 74 20 6f 6e 6c 79 0a 20 20 2a 2a 20 64 6f   It only.  ** do
25370 65 73 20 74 68 69 73 20 69 66 20 74 68 65 20 63  es this if the c
25380 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 69 6e 2d  orresponding in-
25390 6d 65 6d 6f 72 79 20 73 63 68 65 6d 61 20 69 73  memory schema is
253a0 20 63 75 72 72 65 6e 74 6c 79 0a 20 20 2a 2a 20   currently.  ** 
253b0 6c 6f 61 64 65 64 2e 20 4f 74 68 65 72 77 69 73  loaded. Otherwis
253c0 65 2c 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78  e, the new index
253d0 20 64 65 66 69 6e 69 74 69 6f 6e 20 63 61 6e 20   definition can 
253e0 62 65 20 6c 6f 61 64 65 64 20 61 6c 6f 6e 67 0a  be loaded along.
253f0 20 20 2a 2a 20 77 69 74 68 20 74 68 65 20 72 65    ** with the re
25400 73 74 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  st of the schema
25410 20 77 68 65 6e 20 69 74 20 69 73 20 72 65 71 75   when it is requ
25420 69 72 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ired..  **.  ** 
25430 41 6c 74 68 6f 75 67 68 20 74 68 65 20 6d 75 74  Although the mut
25440 65 78 20 6f 6e 20 74 68 65 20 42 74 53 68 61 72  ex on the BtShar
25450 65 64 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  ed object that c
25460 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 20 20  orresponds to.  
25470 2a 2a 20 64 61 74 61 62 61 73 65 20 69 44 62 20  ** database iDb 
25480 28 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f  (the database co
25490 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73 71 6c  ntaining the sql
254a0 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
254b0 0a 20 20 2a 2a 20 72 65 61 64 20 62 79 20 74 68  .  ** read by th
254c0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 29 20  is instruction) 
254d0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 68 65 6c  is currently hel
254e0 64 2c 20 69 74 20 69 73 20 6e 65 63 65 73 73 61  d, it is necessa
254f0 72 79 20 74 6f 0a 20 20 2a 2a 20 6f 62 74 61 69  ry to.  ** obtai
25500 6e 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e  n the mutexes on
25510 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
25520 74 61 62 61 73 65 73 20 62 65 66 6f 72 65 20 63  tabases before c
25530 68 65 63 6b 69 6e 67 20 69 66 0a 20 20 2a 2a 20  hecking if.  ** 
25540 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20 69 44  the schema of iD
25550 62 20 69 73 20 6c 6f 61 64 65 64 2e 20 54 68 69  b is loaded. Thi
25560 73 20 69 73 20 62 65 63 61 75 73 65 2c 20 61 74  s is because, at
25570 20 74 68 65 20 73 74 61 72 74 20 6f 66 0a 20 20   the start of.  
25580 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65  ** the sqlite3_e
25590 78 65 63 28 29 20 63 61 6c 6c 20 62 65 6c 6f 77  xec() call below
255a0 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 69 6e  , SQLite will in
255b0 76 6f 6b 65 20 0a 20 20 2a 2a 20 73 71 6c 69 74  voke .  ** sqlit
255c0 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28  e3BtreeEnterAll(
255d0 29 2e 20 49 66 20 61 6c 6c 20 6d 75 74 65 78 65  ). If all mutexe
255e0 73 20 61 72 65 20 6e 6f 74 20 61 6c 72 65 61 64  s are not alread
255f0 79 20 68 65 6c 64 2c 20 74 68 65 0a 20 20 2a 2a  y held, the.  **
25600 20 69 44 62 20 6d 75 74 65 78 20 6d 61 79 20 62   iDb mutex may b
25610 65 20 74 65 6d 70 6f 72 61 72 69 6c 79 20 72 65  e temporarily re
25620 6c 65 61 73 65 64 20 74 6f 20 61 76 6f 69 64 20  leased to avoid 
25630 64 65 61 64 6c 6f 63 6b 2e 20 49 66 20 0a 20 20  deadlock. If .  
25640 2a 2a 20 74 68 69 73 20 68 61 70 70 65 6e 73 2c  ** this happens,
25650 20 74 68 65 6e 20 73 6f 6d 65 20 6f 74 68 65 72   then some other
25660 20 74 68 72 65 61 64 20 6d 61 79 20 64 65 6c 65   thread may dele
25670 74 65 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  te the in-memory
25680 20 0a 20 20 2a 2a 20 73 63 68 65 6d 61 20 6f 66   .  ** schema of
25690 20 64 61 74 61 62 61 73 65 20 69 44 62 20 62 65   database iDb be
256a0 66 6f 72 65 20 74 68 65 20 53 51 4c 20 73 74 61  fore the SQL sta
256b0 74 65 6d 65 6e 74 20 72 75 6e 73 2e 20 54 68 65  tement runs. The
256c0 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20 77 69 6c   schema.  ** wil
256d0 6c 20 6e 6f 74 20 62 65 20 72 65 6c 6f 61 64 65  l not be reloade
256e0 64 20 62 65 63 75 61 73 65 20 74 68 65 20 64 62  d becuase the db
256f0 2d 3e 69 6e 69 74 2e 62 75 73 79 20 66 6c 61 67  ->init.busy flag
25700 20 69 73 20 73 65 74 2e 20 54 68 69 73 0a 20 20   is set. This.  
25710 2a 2a 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e  ** can result in
25720 20 61 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c   a "no such tabl
25730 65 3a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  e: sqlite_master
25740 22 20 6f 72 20 22 6d 61 6c 66 6f 72 6d 65 64 0a  " or "malformed.
25750 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63    ** database sc
25760 68 65 6d 61 22 20 65 72 72 6f 72 20 62 65 69 6e  hema" error bein
25770 67 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  g returned to th
25780 65 20 75 73 65 72 2e 0a 20 20 2a 2f 0a 20 20 61  e user..  */.  a
25790 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
257a0 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62  reeHoldsMutex(db
257b0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20  ->aDb[iDb].pBt) 
257c0 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  );.  sqlite3Btre
257d0 65 45 6e 74 65 72 41 6c 6c 28 64 62 29 3b 0a 20  eEnterAll(db);. 
257e0 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 7c 7c 20   if( pOp->p2 || 
257f0 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62  DbHasProperty(db
25800 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61  , iDb, DB_Schema
25810 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20 20 20 7a  Loaded) ){.    z
25820 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f  Master = SCHEMA_
25830 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20  TABLE(iDb);.    
25840 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62  initData.db = db
25850 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69  ;.    initData.i
25860 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
25870 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72    initData.pzErr
25880 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73  Msg = &p->zErrMs
25890 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  g;.    zSql = sq
258a0 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
258b0 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  .       "SELECT 
258c0 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
258d0 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73  sql FROM '%q'.%s
258e0 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20   WHERE %s ORDER 
258f0 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20  BY rowid",.     
25900 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a    db->aDb[iDb].z
25910 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70  Name, zMaster, p
25920 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69  Op->p4.z);.    i
25930 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20  f( zSql==0 ){.  
25940 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
25950 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65  NOMEM;.    }else
25960 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
25970 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30  db->init.busy==0
25980 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e   );.      db->in
25990 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20  it.busy = 1;.   
259a0 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d     initData.rc =
259b0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
259c0 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d    assert( !db->m
259d0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
259e0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
259f0 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c  3_exec(db, zSql,
25a00 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
25a10 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c  back, &initData,
25a20 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
25a30 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72  c==SQLITE_OK ) r
25a40 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b  c = initData.rc;
25a50 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
25a60 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a  Free(db, zSql);.
25a70 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
25a80 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  usy = 0;.    }. 
25a90 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65   }.  sqlite3Btre
25aa0 65 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b 0a 20  eLeaveAll(db);. 
25ab0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
25ac0 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74  NOMEM ){.    got
25ad0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
25ae0 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20  break;  .}..#if 
25af0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
25b00 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a  OMIT_ANALYZE)./*
25b10 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61   Opcode: LoadAna
25b20 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a  lysis P1 * * * *
25b30 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20  .**.** Read the 
25b40 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
25b50 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  le for database 
25b60 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20  P1 and load the 
25b70 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68  content.** of th
25b80 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68  at table into th
25b90 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78  e internal index
25ba0 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68   hash table.  Th
25bb0 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a  is will cause.**
25bc0 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f   the analysis to
25bd0 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72   be used when pr
25be0 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73  eparing all subs
25bf0 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a  equent queries..
25c00 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41  */.case OP_LoadA
25c10 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73  nalysis: {.  ass
25c20 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
25c30 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
25c40 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Db );.  rc = sql
25c50 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
25c60 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  (db, pOp->p1);. 
25c70 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64   break;  .}.#end
25c80 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
25c90 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
25ca0 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ZE) */../* Opcod
25cb0 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20  e: DropTable P1 
25cc0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
25cd0 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
25ce0 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
25cf0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
25d00 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
25d10 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  the table named 
25d20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
25d30 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
25d40 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  ed after a table
25d50 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
25d60 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
25d70 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
25d80 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
25d90 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
25da0 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
25db0 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
25dc0 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62  .case OP_DropTab
25dd0 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  le: {.  sqlite3U
25de0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
25df0 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ble(db, pOp->p1,
25e00 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
25e10 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
25e20 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31  de: DropIndex P1
25e30 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
25e40 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
25e50 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
25e60 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
25e70 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
25e80 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64   the index named
25e90 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
25ea0 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
25eb0 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64  led after an ind
25ec0 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  ex.** is dropped
25ed0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
25ee0 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
25ef0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
25f00 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
25f10 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
25f20 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
25f30 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49  */.case OP_DropI
25f40 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ndex: {.  sqlite
25f50 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
25f60 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70  Index(db, pOp->p
25f70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
25f80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
25f90 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65  code: DropTrigge
25fa0 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  r P1 * * P4 *.**
25fb0 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
25fc0 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
25fd0 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
25fe0 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
25ff0 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72  e.** the trigger
26000 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
26010 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
26020 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
26030 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20  a trigger.** is 
26040 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
26050 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
26060 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
26070 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
26080 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
26090 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
260a0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
260b0 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b  P_DropTrigger: {
260c0 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
260d0 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
260e0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
260f0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
26100 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
26110 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
26120 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70  RITY_CHECK./* Op
26130 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43  code: IntegrityC
26140 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  k P1 P2 P3 * P5.
26150 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c  **.** Do an anal
26160 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72  ysis of the curr
26170 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
26180 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a  ase.  Store in.*
26190 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68  * register P1 th
261a0 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72  e text of an err
261b0 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72  or message descr
261c0 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65  ibing any proble
261d0 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f  ms..** If no pro
261e0 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c  blems are found,
261f0 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
26200 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
26210 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
26220 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
26230 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
26240 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72  of allowed error
26250 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65  s..** At most re
26260 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c  g(P3) errors wil
26270 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a  l be reported..*
26280 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
26290 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73  , the analysis s
262a0 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20  tops as soon as 
262b0 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61  reg(P1) errors a
262c0 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65  re .** seen.  Re
262d0 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64  g(P1) is updated
262e0 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
262f0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
26300 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ning..**.** The 
26310 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
26320 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
26330 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
26340 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73  are integer.** s
26350 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31 29  tored in reg(P1)
26360 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67  , reg(P1+1), reg
26370 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68  (P1+2), ....  Th
26380 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c 65  ere are P2 table
26390 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a  s.** total..**.*
263a0 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a  * If P5 is not z
263b0 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69  ero, the check i
263c0 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75  s done on the au
263d0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
263e0 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68  .** file, not th
263f0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
26400 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  file..**.** This
26410 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
26420 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
26430 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
26440 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65   pragma..*/.case
26450 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a   OP_IntegrityCk:
26460 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20   {.  int nRoot; 
26470 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
26480 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63  f tables to chec
26490 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72  k.  (Number of r
264a0 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20  oot pages.) */. 
264b0 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20   int *aRoot;    
264c0 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f   /* Array of roo
264d0 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f  tpage numbers fo
264e0 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63  r tables to be c
264f0 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20  hecked */.  int 
26500 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  j;          /* L
26510 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
26520 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
26530 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
26540 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f  rors reported */
26550 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  .  char *z;     
26560 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
26570 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a  e error report *
26580 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20  /.  Mem *pnErr; 
26590 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
265a0 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66  keeping track of
265b0 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
265c0 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74 20  g */.  .  nRoot 
265d0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
265e0 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a  ert( nRoot>0 );.
265f0 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65    aRoot = sqlite
26600 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
26610 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52   sizeof(int)*(nR
26620 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20  oot+1) );.  if( 
26630 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20  aRoot==0 ) goto 
26640 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74  no_mem;.  assert
26650 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
26660 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
26670 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d  );.  pnErr = &aM
26680 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
26690 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
266a0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
266b0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
266c0 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20  (pnErr->flags & 
266d0 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
266e0 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  b))==0 );.  pIn1
266f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
26700 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  ];.  for(j=0; j<
26710 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20  nRoot; j++){.   
26720 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74   aRoot[j] = (int
26730 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  )sqlite3VdbeIntV
26740 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a  alue(&pIn1[j]);.
26750 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d    }.  aRoot[j] =
26760 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
26770 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p5<db->nDb );
26780 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
26790 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
267a0 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20  Op->p5))!=0 );. 
267b0 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
267c0 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
267d0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
267e0 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f  .pBt, aRoot, nRo
267f0 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
26800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26810 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
26820 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
26830 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
26840 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72  , aRoot);.  pnEr
26850 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a  r->u.i -= nErr;.
26860 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
26870 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
26880 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
26890 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
268a0 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
268b0 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
268c0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
268d0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
268e0 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
268f0 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
26900 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
26910 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
26920 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
26930 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
26940 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
26950 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
26960 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
26970 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
26980 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
26990 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
269a0 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
269b0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
269c0 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72  sert the integer
269d0 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72   value held by r
269e0 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20  egister P2 into 
269f0 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a  a boolean index.
26a00 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ** held in regis
26a10 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ter P1..**.** An
26a20 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73   assertion fails
26a30 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e   if P2 is not an
26a40 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
26a50 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20  e OP_RowSetAdd: 
26a60 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20  {       /* in1, 
26a70 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in2 */.  pIn1 = 
26a80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
26a90 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
26aa0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
26ab0 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
26ac0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
26ad0 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
26ae0 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
26af0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
26b00 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
26b10 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
26b20 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
26b30 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
26b40 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
26b50 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77    }.  sqlite3Row
26b60 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
26b70 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d  u.pRowSet, pIn2-
26b80 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  >u.i);.  break;.
26b90 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
26ba0 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50  wSetRead P1 P2 P
26bb0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72  3 * *.**.** Extr
26bc0 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
26bd0 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
26be0 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
26bf0 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
26c00 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
26c10 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
26c20 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
26c30 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
26c40 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
26c50 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
26c60 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
26c70 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
26c80 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
26c90 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
26ca0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
26cb0 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f  al;.  CHECK_FOR_
26cc0 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 49 6e  INTERRUPT;.  pIn
26cd0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
26ce0 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
26cf0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
26d00 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73  Set)==0 .   || s
26d10 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
26d20 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
26d30 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a  , &val)==0.  ){.
26d40 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65      /* The boole
26d50 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  an index is empt
26d60 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  y */.    sqlite3
26d70 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
26d80 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70  In1);.    pc = p
26d90 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
26da0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
26db0 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
26dc0 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
26dd0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
26de0 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
26df0 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29  m[pOp->p3], val)
26e00 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
26e10 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
26e20 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33  SetTest P1 P2 P3
26e30 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P4.**.** Regist
26e40 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64  er P3 is assumed
26e50 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69   to hold a 64-bi
26e60 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
26e70 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a   If register P1.
26e80 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f  ** contains a Ro
26e90 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  wSet object and 
26ea0 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65  that RowSet obje
26eb0 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74  ct contains.** t
26ec0 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  he value held in
26ed0 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67   P3, jump to reg
26ee0 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77  ister P2. Otherw
26ef0 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a  ise, insert the.
26f00 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33  ** integer in P3
26f10 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74   into the RowSet
26f20 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e   and continue on
26f30 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20   to the.** next 
26f40 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
26f50 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
26f60 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72  is optimized for
26f70 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20   the case where 
26f80 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a  successive sets.
26f90 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20  ** of integers, 
26fa0 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63  where each set c
26fb0 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69  ontains no dupli
26fc0 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a  cates. Each set.
26fd0 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20  ** of values is 
26fe0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
26ff0 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e  unique P4 value.
27000 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a   The first set.*
27010 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d  * must have P4==
27020 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74  0, the final set
27030 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74   P4=-1.  P4 must
27040 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72   be either -1 or
27050 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  .** non-negative
27060 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74  .  For non-negat
27070 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34  ive values of P4
27080 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20   only the lower 
27090 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69  4.** bits are si
270a0 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a  gnificant..**.**
270b0 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74   This allows opt
270c0 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20  imizations: (a) 
270d0 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65  when P4==0 there
270e0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74   is no need to t
270f0 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65  est.** the rowse
27100 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c  t object for P3,
27110 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e   as it is guaran
27120 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74  teed not to cont
27130 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77  ain it,.** (b) w
27140 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65  hen P4==-1 there
27150 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69   is no need to i
27160 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c  nsert the value,
27170 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e   as it will.** n
27180 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66  ever be tested f
27190 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e  or, and (c) when
271a0 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73   a value that is
271b0 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69   part of set X i
271c0 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74  s.** inserted, t
271d0 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
271e0 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65  to search to see
271f0 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c   if the same val
27200 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  ue was.** previo
27210 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73  usly inserted as
27220 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28   part of set X (
27230 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70  only if it was p
27240 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73  reviously.** ins
27250 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
27260 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29   some other set)
27270 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
27280 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20  SetTest: {      
27290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
272a0 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  * jump, in1, in3
272b0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a   */.  int iSet;.
272c0 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20    int exists;.. 
272d0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
272e0 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
272f0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
27300 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70  .  iSet = pOp->p
27310 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  4.i;.  assert( p
27320 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In3->flags&MEM_I
27330 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  nt );..  /* If t
27340 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67  here is anything
27350 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f   other than a ro
27360 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d  wset object in m
27370 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20  emory cell P1,. 
27380 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f   ** delete it no
27390 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  w and initialize
273a0 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74   P1 with an empt
273b0 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20  y rowset.  */.  
273c0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
273d0 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
273e0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
273f0 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
27400 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20  (pIn1);.    if( 
27410 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
27420 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20  EM_RowSet)==0 ) 
27430 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
27440 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
27450 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
27460 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  2 );.  assert( i
27470 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e  Set==-1 || iSet>
27480 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74  =0 );.  if( iSet
27490 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d   ){.    exists =
274a0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
274b0 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  st(pIn1->u.pRowS
274c0 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  et, .           
274d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274e0 20 20 20 20 28 75 38 29 28 69 53 65 74 3e 3d 30      (u8)(iSet>=0
274f0 20 3f 20 69 53 65 74 20 26 20 30 78 66 20 3a 20   ? iSet & 0xf : 
27500 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20 20 20  0xff),.         
27510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27520 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29        pIn3->u.i)
27530 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73  ;.    if( exists
27540 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
27550 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
27560 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
27570 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30   }.  if( iSet>=0
27580 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
27590 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
275a0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
275b0 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62  3->u.i);.  }.  b
275c0 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
275d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
275e0 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65  IGGER../* Opcode
275f0 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20  : Program P1 P2 
27600 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78  P3 P4 *.**.** Ex
27610 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65  ecute the trigge
27620 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64  r program passed
27630 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f   as P4 (type P4_
27640 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a  SUBPROGRAM). .**
27650 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  .** P1 contains 
27660 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
27670 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
27680 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
27690 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a   first memory .*
276a0 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72  * cell in an arr
276b0 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  ay of values use
276c0 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74  d as arguments t
276d0 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  o the sub-progra
276e0 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69  m. P2 .** contai
276f0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74  ns the address t
27700 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65  o jump to if the
27710 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72   sub-program thr
27720 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a  ows an IGNORE .*
27730 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e  * exception usin
27740 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75  g the RAISE() fu
27750 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72  nction. Register
27760 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
27770 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20   address .** of 
27780 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  a memory cell in
27790 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e   this (the paren
277a0 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73  t) VM that is us
277b0 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ed to allocate t
277c0 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65  he .** memory re
277d0 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75  quired by the su
277e0 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d  b-vdbe at runtim
277f0 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
27800 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
27810 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  VM containing th
27820 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
27830 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  m..*/.case OP_Pr
27840 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  ogram: {        
27850 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
27860 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
27870 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
27880 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  f memory registe
27890 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  rs for sub-progr
278a0 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  am */.  int nByt
278b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
278c0 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74  /* Bytes of runt
278d0 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72  ime space requir
278e0 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  ed for sub-progr
278f0 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74  am */.  Mem *pRt
27900 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
27910 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61  /* Register to a
27920 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20  llocate runtime 
27930 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a  space */.  Mem *
27940 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
27950 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74     /* Used to it
27960 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65  erate through me
27970 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20  mory cells */.  
27980 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20  Mem *pEnd;      
27990 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
279a0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e  memory cell in n
279b0 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64  ew array */.  Vd
279c0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
279d0 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62        /* New vdb
279e0 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75  e frame to execu
279f0 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72  te in */.  SubPr
27a00 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
27a10 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61     /* Sub-progra
27a20 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a  m to execute */.
27a30 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20    void *t;      
27a40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
27a50 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74  en identifying t
27a60 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72  rigger */..  pPr
27a70 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e  ogram = pOp->p4.
27a80 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20  pProgram;.  pRt 
27a90 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
27aa0 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
27ab0 73 56 61 6c 69 64 28 70 52 74 29 20 29 3b 0a 20  sValid(pRt) );. 
27ac0 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
27ad0 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
27ae0 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
27af0 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
27b00 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
27b10 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
27b20 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
27b30 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
27b40 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
27b50 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
27b60 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
27b70 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
27b80 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
27b90 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
27ba0 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
27bb0 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
27bc0 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
27bd0 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
27be0 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
27bf0 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
27c00 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
27c10 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
27c20 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
27c30 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
27c40 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
27c50 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
27c60 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
27c70 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
27c80 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
27c90 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
27ca0 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
27cb0 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
27cc0 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
27cd0 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
27ce0 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
27cf0 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
27d00 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
27d10 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
27d20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
27d30 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
27d40 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
27d50 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
27d60 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
27d70 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
27d80 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
27d90 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
27da0 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
27db0 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
27dc0 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
27dd0 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
27de0 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
27df0 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
27e00 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
27e10 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
27e20 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
27e30 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
27e40 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
27e50 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
27e60 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
27e70 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
27e80 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74  >zErrMsg, db, "t
27e90 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f  oo many levels o
27ea0 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73  f trigger recurs
27eb0 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b  ion");.    break
27ec0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69  ;.  }..  /* Regi
27ed0 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64  ster pRt is used
27ee0 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65   to store the me
27ef0 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f  mory required to
27f00 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a   save the state.
27f10 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72    ** of the curr
27f20 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64  ent program, and
27f30 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
27f40 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  ired at runtime 
27f50 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20  to execute.  ** 
27f60 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
27f70 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69  ram. If this tri
27f80 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69  gger has been fi
27f90 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e  red before, then
27fa0 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c   pRt .  ** is al
27fb0 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e  ready allocated.
27fc0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d   Otherwise, it m
27fd0 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
27fe0 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  ed.  */.  if( (p
27ff0 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72  Rt->flags&MEM_Fr
28000 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  ame)==0 ){.    /
28010 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65  * SubProgram.nMe
28020 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  m is set to the 
28030 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
28040 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74   cells used by t
28050 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72  he .    ** progr
28060 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62  am stored in Sub
28070 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20  Program.aOp. As 
28080 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f  well as these, o
28090 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a  ne memory.    **
280a0 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65   cell is require
280b0 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f  d for each curso
280c0 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  r used by the pr
280d0 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c  ogram. Set local
280e0 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  .    ** variable
280f0 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72   nMem (and later
28100 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69  , VdbeFrame.nChi
28110 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76  ldMem) to this v
28120 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
28130 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d   nMem = pProgram
28140 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61  ->nMem + pProgra
28150 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79  m->nCsr;.    nBy
28160 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65  te = ROUND8(size
28170 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20  of(VdbeFrame)). 
28180 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e               + n
28190 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d  Mem * sizeof(Mem
281a0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
281b0 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
281c0 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75   * sizeof(VdbeCu
281d0 72 73 6f 72 20 2a 29 3b 0a 20 20 20 20 70 46 72  rsor *);.    pFr
281e0 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  ame = sqlite3DbM
281f0 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42  allocZero(db, nB
28200 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70  yte);.    if( !p
28210 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67  Frame ){.      g
28220 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
28230 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
28240 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29  eMemRelease(pRt)
28250 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73  ;.    pRt->flags
28260 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20   = MEM_Frame;.  
28270 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20    pRt->u.pFrame 
28280 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70  = pFrame;..    p
28290 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20  Frame->v = p;.  
282a0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
282b0 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20  Mem = nMem;.    
282c0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
282d0 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  r = pProgram->nC
282e0 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  sr;.    pFrame->
282f0 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70 46 72  pc = pc;.    pFr
28300 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61  ame->aMem = p->a
28310 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
28320 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b  >nMem = p->nMem;
28330 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43  .    pFrame->apC
28340 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20  sr = p->apCsr;. 
28350 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73     pFrame->nCurs
28360 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b  or = p->nCursor;
28370 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70  .    pFrame->aOp
28380 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70   = p->aOp;.    p
28390 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e  Frame->nOp = p->
283a0 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  nOp;.    pFrame-
283b0 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61  >token = pProgra
283c0 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20 20 20 20 70  m->token;..    p
283d0 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65  End = &VdbeFrame
283e0 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61  Mem(pFrame)[pFra
283f0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a  me->nChildMem];.
28400 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62      for(pMem=Vdb
28410 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
28420 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70  ); pMem!=pEnd; p
28430 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d  Mem++){.      pM
28440 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  em->flags = MEM_
28450 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70 4d 65 6d  Null;.      pMem
28460 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d  ->db = db;.    }
28470 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46  .  }else{.    pF
28480 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46  rame = pRt->u.pF
28490 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74  rame;.    assert
284a0 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  ( pProgram->nMem
284b0 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d  +pProgram->nCsr=
284c0 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  =pFrame->nChildM
284d0 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  em );.    assert
284e0 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  ( pProgram->nCsr
284f0 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
28500 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Csr );.    asser
28510 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70  t( pc==pFrame->p
28520 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e  c );.  }..  p->n
28530 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d  Frame++;.  pFram
28540 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e  e->pParent = p->
28550 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65  pFrame;.  pFrame
28560 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62  ->lastRowid = db
28570 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70  ->lastRowid;.  p
28580 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d  Frame->nChange =
28590 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70   p->nChange;.  p
285a0 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
285b0 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72   p->pFrame = pFr
285c0 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d  ame;.  p->aMem =
285d0 20 61 4d 65 6d 20 3d 20 26 56 64 62 65 46 72 61   aMem = &VdbeFra
285e0 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31  meMem(pFrame)[-1
285f0 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70  ];.  p->nMem = p
28600 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
28610 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d  ;.  p->nCursor =
28620 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43   (u16)pFrame->nC
28630 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70  hildCsr;.  p->ap
28640 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f  Csr = (VdbeCurso
28650 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  r **)&aMem[p->nM
28660 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20  em+1];.  p->aOp 
28670 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  = aOp = pProgram
28680 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20  ->aOp;.  p->nOp 
28690 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b  = pProgram->nOp;
286a0 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 0a 20 20 62  .  pc = -1;..  b
286b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
286c0 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20  de: Param P1 P2 
286d0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
286e0 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
286f0 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  ever present in 
28700 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c  sub-programs cal
28710 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20  led via the .** 
28720 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
28730 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76  uction. Copy a v
28740 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73  alue currently s
28750 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72  tored in a memor
28760 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68  y .** cell of th
28770 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e  e calling (paren
28780 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c  t) frame to cell
28790 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72 65   P2 in the curre
287a0 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64  nt frames .** ad
287b0 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68 69  dress space. Thi
287c0 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
287d0 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f  gger programs to
287e0 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e   access the new.
287f0 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20  * .** and old.* 
28800 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  values..**.** Th
28810 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
28820 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72   cell in the par
28830 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65 74  ent frame is det
28840 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e  ermined by addin
28850 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  g.** the value o
28860 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
28870 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
28880 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
28890 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c  t to the.** call
288a0 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  ing OP_Program i
288b0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
288c0 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20  ase OP_Param: { 
288d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
288e0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
288f0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
28900 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b  ame;.  Mem *pIn;
28910 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70  .  pFrame = p->p
28920 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26  Frame;.  pIn = &
28930 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
28940 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61  ->p1 + pFrame->a
28950 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70  Op[pFrame->pc].p
28960 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33  1];   .  sqlite3
28970 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
28980 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45  py(pOut, pIn, ME
28990 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61  M_Ephem);.  brea
289a0 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.}..#endif /* 
289b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
289c0 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a  MIT_TRIGGER */..
289d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
289e0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
289f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75  /* Opcode: FkCou
28a00 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  nter P1 P2 * * *
28a10 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74  .**.** Increment
28a20 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63   a "constraint c
28a30 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20 28 50  ounter" by P2 (P
28a40 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76  2 may be negativ
28a50 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a  e or positive)..
28a60 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  ** If P1 is non-
28a70 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61  zero, the databa
28a80 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  se constraint co
28a90 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65  unter is increme
28aa0 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72  nted .** (deferr
28ab0 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ed foreign key c
28ac0 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68  onstraints). Oth
28ad0 65 72 77 69 73 65 2c 20 69 66 20 50 31 20 69 73  erwise, if P1 is
28ae0 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73   zero, the .** s
28af0 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72  tatement counter
28b00 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
28b10 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
28b20 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
28b30 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ts)..*/.case OP_
28b40 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69  FkCounter: {.  i
28b50 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
28b60 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43    db->nDeferredC
28b70 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
28b80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
28b90 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d  nFkConstraint +=
28ba0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20   pOp->p2;.  }.  
28bb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
28bc0 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31  ode: FkIfZero P1
28bd0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
28be0 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74  This opcode test
28bf0 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b  s if a foreign k
28c00 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  ey constraint-co
28c10 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
28c20 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73  ly zero..** If s
28c30 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
28c40 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
28c50 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
28c60 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a  gh to the next .
28c70 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
28c80 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
28c90 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
28ca0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
28cb0 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
28cc0 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
28cd0 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74  er.** is zero (t
28ce0 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e  he one that coun
28cf0 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  ts deferred cons
28d00 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
28d10 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  s). If P1 is.** 
28d20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69  zero, the jump i
28d30 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73  s taken if the s
28d40 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61  tatement constra
28d50 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a  int-counter is z
28d60 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74  ero.** (immediat
28d70 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
28d80 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
28d90 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ons)..*/.case OP
28da0 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20  _FkIfZero: {    
28db0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
28dc0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
28dd0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65  .    if( db->nDe
28de0 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 29 20  ferredCons==0 ) 
28df0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
28e00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28    }else{.    if(
28e10 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
28e20 74 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d  t==0 ) pc = pOp-
28e30 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
28e40 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
28e50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
28e60 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
28e70 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
28e80 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
28e90 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  EMENT./* Opcode:
28ea0 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20   MemMax P1 P2 * 
28eb0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  * *.**.** P1 is 
28ec0 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68  a register in th
28ed0 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  e root frame of 
28ee0 74 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f  this VM (the roo
28ef0 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69  t frame is.** di
28f00 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65  fferent from the
28f10 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69   current frame i
28f20 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
28f30 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65 63  on is being exec
28f40 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61  uted.** within a
28f50 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53   sub-program). S
28f60 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  et the value of 
28f70 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
28f80 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a  he maximum of .*
28f90 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61  * its current va
28fa0 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75  lue and the valu
28fb0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
28fc0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
28fd0 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20  truction throws 
28fe0 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20  an error if the 
28ff0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e  memory cell is n
29000 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20  ot initially.** 
29010 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
29020 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b  ase OP_MemMax: {
29030 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a          /* in2 *
29040 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 3b 0a 20  /.  Mem *pIn1;. 
29050 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
29060 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72  me;.  if( p->pFr
29070 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70  ame ){.    for(p
29080 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
29090 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
290a0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
290b0 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70  >pParent);.    p
290c0 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  In1 = &pFrame->a
290d0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
290e0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20  }else{.    pIn1 
290f0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
29100 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
29110 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
29120 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
29130 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
29140 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
29150 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
29160 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
29170 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
29180 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
29190 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20  <pIn2->u.i){.   
291a0 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e   pIn1->u.i = pIn
291b0 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72  2->u.i;.  }.  br
291c0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
291d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
291e0 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f  OINCREMENT */../
291f0 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20  * Opcode: IfPos 
29200 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
29210 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
29220 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
29230 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 6a   1 or greater, j
29240 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
29250 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
29260 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
29270 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
29280 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
29290 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
292a0 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
292b0 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
292c0 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
292d0 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
292e0 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20  _IfPos: {       
292f0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
29300 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
29310 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
29320 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
29330 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28  MEM_Int );.  if(
29340 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a   pIn1->u.i>0 ){.
29350 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
29360 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
29370 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
29380 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20 2a 20  : IfNeg P1 P2 * 
29390 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  * *.**.** If the
293a0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
293b0 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68  er P1 is less th
293c0 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f  an zero, jump to
293d0 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69   P2. .**.** It i
293e0 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
293f0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
29400 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
29410 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
29420 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
29430 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
29440 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
29450 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
29460 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65  .*/.case OP_IfNe
29470 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  g: {        /* j
29480 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
29490 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
294a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
294b0 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
294c0 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
294d0 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20 20 20  ->u.i<0 ){.     
294e0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
294f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
29500 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 5a  ../* Opcode: IfZ
29510 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ero P1 P2 P3 * *
29520 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
29530 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
29540 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
29550 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33 20   Add literal P3 
29560 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  to the.** value 
29570 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  in register P1. 
29580 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   If the result i
29590 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d  s exactly 0, jum
295a0 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20  p to P2. .**.** 
295b0 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f  It is illegal to
295c0 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75   use this instru
295d0 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73  ction on a regis
295e0 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a  ter that does.**
295f0 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20   not contain an 
29600 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73  integer.  An ass
29610 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c  ertion fault wil
29620 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20  l result if you 
29630 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  try..*/.case OP_
29640 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  IfZero: {       
29650 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
29660 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
29670 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
29680 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
29690 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e  MEM_Int );.  pIn
296a0 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
296b0 33 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  3;.  if( pIn1->u
296c0 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 70 63  .i==0 ){.     pc
296d0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
296e0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
296f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74  /* Opcode: AggSt
29700 65 70 20 2a 20 50 32 20 50 33 20 50 34 20 50 35  ep * P2 P3 P4 P5
29710 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
29720 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
29730 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
29740 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74  e.  The.** funct
29750 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d  ion has P5 argum
29760 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20  ents.   P4 is a 
29770 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
29780 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74  uncDef.** struct
29790 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69  ure that specifi
297a0 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  es the function.
297b0 20 20 55 73 65 20 72 65 67 69 73 74 65 72 0a 2a    Use register.*
297c0 2a 20 50 33 20 61 73 20 74 68 65 20 61 63 63 75  * P3 as the accu
297d0 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
297e0 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
297f0 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
29800 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
29810 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
29820 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
29830 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Step: {.  int n;
29840 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
29850 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52  *pMem;.  Mem *pR
29860 65 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  ec;.  sqlite3_co
29870 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c  ntext ctx;.  sql
29880 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56  ite3_value **apV
29890 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  al;..  n = pOp->
298a0 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p5;.  assert( n>
298b0 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 26  =0 );.  pRec = &
298c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
298d0 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
298e0 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
298f0 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
29900 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
29910 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20  +, pRec++){.    
29920 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
29930 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20  id(pRec) );.    
29940 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b  apVal[i] = pRec;
29950 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
29960 68 61 6e 67 65 28 70 2c 20 70 52 65 63 29 3b 0a  hange(p, pRec);.
29970 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
29980 65 6d 53 74 6f 72 65 54 79 70 65 28 70 52 65 63  emStoreType(pRec
29990 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75  );.  }.  ctx.pFu
299a0 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75  nc = pOp->p4.pFu
299b0 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  nc;.  assert( pO
299c0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
299d0 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
299e0 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d   ctx.pMem = pMem
299f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
29a00 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a  ];.  pMem->n++;.
29a10 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20    ctx.s.flags = 
29a20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e  MEM_Null;.  ctx.
29a30 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73  s.z = 0;.  ctx.s
29a40 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  .zMalloc = 0;.  
29a50 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a  ctx.s.xDel = 0;.
29a60 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b    ctx.s.db = db;
29a70 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
29a80 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20   0;.  ctx.pColl 
29a90 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70  = 0;.  if( ctx.p
29aa0 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51  Func->flags & SQ
29ab0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
29ac0 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  LL ){.    assert
29ad0 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a  ( pOp>p->aOp );.
29ae0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
29af0 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43  -1].p4type==P4_C
29b00 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73  OLLSEQ );.    as
29b10 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
29b20 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
29b30 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c   );.    ctx.pCol
29b40 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70  l = pOp[-1].p4.p
29b50 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78  Coll;.  }.  (ctx
29b60 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26  .pFunc->xStep)(&
29b70 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20  ctx, n, apVal); 
29b80 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d  /* IMP: R-24505-
29b90 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 63  23230 */.  if( c
29ba0 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  tx.isError ){.  
29bb0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
29bc0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
29bd0 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
29be0 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74  3_value_text(&ct
29bf0 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20  x.s));.    rc = 
29c00 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ctx.isError;.  }
29c10 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
29c20 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29  mRelease(&ctx.s)
29c30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
29c40 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61   Opcode: AggFina
29c50 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  l P1 P2 * P4 *.*
29c60 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
29c70 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74   finalizer funct
29c80 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
29c90 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20  gate.  P1 is.** 
29ca0 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
29cb0 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20  ion that is the 
29cc0 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20  accumulator for 
29cd0 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a  the aggregate..*
29ce0 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
29cf0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
29d00 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70  ts that the step
29d10 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20   function takes 
29d20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  and.** P4 is a p
29d30 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
29d40 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66  ncDef for this f
29d50 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32  unction.  The P2
29d60 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20  .** argument is 
29d70 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73  not used by this
29d80 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20   opcode.  It is 
29d90 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69  only there to di
29da0 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75  sambiguate.** fu
29db0 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e  nctions that can
29dc0 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75   take varying nu
29dd0 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e  mbers of argumen
29de0 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61  ts.  The.** P4 a
29df0 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20  rgument is only 
29e00 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64  needed for the d
29e10 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77  egenerate case w
29e20 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70  here.** the step
29e30 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f   function was no
29e40 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c  t previously cal
29e50 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
29e60 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65  AggFinal: {.  Me
29e70 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72  m *pMem;.  asser
29e80 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
29e90 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
29ea0 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d   );.  pMem = &aM
29eb0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
29ec0 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
29ed0 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c  ags & ~(MEM_Null
29ee0 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b  |MEM_Agg))==0 );
29ef0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
29f00 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70  dbeMemFinalize(p
29f10 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75  Mem, pOp->p4.pFu
29f20 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b  nc);.  if( rc ){
29f30 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
29f40 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
29f50 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
29f60 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
29f70 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71  pMem));.  }.  sq
29f80 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
29f90 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e  ncoding(pMem, en
29fa0 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
29fb0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
29fc0 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Mem);.  if( sqli
29fd0 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
29fe0 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f  (pMem) ){.    go
29ff0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
2a000 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
2a010 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a020 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  WAL./* Opcode: C
2a030 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20  heckpoint P1 P2 
2a040 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  P3 * *.**.** Che
2a050 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65  ckpoint database
2a060 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e   P1. This is a n
2a070 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f  o-op if P1 is no
2a080 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a  t currently in.*
2a090 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61  * WAL mode. Para
2a0a0 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20  meter P2 is one 
2a0b0 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  of SQLITE_CHECKP
2a0c0 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55  OINT_PASSIVE, FU
2a0d0 4c 4c 0a 2a 2a 20 6f 72 20 52 45 53 54 41 52 54  LL.** or RESTART
2a0e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65  ..*/.case OP_Che
2a0f0 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  ckpoint: {.  int
2a100 20 6e 4c 6f 67 20 3d 20 2d 31 3b 20 20 20 20 20   nLog = -1;     
2a110 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2a120 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
2a130 69 6e 20 57 41 4c 20 6c 6f 67 20 2a 2f 0a 20 20  in WAL log */.  
2a140 69 6e 74 20 6e 43 6b 70 74 20 3d 20 2d 31 3b 20  int nCkpt = -1; 
2a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a160 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 65  /* Number of che
2a170 63 6b 70 6f 69 6e 74 65 64 20 70 61 67 65 73 20  ckpointed pages 
2a180 2a 2f 0a 20 20 69 6e 74 20 62 42 75 73 79 20 3d  */.  int bBusy =
2a190 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
2a1a0 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
2a1b0 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
2a1c0 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
2a1d0 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
2a1e0 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20  POINT_FULL.     
2a1f0 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
2a200 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2a210 52 45 53 54 41 52 54 0a 20 20 29 3b 0a 20 20 72  RESTART.  );.  r
2a220 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b  c = sqlite3Check
2a230 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70  point(db, pOp->p
2a240 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 6e 4c 6f  1, pOp->p2, &nLo
2a250 67 2c 20 26 6e 43 6b 70 74 29 3b 0a 20 20 69 66  g, &nCkpt);.  if
2a260 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
2a270 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  Y ){.    rc = SQ
2a280 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 62 42 75  LITE_OK;.    bBu
2a290 73 79 20 3d 20 31 3b 0a 20 20 7d 0a 0a 20 20 61  sy = 1;.  }..  a
2a2a0 4d 65 6d 5b 31 5d 2e 75 2e 69 20 3d 20 62 42 75  Mem[1].u.i = bBu
2a2b0 73 79 3b 0a 20 20 61 4d 65 6d 5b 32 5d 2e 75 2e  sy;.  aMem[2].u.
2a2c0 69 20 3d 20 6e 4c 6f 67 3b 0a 20 20 61 4d 65 6d  i = nLog;.  aMem
2a2d0 5b 33 5d 2e 75 2e 69 20 3d 20 6e 43 6b 70 74 3b  [3].u.i = nCkpt;
2a2e0 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
2a2f0 67 28 26 61 4d 65 6d 5b 31 5d 2c 20 4d 45 4d 5f  g(&aMem[1], MEM_
2a300 49 6e 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  Int);.  MemSetTy
2a310 70 65 46 6c 61 67 28 26 61 4d 65 6d 5b 32 5d 2c  peFlag(&aMem[2],
2a320 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 4d 65 6d   MEM_Int);.  Mem
2a330 53 65 74 54 79 70 65 46 6c 61 67 28 26 61 4d 65  SetTypeFlag(&aMe
2a340 6d 5b 33 5d 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  m[3], MEM_Int);.
2a350 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23  .  break;.};  .#
2a360 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
2a370 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
2a380 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75  A./* Opcode: Jou
2a390 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50  rnalMode P1 P2 P
2a3a0 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 43 68 61  3 * P5.**.** Cha
2a3b0 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  nge the journal 
2a3c0 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65  mode of database
2a3d0 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75   P1 to P3. P3 mu
2a3e0 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  st be one of the
2a3f0 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  .** PAGER_JOURNA
2a400 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73  LMODE_XXX values
2a410 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65  . If changing be
2a420 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75  tween the variou
2a430 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f  s rollback.** mo
2a440 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75  des (delete, tru
2a450 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20  ncate, persist, 
2a460 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c  off and memory),
2a470 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c   this is a simpl
2a480 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20  e.** operation. 
2a490 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65  No IO is require
2a4a0 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e  d..**.** If chan
2a4b0 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74  ging into or out
2a4c0 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65   of WAL mode the
2a4d0 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f   procedure is mo
2a4e0 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a  re complicated..
2a4f0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74  **.** Write a st
2a500 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
2a510 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61  the final journa
2a520 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74  l-mode to regist
2a530 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
2a540 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b  P_JournalMode: {
2a550 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
2a560 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 72 65  elease */.  Btre
2a570 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
2a580 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
2a590 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a  tree to change j
2a5a0 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a  ournal mode of *
2a5b0 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65  /.  Pager *pPage
2a5c0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
2a5d0 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73      /* Pager ass
2a5e0 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74  ociated with pBt
2a5f0 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20   */.  int eNew; 
2a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a610 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75        /* New jou
2a620 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69  rnal mode */.  i
2a630 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20  nt eOld;        
2a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2a650 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61  * The old journa
2a660 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 63 6f 6e 73  l mode */.  cons
2a670 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d  t char *zFilenam
2a680 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
2a690 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
2a6a0 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20  file for pPager 
2a6b0 2a 2f 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70  */..  eNew = pOp
2a6c0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
2a6d0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2a6e0 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a  NALMODE_DELETE .
2a6f0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2a700 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2a710 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20  E_TRUNCATE .    
2a720 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2a730 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45  R_JOURNALMODE_PE
2a740 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c  RSIST .       ||
2a750 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2a760 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20  RNALMODE_OFF.   
2a770 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2a780 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d  ER_JOURNALMODE_M
2a790 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20  EMORY.       || 
2a7a0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2a7b0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20  NALMODE_WAL.    
2a7c0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2a7d0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
2a7e0 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72  ERY.  );.  asser
2a7f0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2a800 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
2a810 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 6f   );..  /* This o
2a820 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 69 6e  pcode is used in
2a830 20 74 77 6f 20 70 6c 61 63 65 73 3a 20 50 52 41   two places: PRA
2a840 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
2a850 20 61 6e 64 20 41 54 54 41 43 48 2e 0a 20 20 2a   and ATTACH..  *
2a860 2a 20 49 6e 20 50 52 41 47 4d 41 20 6a 6f 75 72  * In PRAGMA jour
2a870 6e 61 6c 5f 6d 6f 64 65 2c 20 74 68 65 20 73 71  nal_mode, the sq
2a880 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
2a890 65 65 28 29 20 72 6f 75 74 69 6e 65 20 69 73 20  ee() routine is 
2a8a0 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 77 68 65 6e  called.  ** when
2a8b0 20 74 68 65 20 73 74 61 74 6d 65 6e 74 20 69 73   the statment is
2a8c0 20 70 72 65 70 61 72 65 64 20 61 6e 64 20 73 6f   prepared and so
2a8d0 20 70 2d 3e 61 4d 75 74 65 78 2e 6e 4d 75 74 65   p->aMutex.nMute
2a8e0 78 3e 30 2e 20 20 41 6c 6c 20 6d 75 74 65 78 65  x>0.  All mutexe
2a8f0 73 0a 20 20 2a 2a 20 61 72 65 20 61 6c 72 65 61  s.  ** are alrea
2a900 64 79 20 61 63 71 75 69 72 65 64 2e 20 20 42 75  dy acquired.  Bu
2a910 74 20 77 68 65 6e 20 75 73 65 64 20 69 6e 20 41  t when used in A
2a920 54 54 41 43 48 2c 20 73 71 6c 69 74 65 33 56 64  TTACH, sqlite3Vd
2a930 62 65 55 73 65 73 42 74 72 65 65 28 29 0a 20 20  beUsesBtree().  
2a940 2a 2a 20 69 73 20 6e 6f 74 20 63 61 6c 6c 65 64  ** is not called
2a950 20 77 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d   when the statem
2a960 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20  ent is prepared 
2a970 62 65 63 61 75 73 65 20 69 74 20 72 65 71 75 69  because it requi
2a980 72 65 73 20 74 68 65 0a 20 20 2a 2a 20 69 44 62  res the.  ** iDb
2a990 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
2a9a0 74 61 62 61 73 65 20 61 73 20 61 20 70 61 72 61  tabase as a para
2a9b0 6d 65 74 65 72 2c 20 61 6e 64 20 74 68 65 20 64  meter, and the d
2a9c0 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 0a  atabase has not.
2a9d0 20 20 2a 2a 20 79 65 74 20 62 65 65 6e 20 61 74    ** yet been at
2a9e0 74 61 63 68 65 64 20 73 6f 20 74 68 61 74 20 69  tached so that i
2a9f0 6e 64 65 78 20 69 73 20 75 6e 61 76 61 69 6c 61  ndex is unavaila
2aa00 62 6c 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f  ble.  We have to
2aa10 20 77 61 69 74 0a 20 20 2a 2a 20 75 6e 74 69 6c   wait.  ** until
2aa20 20 72 75 6e 74 69 6d 65 20 28 6e 6f 77 29 20 74   runtime (now) t
2aa30 6f 20 67 65 74 20 74 68 65 20 6d 75 74 65 78 20  o get the mutex 
2aa40 6f 6e 20 74 68 65 20 6e 65 77 6c 79 20 61 74 74  on the newly att
2aa50 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a  ached database..
2aa60 20 20 2a 2a 20 4e 6f 20 6f 74 68 65 72 20 6d 75    ** No other mu
2aa70 74 65 78 65 73 20 61 72 65 20 72 65 71 75 69 72  texes are requir
2aa80 65 64 20 62 79 20 74 68 65 20 41 54 54 41 43 48  ed by the ATTACH
2aa90 20 63 6f 6d 6d 61 6e 64 20 73 6f 20 74 68 69 73   command so this
2aaa0 20 69 73 20 73 61 66 65 0a 20 20 2a 2a 20 74 6f   is safe.  ** to
2aab0 20 64 6f 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65   do..  */.  asse
2aac0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
2aad0 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29  k & (1<<pOp->p1)
2aae0 29 21 3d 30 20 7c 7c 20 70 2d 3e 61 4d 75 74 65  )!=0 || p->aMute
2aaf0 78 2e 6e 4d 75 74 65 78 3d 3d 30 20 29 3b 0a 20  x.nMutex==0 );. 
2ab00 20 69 66 28 20 70 2d 3e 61 4d 75 74 65 78 2e 6e   if( p->aMutex.n
2ab10 4d 75 74 65 78 3d 3d 30 20 29 7b 0a 20 20 20 20  Mutex==0 ){.    
2ab20 2f 2a 20 54 68 69 73 20 6f 63 63 75 72 73 20 72  /* This occurs r
2ab30 69 67 68 74 20 61 66 74 65 72 20 41 54 54 41 43  ight after ATTAC
2ab40 48 2e 20 20 47 65 74 20 61 20 6d 75 74 65 78 20  H.  Get a mutex 
2ab50 6f 6e 20 74 68 65 20 6e 65 77 6c 79 20 41 54 54  on the newly ATT
2ab60 41 43 48 65 64 0a 20 20 20 20 2a 2a 20 64 61 74  ACHed.    ** dat
2ab70 61 62 61 73 65 2e 20 2a 2f 0a 20 20 20 20 73 71  abase. */.    sq
2ab80 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
2ab90 65 65 28 70 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  ee(p, pOp->p1);.
2aba0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2abb0 75 74 65 78 41 72 72 61 79 45 6e 74 65 72 28 70  utexArrayEnter(p
2abc0 29 3b 0a 20 20 7d 0a 0a 20 20 70 42 74 20 3d 20  );.  }..  pBt = 
2abd0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2abe0 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d  .pBt;.  pPager =
2abf0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
2ac00 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20  er(pBt);.  eOld 
2ac10 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65  = sqlite3PagerGe
2ac20 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2ac30 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77  ger);.  if( eNew
2ac40 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2ac50 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77  ODE_QUERY ) eNew
2ac60 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21   = eOld;.  if( !
2ac70 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f  sqlite3PagerOkTo
2ac80 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64  ChangeJournalMod
2ac90 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77  e(pPager) ) eNew
2aca0 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65   = eOld;..#ifnde
2acb0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2acc0 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20  L.  zFilename = 
2acd0 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65  sqlite3PagerFile
2ace0 6e 61 6d 65 28 70 50 61 67 65 72 29 3b 0a 0a 20  name(pPager);.. 
2acf0 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77   /* Do not allow
2ad00 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f   a transition to
2ad10 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
2ad20 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  L for a database
2ad30 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61  .  ** in tempora
2ad40 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66  ry storage or if
2ad50 20 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f   the VFS does no
2ad60 74 20 73 75 70 70 6f 72 74 20 73 68 61 72 65 64  t support shared
2ad70 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20   memory .  */.  
2ad80 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
2ad90 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
2ada0 20 20 20 26 26 20 28 7a 46 69 6c 65 6e 61 6d 65     && (zFilename
2adb0 5b 30 5d 3d 3d 30 20 20 20 20 20 20 20 20 20 20  [0]==0          
2adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2add0 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20  * Temp file */. 
2ade0 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65        || !sqlite
2adf0 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74  3PagerWalSupport
2ae00 65 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a  ed(pPager))   /*
2ae10 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72   No shared-memor
2ae20 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29  y support */.  )
2ae30 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
2ae40 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65  d;.  }..  if( (e
2ae50 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26  New!=eOld).   &&
2ae60 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f   (eOld==PAGER_JO
2ae70 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c  URNALMODE_WAL ||
2ae80 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2ae90 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20  RNALMODE_WAL).  
2aea0 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e  ){.    if( !db->
2aeb0 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62  autoCommit || db
2aec0 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
2aed0 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  1 ){.      rc = 
2aee0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
2aef0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2af00 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2af10 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20  , db, .         
2af20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20   "cannot change 
2af30 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d  %s wal mode from
2af40 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
2af50 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20  ction",.        
2af60 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a    (eNew==PAGER_J
2af70 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
2af80 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f   "into" : "out o
2af90 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  f").      );.   
2afa0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65     break;.    }e
2afb0 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28  lse{. .      if(
2afc0 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
2afd0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a  RNALMODE_WAL ){.
2afe0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65          /* If le
2aff0 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20  aving WAL mode, 
2b000 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69  close the log fi
2b010 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75  le. If successfu
2b020 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20  l, the call.    
2b030 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43      ** to PagerC
2b040 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70  loseWal() checkp
2b050 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65  oints and delete
2b060 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61  s the write-ahea
2b070 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a  d-log .        *
2b080 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55  * file. An EXCLU
2b090 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74  SIVE lock may st
2b0a0 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74  ill be held on t
2b0b0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2b0c0 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74   .        ** aft
2b0d0 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20  er a successful 
2b0e0 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20  return. .       
2b0f0 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d   */.        rc =
2b100 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f   sqlite3PagerClo
2b110 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20  seWal(pPager);. 
2b120 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53         if( rc==S
2b130 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2b140 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
2b150 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2b160 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
2b170 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2b180 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d  }else if( eOld==
2b190 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2b1a0 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20  E_MEMORY ){.    
2b1b0 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72      /* Cannot tr
2b1c0 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c  ansition directl
2b1d0 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f  y from MEMORY to
2b1e0 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20   WAL.  Use mode 
2b1f0 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  OFF.        ** a
2b200 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74  s an intermediat
2b210 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c  e */.        sql
2b220 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2b230 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2b240 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2b250 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a  E_OFF);.      }.
2b260 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e    .      /* Open
2b270 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
2b280 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
2b290 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20  ile. Regardless 
2b2a0 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20  of the journal. 
2b2b0 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68       ** mode, th
2b2c0 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  is transaction a
2b2d0 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c  lways uses a rol
2b2e0 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20  lback journal.. 
2b2f0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
2b300 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
2b310 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
2b320 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==0 );.      if(
2b330 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2b340 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
2b350 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65  qlite3BtreeSetVe
2b360 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77  rsion(pBt, (eNew
2b370 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2b380 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29  ODE_WAL ? 2 : 1)
2b390 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
2b3a0 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69  .  }.#endif /* i
2b3b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2b3c0 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20  T_WAL */..  if( 
2b3d0 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d  rc ){.    eNew =
2b3e0 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65   eOld;.  }.  eNe
2b3f0 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  w = sqlite3Pager
2b400 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
2b410 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20  Pager, eNew);.. 
2b420 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
2b430 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e  p->p2];.  pOut->
2b440 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
2b450 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
2b460 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
2b470 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
2b480 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
2b490 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  eNew);.  pOut->n
2b4a0 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
2b4b0 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70  30(pOut->z);.  p
2b4c0 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
2b4d0 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65  E_UTF8;.  sqlite
2b4e0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2b4f0 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
2b500 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  ng);.  break;.};
2b510 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2b520 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f  E_OMIT_PRAGMA */
2b530 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2b540 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55  QLITE_OMIT_VACUU
2b550 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  M) && !defined(S
2b560 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43  QLITE_OMIT_ATTAC
2b570 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  H)./* Opcode: Va
2b580 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  cuum * * * * *.*
2b590 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20  *.** Vacuum the 
2b5a0 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e  entire database.
2b5b0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69    This opcode wi
2b5c0 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76  ll cause other v
2b5d0 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e  irtual.** machin
2b5e0 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64  es to be created
2b5f0 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61   and run.  It ma
2b600 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20  y not be called 
2b610 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61  from within.** a
2b620 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f   transaction..*/
2b630 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a  .case OP_Vacuum:
2b640 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   {.  rc = sqlite
2b650 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a  3RunVacuum(&p->z
2b660 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62  ErrMsg, db);.  b
2b670 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
2b680 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2b690 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
2b6a0 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  UUM)./* Opcode: 
2b6b0 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32  IncrVacuum P1 P2
2b6c0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72   * * *.**.** Per
2b6d0 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74  form a single st
2b6e0 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d  ep of the increm
2b6f0 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f  ental vacuum pro
2b700 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65  cedure on.** the
2b710 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66   P1 database. If
2b720 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20   the vacuum has 
2b730 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74  finished, jump t
2b740 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  o instruction.**
2b750 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
2b760 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2b770 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2b780 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2b790 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20  _IncrVacuum: {  
2b7a0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2b7b0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
2b7c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b7d0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2b7e0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2b7f0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
2b800 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31  sk & (1<<pOp->p1
2b810 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ))!=0 );.  pBt =
2b820 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
2b830 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71  ].pBt;.  rc = sq
2b840 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61  lite3BtreeIncrVa
2b850 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28  cuum(pBt);.  if(
2b860 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc==SQLITE_DONE
2b870 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
2b880 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63  ->p2 - 1;.    rc
2b890 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2b8a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2b8b0 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
2b8c0 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20  Expire P1 * * * 
2b8d0 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72  *.**.** Cause pr
2b8e0 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d  ecompiled statem
2b8f0 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65  ents to become e
2b900 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72  xpired. An expir
2b910 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20  ed statement.** 
2b920 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72  fails with an er
2b930 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49  ror code of SQLI
2b940 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20  TE_SCHEMA if it 
2b950 69 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64  is ever executed
2b960 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65   .** (via sqlite
2b970 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a  3_step())..** .*
2b980 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68  * If P1 is 0, th
2b990 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65  en all SQL state
2b9a0 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70  ments become exp
2b9b0 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e  ired. If P1 is n
2b9c0 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e  on-zero,.** then
2b9d0 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e   only the curren
2b9e0 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74  tly executing st
2b9f0 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63  atement is affec
2ba00 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  ted. .*/.case OP
2ba10 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28  _Expire: {.  if(
2ba20 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20   !pOp->p1 ){.   
2ba30 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
2ba40 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
2ba50 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (db);.  }else{. 
2ba60 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
2ba70 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2ba80 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
2ba90 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2baa0 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  CHE./* Opcode: T
2bab0 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50  ableLock P1 P2 P
2bac0 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74  3 P4 *.**.** Obt
2bad0 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20  ain a lock on a 
2bae0 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
2baf0 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
2bb00 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  on is only used 
2bb10 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72  when.** the shar
2bb20 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65  ed-cache feature
2bb30 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a   is enabled. .**
2bb40 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
2bb50 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
2bb60 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  ase in sqlite3.a
2bb70 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61  Db[] of the data
2bb80 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68  base.** on which
2bb90 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71   the lock is acq
2bba0 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f  uired.  A readlo
2bbb0 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  ck is obtained i
2bbc0 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20  f P3==0 or.** a 
2bbd0 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33  write lock if P3
2bbe0 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f  ==1..**.** P2 co
2bbf0 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d  ntains the root-
2bc00 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
2bc10 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a  e to lock..**.**
2bc20 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70   P4 contains a p
2bc30 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61  ointer to the na
2bc40 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
2bc50 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68  being locked. Th
2bc60 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73  is is only.** us
2bc70 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
2bc80 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
2bc90 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e  if the lock cann
2bca0 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a  ot be obtained..
2bcb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65  */.case OP_Table
2bcc0 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57  Lock: {.  u8 isW
2bcd0 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70  riteLock = (u8)p
2bce0 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73  Op->p3;.  if( is
2bcf0 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d  WriteLock || 0==
2bd00 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54  (db->flags&SQLIT
2bd10 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
2bd20 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31  d) ){.    int p1
2bd30 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20   = pOp->p1; .   
2bd40 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26   assert( p1>=0 &
2bd50 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  & p1<db->nDb );.
2bd60 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e      assert( (p->
2bd70 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
2bd80 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 61  p1))!=0 );.    a
2bd90 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f  ssert( isWriteLo
2bda0 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65  ck==0 || isWrite
2bdb0 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72  Lock==1 );.    r
2bdc0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2bdd0 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44  LockTable(db->aD
2bde0 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  b[p1].pBt, pOp->
2bdf0 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29  p2, isWriteLock)
2be00 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78  ;.    if( (rc&0x
2be10 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b  FF)==SQLITE_LOCK
2be20 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  ED ){.      cons
2be30 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d  t char *z = pOp-
2be40 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c  >p4.z;.      sql
2be50 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2be60 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2be70 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
2be80 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a  s locked: %s", z
2be90 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
2bea0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2beb0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  * SQLITE_OMIT_SH
2bec0 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23  ARED_CACHE */..#
2bed0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2bee0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2bef0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69  /* Opcode: VBegi
2bf00 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
2bf10 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70  ** P4 may be a p
2bf20 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
2bf30 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
2bf40 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c  ure. If so, call
2bf50 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20   the .** xBegin 
2bf60 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20  method for that 
2bf70 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73  table..**.** Als
2bf80 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  o, whether or no
2bf90 74 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65  t P4 is set, che
2bfa0 63 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ck that this is 
2bfb0 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64  not being called
2bfc0 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20   from.** within 
2bfd0 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20  a callback to a 
2bfe0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53  virtual table xS
2bff0 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66  ync() method. If
2c000 20 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f   it is, the erro
2c010 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62  r.** code will b
2c020 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f  e set to SQLITE_
2c030 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20  LOCKED..*/.case 
2c040 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56  OP_VBegin: {.  V
2c050 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20  Table *pVTab;.  
2c060 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVTab = pOp->p4.
2c070 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71  pVtab;.  rc = sq
2c080 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64  lite3VtabBegin(d
2c090 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28  b, pVTab);.  if(
2c0a0 20 70 56 54 61 62 20 29 20 69 6d 70 6f 72 74 56   pVTab ) importV
2c0b0 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 54  tabErrMsg(p, pVT
2c0c0 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72  ab->pVtab);.  br
2c0d0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2c0e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2c0f0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2c100 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c110 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2c120 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74  * Opcode: VCreat
2c130 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
2c140 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
2c150 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
2c160 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
2c170 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78  e P1. Call the x
2c180 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a  Create method.**
2c190 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
2c1a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65  .*/.case OP_VCre
2c1b0 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71  ate: {.  rc = sq
2c1c0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
2c1d0 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ate(db, pOp->p1,
2c1e0 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e   pOp->p4.z, &p->
2c1f0 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61  zErrMsg);.  brea
2c200 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2c210 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2c220 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2c230 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c240 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2c250 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79  Opcode: VDestroy
2c260 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2c270 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
2c280 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
2c290 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
2c2a0 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78   P1.  Call the x
2c2b0 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a  Destroy method.*
2c2c0 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e  * of that table.
2c2d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73  .*/.case OP_VDes
2c2e0 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56  troy: {.  p->inV
2c2f0 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20  tabMethod = 2;. 
2c300 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
2c310 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c  bCallDestroy(db,
2c320 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2c330 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  4.z);.  p->inVta
2c340 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62  bMethod = 0;.  b
2c350 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2c360 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2c370 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2c380 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c390 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2c3a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e  /* Opcode: VOpen
2c3b0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2c3c0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2c3d0 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2c3e0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2c3f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2c400 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69  ructure..** P1 i
2c410 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  s a cursor numbe
2c420 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  r.  This opcode 
2c430 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74  opens a cursor t
2c440 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  o the virtual.**
2c450 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65   table and store
2c460 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e  s that cursor in
2c470 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
2c480 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  VOpen: {.  VdbeC
2c490 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73  ursor *pCur;.  s
2c4a0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2c4b0 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
2c4c0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2c4d0 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65  *pVtab;.  sqlite
2c4e0 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
2c4f0 65 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a  e;..  pCur = 0;.
2c500 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20    pVtabCursor = 
2c510 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  0;.  pVtab = pOp
2c520 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
2c530 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28  b;.  pModule = (
2c540 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2c550 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  )pVtab->pModule;
2c560 0a 20 20 61 73 73 65 72 74 28 70 56 74 61 62 20  .  assert(pVtab 
2c570 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72  && pModule);.  r
2c580 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70  c = pModule->xOp
2c590 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61 62  en(pVtab, &pVtab
2c5a0 43 75 72 73 6f 72 29 3b 0a 20 20 69 6d 70 6f 72  Cursor);.  impor
2c5b0 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
2c5c0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51 4c  Vtab);.  if( SQL
2c5d0 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20  ITE_OK==rc ){.  
2c5e0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
2c5f0 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
2c600 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a  sor base class *
2c610 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f  /.    pVtabCurso
2c620 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62  r->pVtab = pVtab
2c630 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
2c640 6c 69 73 65 20 76 64 62 65 20 63 75 72 73 6f 72  lise vdbe cursor
2c650 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70   object */.    p
2c660 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
2c670 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
2c680 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20   0, -1, 0);.    
2c690 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20  if( pCur ){.    
2c6a0 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72    pCur->pVtabCur
2c6b0 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f  sor = pVtabCurso
2c6c0 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70  r;.      pCur->p
2c6d0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 43 75  Module = pVtabCu
2c6e0 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f  rsor->pVtab->pMo
2c6f0 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  dule;.    }else{
2c700 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f  .      db->mallo
2c710 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20  cFailed = 1;.   
2c720 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f     pModule->xClo
2c730 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  se(pVtabCursor);
2c740 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
2c750 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2c760 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2c770 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2c780 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c790 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2c7a0 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72   Opcode: VFilter
2c7b0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
2c7c0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  *.** P1 is a cur
2c7d0 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67  sor opened using
2c7e0 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61   VOpen.  P2 is a
2c7f0 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d  n address to jum
2c800 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66  p to if.** the f
2c810 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73  iltered result s
2c820 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a  et is empty..**.
2c830 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20  ** P4 is either 
2c840 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67  NULL or a string
2c850 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61   that was genera
2c860 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74  ted by the xBest
2c870 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20  Index.** method 
2c880 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20  of the module.  
2c890 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  The interpretati
2c8a0 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72  on of the P4 str
2c8b0 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74  ing is left.** t
2c8c0 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70  o the module imp
2c8d0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  lementation..**.
2c8e0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2c8f0 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74  nvokes the xFilt
2c900 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65  er method on the
2c910 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
2c920 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50  pecified.** by P
2c930 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20  1.  The integer 
2c940 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d  query plan param
2c950 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20  eter to xFilter 
2c960 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2c970 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67  ister.** P3. Reg
2c980 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65  ister P3+1 store
2c990 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d  s the argc param
2c9a0 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65  eter to be passe
2c9b0 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c  d to the.** xFil
2c9c0 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69  ter method. Regi
2c9d0 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31  sters P3+2..P3+1
2c9e0 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72  +argc are the ar
2c9f0 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  gc.** additional
2ca00 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63   parameters whic
2ca10 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a  h are passed to.
2ca20 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72  ** xFilter as ar
2ca30 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  gv. Register P3+
2ca40 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30  2 becomes argv[0
2ca50 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f  ] when passed to
2ca60 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20   xFilter..**.** 
2ca70 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  A jump is made t
2ca80 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75  o P2 if the resu
2ca90 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c  lt set after fil
2caa0 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20  tering would be 
2cab0 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  empty..*/.case O
2cac0 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f  P_VFilter: {   /
2cad0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
2cae0 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65  nArg;.  int iQue
2caf0 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ry;.  const sqli
2cb00 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2cb10 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65  ule;.  Mem *pQue
2cb20 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63  ry;.  Mem *pArgc
2cb30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
2cb40 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
2cb50 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  rsor;.  sqlite3_
2cb60 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56  vtab *pVtab;.  V
2cb70 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
2cb80 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
2cb90 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  t i;.  Mem **apA
2cba0 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20  rg;..  pQuery = 
2cbb0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2cbc0 20 20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72    pArgc = &pQuer
2cbd0 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70  y[1];.  pCur = p
2cbe0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2cbf0 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
2cc00 73 56 61 6c 69 64 28 70 51 75 65 72 79 29 20 29  sValid(pQuery) )
2cc10 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
2cc20 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65  CE(pOp->p3, pQue
2cc30 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ry);.  assert( p
2cc40 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2cc50 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f   );.  pVtabCurso
2cc60 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  r = pCur->pVtabC
2cc70 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d  ursor;.  pVtab =
2cc80 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
2cc90 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2cca0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
2ccb0 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20  ..  /* Grab the 
2ccc0 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64  index number and
2ccd0 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73   argc parameters
2cce0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
2ccf0 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d  Query->flags&MEM
2cd00 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67  _Int)!=0 && pArg
2cd10 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  c->flags==MEM_In
2cd20 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69  t );.  nArg = (i
2cd30 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20  nt)pArgc->u.i;. 
2cd40 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70   iQuery = (int)p
2cd50 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f  Query->u.i;..  /
2cd60 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69  * Invoke the xFi
2cd70 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  lter method */. 
2cd80 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a   {.    res = 0;.
2cd90 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61      apArg = p->a
2cda0 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28 69 20  pArg;.    for(i 
2cdb0 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  = 0; i<nArg; i++
2cdc0 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  ){.      apArg[i
2cdd0 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b  ] = &pArgc[i+1];
2cde0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
2cdf0 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 61  beMemStoreType(a
2ce00 70 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a  pArg[i]);.    }.
2ce10 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  .    p->inVtabMe
2ce20 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  thod = 1;.    rc
2ce30 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c   = pModule->xFil
2ce40 74 65 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c  ter(pVtabCursor,
2ce50 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34   iQuery, pOp->p4
2ce60 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29  .z, nArg, apArg)
2ce70 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d  ;.    p->inVtabM
2ce80 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 69  ethod = 0;.    i
2ce90 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2cea0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69  p, pVtab);.    i
2ceb0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2cec0 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
2ced0 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56  pModule->xEof(pV
2cee0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  tabCursor);.    
2cef0 7d 0a 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  }..    if( res )
2cf00 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
2cf10 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
2cf20 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c    }.  pCur->null
2cf30 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61  Row = 0;..  brea
2cf40 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2cf50 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2cf60 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2cf70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2cf80 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2cf90 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20  Opcode: VColumn 
2cfa0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2cfb0 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c  ** Store the val
2cfc0 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20  ue of the P2-th 
2cfd0 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65  column of.** the
2cfe0 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74   row of the virt
2cff0 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74  ual-table that t
2d000 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72  he .** P1 cursor
2d010 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   is pointing to 
2d020 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
2d030 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f  ..*/.case OP_VCo
2d040 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65  lumn: {.  sqlite
2d050 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2d060 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2d070 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2d080 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20    Mem *pDest;.  
2d090 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2d0a0 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62  sContext;..  Vdb
2d0b0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20  eCursor *pCur = 
2d0c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2d0d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
2d0e0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
2d0f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2d100 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
2d110 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
2d120 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Dest = &aMem[pOp
2d130 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
2d140 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65  tToChange(p, pDe
2d150 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  st);.  if( pCur-
2d160 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
2d170 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2d180 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
2d190 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
2d1a0 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74  Vtab = pCur->pVt
2d1b0 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
2d1c0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
2d1d0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
2d1e0 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
2d1f0 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d  xColumn );.  mem
2d200 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30  set(&sContext, 0
2d210 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78  , sizeof(sContex
2d220 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f  t));..  /* The o
2d230 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61  utput cell may a
2d240 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75  lready have a bu
2d250 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20  ffer allocated. 
2d260 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 63 75  Move.  ** the cu
2d270 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74  rrent contents t
2d280 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20  o sContext.s so 
2d290 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72  in case the user
2d2a0 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20  -function .  ** 
2d2b0 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c 72 65  can use the alre
2d2c0 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75  ady allocated bu
2d2d0 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20  ffer instead of 
2d2e0 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a 20 20  allocating a .  
2d2f0 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f  ** new one..  */
2d300 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2d310 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78 74 2e  mMove(&sContext.
2d320 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d  s, pDest);.  Mem
2d330 53 65 74 54 79 70 65 46 6c 61 67 28 26 73 43 6f  SetTypeFlag(&sCo
2d340 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c  ntext.s, MEM_Nul
2d350 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4d 6f 64  l);..  rc = pMod
2d360 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75  ule->xColumn(pCu
2d370 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  r->pVtabCursor, 
2d380 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e  &sContext, pOp->
2d390 70 32 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61  p2);.  importVta
2d3a0 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62  bErrMsg(p, pVtab
2d3b0 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78  );.  if( sContex
2d3c0 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  t.isError ){.   
2d3d0 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69   rc = sContext.i
2d3e0 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  sError;.  }..  /
2d3f0 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
2d400 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
2d410 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65 67 69  n to the P3 regi
2d420 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f  ster. We.  ** do
2d430 20 74 68 69 73 20 72 65 67 61 72 64 6c 65 73 73   this regardless
2d440 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
2d450 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  ot an error occu
2d460 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20 61  rred to ensure a
2d470 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20  ny.  ** dynamic 
2d480 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43  allocation in sC
2d490 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d 20  ontext.s (a Mem 
2d4a0 73 74 72 75 63 74 29 20 69 73 20 20 72 65 6c 65  struct) is  rele
2d4b0 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  ased..  */.  sql
2d4c0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2d4d0 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78 74  coding(&sContext
2d4e0 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  .s, encoding);. 
2d4f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
2d500 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43 6f 6e  ove(pDest, &sCon
2d510 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47 49 53  text.s);.  REGIS
2d520 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
2d530 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44  3, pDest);.  UPD
2d540 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2d550 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20  (pDest);..  if( 
2d560 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2d570 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
2d580 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2d590 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2d5a0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2d5b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2d5c0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2d5d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2d5e0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2d5f0 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
2d600 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
2d610 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
2d620 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
2d630 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
2d640 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
2d650 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2d660 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
2d670 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
2d680 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
2d690 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
2d6a0 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
2d6b0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2d6c0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2d6d0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
2d6e0 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
2d6f0 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
2d700 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
2d710 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2d720 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
2d730 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75  nt res;.  VdbeCu
2d740 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72  rsor *pCur;..  r
2d750 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d  es = 0;.  pCur =
2d760 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2d770 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2d780 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
2d790 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
2d7a0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72  ullRow ){.    br
2d7b0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
2d7c0 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
2d7d0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
2d7e0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
2d7f0 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
2d800 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78  t( pModule->xNex
2d810 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  t );..  /* Invok
2d820 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65  e the xNext() me
2d830 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
2d840 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20  le. There is no 
2d850 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  way for the.  **
2d860 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c   underlying impl
2d870 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65  ementation to re
2d880 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66  turn an error if
2d890 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69   one occurs duri
2d8a0 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e  ng.  ** xNext().
2d8b0 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20   Instead, if an 
2d8c0 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72  error occurs, tr
2d8d0 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28  ue is returned (
2d8e0 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
2d8f0 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76  .  ** data is av
2d900 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65  ailable) and the
2d910 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75   error code retu
2d920 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d  rned when xColum
2d930 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f  n or.  ** some o
2d940 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e  ther method is n
2d950 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74  ext invoked on t
2d960 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20  he save virtual 
2d970 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20  table cursor..  
2d980 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  */.  p->inVtabMe
2d990 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  thod = 1;.  rc =
2d9a0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28   pModule->xNext(
2d9b0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2d9c0 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  r);.  p->inVtabM
2d9d0 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 69 6d 70  ethod = 0;.  imp
2d9e0 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2d9f0 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72   pVtab);.  if( r
2da00 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2da10 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
2da20 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56  e->xEof(pCur->pV
2da30 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  tabCursor);.  }.
2da40 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20  .  if( !res ){. 
2da50 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
2da60 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20  s data, jump to 
2da70 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70  P2 */.    pc = p
2da80 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2da90 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2daa0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2dab0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2dac0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2dad0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2dae0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52  LE./* Opcode: VR
2daf0 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20  ename P1 * * P4 
2db00 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
2db10 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
2db20 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
2db30 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
2db40 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
2db50 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
2db60 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70  okes the corresp
2db70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d  onding xRename m
2db80 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65  ethod. The value
2db90 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20  .** in register 
2dba0 50 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20  P1 is passed as 
2dbb0 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65  the zName argume
2dbc0 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d  nt to the xRenam
2dbd0 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73  e method..*/.cas
2dbe0 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a  e OP_VRename: {.
2dbf0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2dc00 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e  pVtab;.  Mem *pN
2dc10 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20  ame;..  pVtab = 
2dc20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
2dc30 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20  Vtab;.  pName = 
2dc40 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2dc50 20 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d    assert( pVtab-
2dc60 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
2dc70 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  e );.  assert( m
2dc80 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29  emIsValid(pName)
2dc90 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
2dca0 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e  RACE(pOp->p1, pN
2dcb0 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ame);.  assert( 
2dcc0 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d  pName->flags & M
2dcd0 45 4d 5f 53 74 72 20 29 3b 0a 20 20 72 63 20 3d  EM_Str );.  rc =
2dce0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
2dcf0 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20  >xRename(pVtab, 
2dd00 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 69 6d 70  pName->z);.  imp
2dd10 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2dd20 20 70 56 74 61 62 29 3b 0a 20 20 70 2d 3e 65 78   pVtab);.  p->ex
2dd30 70 69 72 65 64 20 3d 20 30 3b 0a 0a 20 20 62 72  pired = 0;..  br
2dd40 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
2dd50 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2dd60 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2dd70 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61  /* Opcode: VUpda
2dd80 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  te P1 P2 P3 P4 *
2dd90 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
2dda0 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
2ddb0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
2ddc0 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
2ddd0 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
2dde0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
2ddf0 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
2de00 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65  nding xUpdate me
2de10 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a  thod. P2 values.
2de20 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75  ** are contiguou
2de30 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73  s memory cells s
2de40 74 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f  tarting at P3 to
2de50 20 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70   pass to the xUp
2de60 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74  date .** invocat
2de70 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69  ion. The value i
2de80 6e 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50  n register (P3+P
2de90 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73  2-1) corresponds
2dea0 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68   to the .** p2th
2deb0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
2dec0 61 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65  argv array passe
2ded0 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a  d to xUpdate..**
2dee0 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20  .** The xUpdate 
2def0 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61  method will do a
2df00 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e   DELETE or an IN
2df10 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a  SERT or both..**
2df20 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65   The argv[0] ele
2df30 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72  ment (which corr
2df40 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72  esponds to memor
2df50 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73  y cell P3).** is
2df60 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20   the rowid of a 
2df70 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20  row to delete.  
2df80 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55  If argv[0] is NU
2df90 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64  LL then no .** d
2dfa0 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20  eletion occurs. 
2dfb0 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65   The argv[1] ele
2dfc0 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69  ment is the rowi
2dfd0 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a  d of the new .**
2dfe0 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20   row.  This can 
2dff0 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20  be NULL to have 
2e000 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
2e010 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77  e select the new
2e020 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69   .** rowid for i
2e030 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73  tself.  The subs
2e040 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20  equent elements 
2e050 69 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65  in the array are
2e060 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
2e070 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
2e080 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  e new row..**.**
2e090 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e   If P2==1 then n
2e0a0 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66  o insert is perf
2e0b0 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20  ormed.  argv[0] 
2e0c0 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a  is the rowid of.
2e0d0 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65  ** a row to dele
2e0e0 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  te..**.** P1 is 
2e0f0 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20  a boolean flag. 
2e100 49 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  If it is set to 
2e110 74 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70  true and the xUp
2e120 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20  date call.** is 
2e130 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e  successful, then
2e140 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72   the value retur
2e150 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c  ned by sqlite3_l
2e160 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
2e170 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f  () .** is set to
2e180 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
2e190 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20  e rowid for the 
2e1a0 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65  row just inserte
2e1b0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55  d..*/.case OP_VU
2e1c0 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74  pdate: {.  sqlit
2e1d0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2e1e0 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65    sqlite3_module
2e1f0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
2e200 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a   nArg;.  int i;.
2e210 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72    sqlite_int64 r
2e220 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  owid;.  Mem **ap
2e230 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a  Arg;.  Mem *pX;.
2e240 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
2e250 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
2e260 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71  .  pModule = (sq
2e270 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70  lite3_module *)p
2e280 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2e290 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b   nArg = pOp->p2;
2e2a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e2b0 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20  p4type==P4_VTAB 
2e2c0 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
2e2d0 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65  pModule->xUpdate
2e2e0 29 20 29 7b 0a 20 20 20 20 61 70 41 72 67 20 3d  ) ){.    apArg =
2e2f0 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70   p->apArg;.    p
2e300 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  X = &aMem[pOp->p
2e310 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  3];.    for(i=0;
2e320 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
2e330 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
2e340 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20  IsValid(pX) );. 
2e350 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
2e360 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20  hange(p, pX);.  
2e370 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2e380 65 6d 53 74 6f 72 65 54 79 70 65 28 70 58 29 3b  emStoreType(pX);
2e390 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
2e3a0 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b  = pX;.      pX++
2e3b0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d  ;.    }.    rc =
2e3c0 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74   pModule->xUpdat
2e3d0 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61  e(pVtab, nArg, a
2e3e0 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20  pArg, &rowid);. 
2e3f0 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72     importVtabErr
2e400 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  Msg(p, pVtab);. 
2e410 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2e420 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20  E_OK && pOp->p1 
2e430 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
2e440 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67   nArg>1 && apArg
2e450 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d  [0] && (apArg[0]
2e460 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
2e470 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c  ) );.      db->l
2e480 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64  astRowid = rowid
2e490 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 6e  ;.    }.    p->n
2e4a0 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 7d 0a 20 20  Change++;.  }.  
2e4b0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2e4c0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2e4d0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2e4e0 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  #ifndef  SQLITE_
2e4f0 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
2e500 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  AS./* Opcode: Pa
2e510 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20  gecount P1 P2 * 
2e520 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
2e530 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62  the current numb
2e540 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64  er of pages in d
2e550 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65  atabase P1 to me
2e560 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f  mory cell P2..*/
2e570 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75  .case OP_Pagecou
2e580 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
2e590 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
2e5a0 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75  ase */.  pOut->u
2e5b0 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  .i = sqlite3Btre
2e5c0 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44  eLastPage(db->aD
2e5d0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b  b[pOp->p1].pBt);
2e5e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2e5f0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2e600 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a  TE_OMIT_TRACE./*
2e610 20 4f 70 63 6f 64 65 3a 20 54 72 61 63 65 20 2a   Opcode: Trace *
2e620 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2e630 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e  If tracing is en
2e640 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71  abled (by the sq
2e650 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69  lite3_trace()) i
2e660 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a  nterface, then.*
2e670 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69  * the UTF-8 stri
2e680 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ng contained in 
2e690 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e  P4 is emitted on
2e6a0 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62   the trace callb
2e6b0 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ack..*/.case OP_
2e6c0 54 72 61 63 65 3a 20 7b 0a 20 20 63 68 61 72 20  Trace: {.  char 
2e6d0 2a 7a 54 72 61 63 65 3b 0a 0a 20 20 7a 54 72 61  *zTrace;..  zTra
2e6e0 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
2e6f0 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
2e700 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54  >zSql);.  if( zT
2e710 72 61 63 65 20 29 7b 0a 20 20 20 20 69 66 28 20  race ){.    if( 
2e720 64 62 2d 3e 78 54 72 61 63 65 20 29 7b 0a 20 20  db->xTrace ){.  
2e730 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 73 71      char *z = sq
2e740 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e 64 53  lite3VdbeExpandS
2e750 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20  ql(p, zTrace);. 
2e760 20 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28       db->xTrace(
2e770 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a  db->pTraceArg, z
2e780 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
2e790 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20  DbFree(db, z);. 
2e7a0 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49     }.#ifdef SQLI
2e7b0 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
2e7c0 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
2e7d0 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d  LITE_SqlTrace)!=
2e7e0 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
2e7f0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22 53  e3DebugPrintf("S
2e800 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c  QL-trace: %s\n",
2e810 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a   zTrace);.    }.
2e820 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2e830 5f 44 45 42 55 47 20 2a 2f 0a 20 20 7d 0a 20 20  _DEBUG */.  }.  
2e840 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2e850 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f  ../* Opcode: Noo
2e860 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  p * * * * *.**.*
2e870 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54  * Do nothing.  T
2e880 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2e890 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20  is often useful 
2e8a0 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73  as a jump.** des
2e8b0 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a  tination..*/./*.
2e8c0 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78 70  ** The magic Exp
2e8d0 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20  lain opcode are 
2e8e0 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68  only inserted wh
2e8f0 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77  en explain==2 (w
2e900 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61  hich.** is to sa
2e910 79 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41  y when the EXPLA
2e920 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79  IN QUERY PLAN sy
2e930 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a  ntax is used.).*
2e940 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65  * This opcode re
2e950 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  cords informatio
2e960 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d  n from the optim
2e970 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68 65  izer.  It is the
2e980 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20  .** the same as 
2e990 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f  a no-op.  This o
2e9a0 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65  pcodesnever appe
2e9b0 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d  ars in a real VM
2e9c0 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66   program..*/.def
2e9d0 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ault: {         
2e9e0 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c   /* This is real
2e9f0 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f  ly OP_Noop and O
2ea00 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61  P_Explain */.  a
2ea10 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2ea20 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70  de==OP_Noop || p
2ea30 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
2ea40 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61  xplain );.  brea
2ea50 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  k;.}../*********
2ea60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2eaa0 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65  ****.** The case
2eab0 73 20 6f 66 20 74 68 65 20 73 77 69 74 63 68 20  s of the switch 
2eac0 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20  statement above 
2ead0 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64  this line should
2eae0 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64   all be indented
2eaf0 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e  .** by 6 spaces.
2eb00 20 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d    But the left-m
2eb10 6f 73 74 20 36 20 73 70 61 63 65 73 20 68 61 76  ost 6 spaces hav
2eb20 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74  e been removed t
2eb30 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a  o improve the.**
2eb40 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46   readability.  F
2eb50 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f  rom this point o
2eb60 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d  n down, the norm
2eb70 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72  al indentation r
2eb80 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74  ules are.** rest
2eb90 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ored..**********
2eba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ebb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ebc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ebd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ebe0 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64  ***/.    }..#ifd
2ebf0 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
2ec00 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20      {.      u64 
2ec10 65 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65  elapsed = sqlite
2ec20 33 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72  3Hwtime() - star
2ec30 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79  t;.      pOp->cy
2ec40 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b  cles += elapsed;
2ec50 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b  .      pOp->cnt+
2ec60 2b 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20  +;.#if 0.       
2ec70 20 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c   fprintf(stdout,
2ec80 20 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70   "%10llu ", elap
2ec90 73 65 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71  sed);.        sq
2eca0 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
2ecb0 28 73 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c  (stdout, origPc,
2ecc0 20 26 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a   &aOp[origPc]);.
2ecd0 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e  #endif.    }.#en
2ece0 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  dif..    /* The 
2ecf0 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61  following code a
2ed00 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74  dds nothing to t
2ed10 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69  he actual functi
2ed20 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f  onality.    ** o
2ed30 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20  f the program.  
2ed40 49 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20  It is only here 
2ed50 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20  for testing and 
2ed60 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a  debugging..    *
2ed70 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68  * On the other h
2ed80 61 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72  and, it does bur
2ed90 6e 20 43 50 55 20 63 79 63 6c 65 73 20 65 76 65  n CPU cycles eve
2eda0 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a  ry time through.
2edb0 20 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75      ** the evalu
2edc0 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77  ator loop.  So w
2edd0 65 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f  e can leave it o
2ede0 75 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69  ut when NDEBUG i
2edf0 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a  s defined..    *
2ee00 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  /.#ifndef NDEBUG
2ee10 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e  .    assert( pc>
2ee20 3d 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70  =-1 && pc<p->nOp
2ee30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
2ee40 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
2ee50 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20   p->trace ){.   
2ee60 20 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 66     if( rc!=0 ) f
2ee70 70 72 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c  printf(p->trace,
2ee80 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20  "rc=%d\n",rc);. 
2ee90 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70       if( pOp->op
2eea0 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f  flags & (OPFLG_O
2eeb0 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f  UT2_PRERELEASE|O
2eec0 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20  PFLG_OUT2) ){.  
2eed0 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
2eee0 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f  ace(p->trace, pO
2eef0 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p2, &aMem[pOp
2ef00 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p2]);.      }.
2ef10 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f        if( pOp->o
2ef20 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
2ef30 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72  UT3 ){.        r
2ef40 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e  egisterTrace(p->
2ef50 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20  trace, pOp->p3, 
2ef60 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
2ef70 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
2ef80 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45  endif  /* SQLITE
2ef90 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66  _DEBUG */.#endif
2efa0 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20    /* NDEBUG */. 
2efb0 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f   }  /* The end o
2efc0 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f  f the for(;;) lo
2efd0 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72  op the loops thr
2efe0 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a  ough opcodes */.
2eff0 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63  .  /* If we reac
2f000 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74  h this point, it
2f010 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63   means that exec
2f020 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65  ution is finishe
2f030 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65  d with.  ** an e
2f040 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e  rror of some kin
2f050 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72  d..  */.vdbe_err
2f060 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72  or_halt:.  asser
2f070 74 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63  t( rc );.  p->rc
2f080 20 3d 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73   = rc;.  testcas
2f090 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  e( sqlite3Global
2f0a0 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29  Config.xLog!=0 )
2f0b0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ;.  sqlite3_log(
2f0c0 72 63 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61  rc, "statement a
2f0d0 62 6f 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73  borts at %d: [%s
2f0e0 5d 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20  ] %s", .        
2f0f0 20 20 20 20 20 20 20 20 20 20 20 70 63 2c 20 70             pc, p
2f100 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d  ->zSql, p->zErrM
2f110 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  sg);.  sqlite3Vd
2f120 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28  beHalt(p);.  if(
2f130 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52   rc==SQLITE_IOER
2f140 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61  R_NOMEM ) db->ma
2f150 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
2f160 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
2f170 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74  ROR;.  if( reset
2f180 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 29 20  SchemaOnFault ) 
2f190 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65  sqlite3ResetInte
2f1a0 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30  rnalSchema(db, 0
2f1b0 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73  );..  /* This is
2f1c0 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75   the only way ou
2f1d0 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64  t of this proced
2f1e0 75 72 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f  ure.  We have to
2f1f0 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68  .  ** release th
2f200 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72  e mutexes on btr
2f210 65 65 73 20 74 68 61 74 20 77 65 72 65 20 61 63  ees that were ac
2f220 71 75 69 72 65 64 20 61 74 20 74 68 65 0a 20 20  quired at the.  
2f230 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f  ** top. */.vdbe_
2f240 72 65 74 75 72 6e 3a 0a 20 20 73 71 6c 69 74 65  return:.  sqlite
2f250 33 42 74 72 65 65 4d 75 74 65 78 41 72 72 61 79  3BtreeMutexArray
2f260 4c 65 61 76 65 28 26 70 2d 3e 61 4d 75 74 65 78  Leave(&p->aMutex
2f270 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
2f280 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
2f290 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f  re if a string o
2f2a0 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68  r blob larger th
2f2b0 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  an SQLITE_MAX_LE
2f2c0 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63  NGTH.  ** is enc
2f2d0 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74  ountered..  */.t
2f2e0 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65  oo_big:.  sqlite
2f2f0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2f300 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72  ErrMsg, db, "str
2f310 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20  ing or blob too 
2f320 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51  big");.  rc = SQ
2f330 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67  LITE_TOOBIG;.  g
2f340 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
2f350 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
2f360 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c  to here if a mal
2f370 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a  loc() fails..  *
2f380 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e  /.no_mem:.  db->
2f390 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
2f3a0 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  ;.  sqlite3SetSt
2f3b0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2f3c0 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65  , db, "out of me
2f3d0 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53  mory");.  rc = S
2f3e0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67  QLITE_NOMEM;.  g
2f3f0 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
2f400 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
2f410 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20  to here for any 
2f420 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61  other kind of fa
2f430 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20  tal error.  The 
2f440 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20  "rc" variable.  
2f450 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74  ** should hold t
2f460 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e  he error number.
2f470 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
2f480 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65  to_error:.  asse
2f490 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d  rt( p->zErrMsg==
2f4a0 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d  0 );.  if( db->m
2f4b0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63  allocFailed ) rc
2f4c0 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
2f4d0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
2f4e0 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b  E_IOERR_NOMEM ){
2f4f0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
2f500 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2f510 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
2f520 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
2f530 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65  .  }.  goto vdbe
2f540 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
2f550 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
2f560 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69  if the sqlite3_i
2f570 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73  nterrupt() API s
2f580 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70  ets the interrup
2f590 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a  t.  ** flag..  *
2f5a0 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69  /.abort_due_to_i
2f5b0 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65  nterrupt:.  asse
2f5c0 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  rt( db->u1.isInt
2f5d0 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63  errupted );.  rc
2f5e0 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
2f5f0 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  UPT;.  p->rc = r
2f600 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  c;.  sqlite3SetS
2f610 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2f620 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
2f630 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
2f640 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
2f650 6f 72 5f 68 61 6c 74 3b 0a 7d 0a                 or_halt;.}.