/ Hex Artifact Content
Login

Artifact 807532457744a264d19e929b2075dbec90d2a36d:


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 41 62 6f 75  lite3VdbeMemAbou
0940: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a 23  tToChange(P,M).#
0950: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d 65  else.# define me
0960: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 50  mAboutToChange(P
0970: 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,M).#endif../*.*
0980: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
0990: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
09a0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
09b0: 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72 73  very time a curs
09c0: 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69 74  or.** moves, eit
09d0: 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53 65  her by the OP_Se
09e0: 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20 6f  ekXX, OP_Next, o
09f0: 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64 65  r OP_Prev opcode
0a00: 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a 20  s.  The test.** 
0a10: 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20 74  procedures use t
0a20: 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
0a30: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  to make sure tha
0a40: 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a 2a  t indices are.**
0a50: 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74   working correct
0a60: 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61 62  ly.  This variab
0a70: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0a80: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0a90: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0aa0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0ab0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0ac0: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0ad0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ae0: 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
0af0: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
0b00: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69  ../*.** When thi
0b10: 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  s global variabl
0b20: 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20 69  e is positive, i
0b30: 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e 74  t gets decrement
0b40: 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a 2a  ed once before.*
0b50: 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74 69  * each instructi
0b60: 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e 20  on in the VDBE. 
0b70: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
0b80: 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73   zero, the u1.is
0b90: 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66  Interrupted.** f
0ba0: 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69  ield of the sqli
0bb0: 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73  te3 structure is
0bc0: 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f   set in order to
0bd0: 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74   simulate an 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 20 52 65 74 75 72 6e 20  em;}../* Return 
1620: 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72 73  true if the curs
1630: 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  or was opened us
1640: 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e 53  ing the OP_OpenS
1650: 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a 2f  orter opcode. */
1660: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1670: 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 23  MIT_MERGE_SORT.#
1680: 20 64 65 66 69 6e 65 20 69 73 53 6f 72 74 65 72   define isSorter
1690: 28 78 29 20 30 0a 23 65 6c 73 65 0a 23 20 64 65  (x) 0.#else.# de
16a0: 66 69 6e 65 20 69 73 53 6f 72 74 65 72 28 78 29  fine isSorter(x)
16b0: 20 28 28 78 29 2d 3e 70 53 6f 72 74 65 72 21 3d   ((x)->pSorter!=
16c0: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
16d0: 20 41 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70   Argument pMem p
16e0: 6f 69 6e 74 73 20 61 74 20 61 20 72 65 67 69 73  oints at a regis
16f0: 74 65 72 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ter that will be
1700: 20 70 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20   passed to a.** 
1710: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
1720: 63 74 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65  ction or returne
1730: 64 20 74 6f 20 74 68 65 20 75 73 65 72 20 61 73  d to the user as
1740: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   the result of a
1750: 20 71 75 65 72 79 2e 0a 2a 2a 20 54 68 69 73 20   query..** This 
1760: 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65  routine sets the
1770: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 76 61 72 69   pMem->type vari
1780: 61 62 6c 65 20 75 73 65 64 20 62 79 20 74 68 65  able used by the
1790: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a   sqlite3_value_*
17a0: 28 29 20 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 2e  () .** routines.
17b0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
17c0: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
17d0: 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69  (Mem *pMem){.  i
17e0: 6e 74 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d  nt flags = pMem-
17f0: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 66 6c  >flags;.  if( fl
1800: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
1810: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
1820: 20 3d 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a   = SQLITE_NULL;.
1830: 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66    }.  else if( f
1840: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1850: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
1860: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45   = SQLITE_INTEGE
1870: 52 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66  R;.  }.  else if
1880: 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ( flags & MEM_Re
1890: 61 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  al ){.    pMem->
18a0: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c  type = SQLITE_FL
18b0: 4f 41 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  OAT;.  }.  else 
18c0: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
18d0: 53 74 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  Str ){.    pMem-
18e0: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54  >type = SQLITE_T
18f0: 45 58 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  EXT;.  }else{.  
1900: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1910: 51 4c 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a  QLITE_BLOB;.  }.
1920: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  }../*.** Allocat
1930: 65 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d  e VdbeCursor num
1940: 62 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72  ber iCur.  Retur
1950: 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  n a pointer to i
1960: 74 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a  t.  Return NULL.
1970: 2a 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74  ** if we run out
1980: 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73   of memory..*/.s
1990: 74 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72  tatic VdbeCursor
19a0: 20 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72   *allocateCursor
19b0: 28 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20  (.  Vdbe *p,    
19c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19d0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
19e0: 20 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20   */.  int iCur, 
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1a00: 6e 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20  ndex of the new 
1a10: 56 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20  VdbeCursor */.  
1a20: 69 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20  int nField,     
1a30: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a40: 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1a50: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1a60: 2a 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20  */.  int iDb,   
1a70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
1a80: 74 61 62 61 73 65 20 74 68 65 20 63 75 72 73 6f  tabase the curso
1a90: 72 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72  r belongs to, or
1aa0: 20 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42   -1 */.  int isB
1ab0: 74 72 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f  treeCursor     /
1ac0: 2a 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65  * True for B-Tre
1ad0: 65 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73  e.  False for ps
1ae0: 65 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74  eudo-table or vt
1af0: 61 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69  ab */.){.  /* Fi
1b00: 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  nd the memory ce
1b10: 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ll that will be 
1b20: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
1b30: 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79  e blob of memory
1b40: 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66  .  ** required f
1b50: 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72 73  or this VdbeCurs
1b60: 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49 74  or structure. It
1b70: 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74   is convenient t
1b80: 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64  o use a .  ** vd
1b90: 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  be memory cell t
1ba0: 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d  o manage the mem
1bb0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72  ory allocation r
1bc0: 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20  equired for a.  
1bd0: 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  ** VdbeCursor st
1be0: 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65 20  ructure for the 
1bf0: 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e  following reason
1c00: 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a  s:.  **.  **   *
1c10: 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f   Sometimes curso
1c20: 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73  r numbers are us
1c30: 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20  ed for a couple 
1c40: 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a  of different.  *
1c50: 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20 69  *     purposes i
1c60: 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d  n a vdbe program
1c70: 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74 20  . The different 
1c80: 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75 69  uses might requi
1c90: 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66  re.  **     diff
1ca0: 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f  erent sized allo
1cb0: 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20  cations. Memory 
1cc0: 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72  cells provide gr
1cd0: 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20  owable.  **     
1ce0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a  allocations..  *
1cf0: 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20  *.  **   * When 
1d00: 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d  using ENABLE_MEM
1d10: 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20  ORY_MANAGEMENT, 
1d20: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66  memory cell buff
1d30: 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20  ers can.  **    
1d40: 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79   be freed lazily
1d50: 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 33   via the sqlite3
1d60: 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
1d70: 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a  ) API. This.  **
1d80: 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74       minimizes t
1d90: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c  he number of mal
1da0: 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62  loc calls made b
1db0: 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20  y the system..  
1dc0: 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63  **.  ** Memory c
1dd0: 65 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73  ells for cursors
1de0: 20 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61   are allocated a
1df0: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
1e00: 20 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70   address.  ** sp
1e10: 61 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c  ace. Memory cell
1e20: 20 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65   (p->nMem) corre
1e30: 73 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72  sponds to cursor
1e40: 20 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20   0. Space for.  
1e50: 2a 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d  ** cursor 1 is m
1e60: 61 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79  anaged by memory
1e70: 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31   cell (p->nMem-1
1e80: 29 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d  ), etc..  */.  M
1e90: 65 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61  em *pMem = &p->a
1ea0: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72  Mem[p->nMem-iCur
1eb0: 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b  ];..  int nByte;
1ec0: 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ed0: 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20  Cx = 0;.  nByte 
1ee0: 3d 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28  = .      ROUND8(
1ef0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
1f00: 72 29 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73  r)) + .      (is
1f10: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1f20: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1f30: 7a 65 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20  ze():0) + .     
1f40: 20 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66   2*nField*sizeof
1f50: 28 75 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74  (u32);..  assert
1f60: 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  ( iCur<p->nCurso
1f70: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
1f80: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
1f90: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1fa0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1fb0: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
1fc0: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
1fd0: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
1fe0: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
1ff0: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c  dbeMemGrow(pMem,
2000: 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20   nByte, 0) ){.  
2010: 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d    p->apCsr[iCur]
2020: 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43 75   = pCx = (VdbeCu
2030: 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20  rsor*)pMem->z;. 
2040: 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30     memset(pCx, 0
2050: 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  , sizeof(VdbeCur
2060: 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e  sor));.    pCx->
2070: 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70  iDb = iDb;.    p
2080: 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69  Cx->nField = nFi
2090: 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69  eld;.    if( nFi
20a0: 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78  eld ){.      pCx
20b0: 2d 3e 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a  ->aType = (u32 *
20c0: 29 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38  )&pMem->z[ROUND8
20d0: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
20e0: 6f 72 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20  or))];.    }.   
20f0: 20 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73   if( isBtreeCurs
2100: 6f 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  or ){.      pCx-
2110: 3e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75  >pCursor = (BtCu
2120: 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
2130: 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38   &pMem->z[ROUND8
2140: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
2150: 6f 72 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69  or))+2*nField*si
2160: 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20  zeof(u32)];.    
2170: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
2180: 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43  rsorZero(pCx->pC
2190: 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
21a0: 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a  }.  return pCx;.
21b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20  }../*.** Try to 
21c0: 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20  convert a value 
21d0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
21e0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
21f0: 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f   we can.** do so
2200: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
2210: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49   information.  I
2220: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
2230: 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20  f the string.** 
2240: 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d  looks like a num
2250: 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ber, convert it 
2260: 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20  into a number.  
2270: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a  If it does not.*
2280: 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75  * look like a nu
2290: 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61  mber, leave it a
22a0: 6c 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  lone..*/.static 
22b0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
22c0: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
22d0: 52 65 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65  Rec){.  if( (pRe
22e0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
22f0: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d  Real|MEM_Int))==
2300: 30 20 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20  0 ){.    double 
2310: 72 56 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20  rValue;.    i64 
2320: 69 56 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65  iValue;.    u8 e
2330: 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a  nc = pRec->enc;.
2340: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2350: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30  lags&MEM_Str)==0
2360: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69   ) return;.    i
2370: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
2380: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
2390: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d   pRec->n, enc)==
23a0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  0 ) return;.    
23b0: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74  if( 0==sqlite3At
23c0: 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69  oi64(pRec->z, &i
23d0: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
23e0: 65 6e 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52  enc) ){.      pR
23f0: 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65  ec->u.i = iValue
2400: 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c  ;.      pRec->fl
2410: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
2420: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2430: 20 70 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75   pRec->r = rValu
2440: 65 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66  e;.      pRec->f
2450: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c  lags |= MEM_Real
2460: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
2470: 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  *.** Processing 
2480: 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20  is determine by 
2490: 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72  the affinity par
24a0: 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51  ameter:.**.** SQ
24b0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
24c0: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
24d0: 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  REAL:.** SQLITE_
24e0: 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20  AFF_NUMERIC:.** 
24f0: 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72     Try to conver
2500: 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74  t pRec to an int
2510: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2520: 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20  ion or a .**    
2530: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72  floating-point r
2540: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
2550: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
2560: 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20  esentation.**   
2570: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
2580: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
2590: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
25a0: 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20  ntation is.**   
25b0: 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65   always preferre
25c0: 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61  d, even if the a
25d0: 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c  ffinity is REAL,
25e0: 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61   because.**    a
25f0: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2600: 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65  entation is more
2610: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74   space efficient
2620: 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20   on disk..**.** 
2630: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a  SQLITE_AFF_TEXT:
2640: 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70  .**    Convert p
2650: 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65  Rec to a text re
2660: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  presentation..**
2670: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  .** SQLITE_AFF_N
2680: 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70  ONE:.**    No-op
2690: 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61  .  pRec is uncha
26a0: 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nged..*/.static 
26b0: 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69  void applyAffini
26c0: 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c  ty(.  Mem *pRec,
26d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
26e0: 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20   value to apply 
26f0: 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20  affinity to */. 
2700: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20   char affinity, 
2710: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
2720: 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
2730: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20  ed */.  u8 enc  
2740: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
2750: 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63  se this text enc
2760: 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66  oding */.){.  if
2770: 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  ( affinity==SQLI
2780: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20  TE_AFF_TEXT ){. 
2790: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d     /* Only attem
27a0: 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  pt the conversio
27b0: 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68 65  n to TEXT if the
27c0: 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  re is an integer
27d0: 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20   or real.    ** 
27e0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28  representation (
27f0: 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f  blob and NULL do
2800: 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74   not get convert
2810: 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e  ed) but no strin
2820: 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65  g.    ** represe
2830: 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a  ntation..    */.
2840: 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63      if( 0==(pRec
2850: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29  ->flags&MEM_Str)
2860: 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73   && (pRec->flags
2870: 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49  &(MEM_Real|MEM_I
2880: 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71  nt)) ){.      sq
2890: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
28a0: 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29  ngify(pRec, enc)
28b0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63  ;.    }.    pRec
28c0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
28d0: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a  _Real|MEM_Int);.
28e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69    }else if( affi
28f0: 6e 69 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46  nity!=SQLITE_AFF
2900: 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73  _NONE ){.    ass
2910: 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53  ert( affinity==S
2920: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
2930: 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53  R || affinity==S
2940: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20  QLITE_AFF_REAL. 
2950: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61              || a
2960: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2970: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20  AFF_NUMERIC );. 
2980: 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
2990: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
29a0: 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
29b0: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
29c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
29d0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
29e0: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20  y(pRec);.    }. 
29f0: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20   }.}../*.** Try 
2a00: 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74  to convert the t
2a10: 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ype of a functio
2a20: 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20  n argument or a 
2a30: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a  result column.**
2a40: 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20   into a numeric 
2a50: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20  representation. 
2a60: 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45   Use either INTE
2a70: 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63  GER or REAL whic
2a80: 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72  hever.** is appr
2a90: 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e  opriate.  But on
2aa0: 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72  ly do the conver
2ab0: 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f  sion if it is po
2ac0: 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a  ssible without.*
2ad0: 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
2ae0: 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e  ation and return
2af0: 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70   the revised typ
2b00: 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e of the argumen
2b10: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
2b20: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
2b30: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
2b40: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d  ue *pVal){.  Mem
2b50: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
2b60: 56 61 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d  Val;.  if( pMem-
2b70: 3e 74 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45  >type==SQLITE_TE
2b80: 58 54 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e  XT ){.    applyN
2b90: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
2ba0: 4d 65 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Mem);.    sqlite
2bb0: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
2bc0: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
2bd0: 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65  eturn pMem->type
2be0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
2bf0: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
2c00: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
2c10: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
2c20: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
2c30: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
2c40: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
2c50: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2c60: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2c70: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
2c80: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
2c90: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
2ca0: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
2cb0: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
2cc0: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
2cd0: 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  enc);.}..#ifdef 
2ce0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
2cf0: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
2d00: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2d10: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
2d20: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
2d30: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
2d40: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
2d50: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
2d60: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
2d70: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
2d80: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
2d90: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
2da0: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
2db0: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
2dc0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2dd0: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
2de0: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
2df0: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
2e00: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
2e10: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
2e20: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
2e30: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
2e40: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
2e50: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
2e60: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2e70: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
2e80: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
2e90: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
2ea0: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
2eb0: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
2ec0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2ed0: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
2ee0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
2ef0: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
2f00: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
2f10: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
2f20: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
2f30: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
2f40: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
2f50: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
2f60: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
2f70: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
2f80: 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a  zCsr, "%c", c);.
2f90: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
2fa0: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
2fb0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  );.    sqlite3_s
2fc0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
2fd0: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
2fe0: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
2ff0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3000: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
3010: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
3020: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
3030: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3040: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
3050: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
3060: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
3070: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3080: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3090: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
30a0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
30b0: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
30c0: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
30d0: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
30e0: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
30f0: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
3100: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
3110: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
3120: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
3130: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3140: 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63  zCsr, "]%s", enc
3150: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3160: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3170: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3180: 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20  Csr);.    if( f 
3190: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
31a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
31b0: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22  intf(100, zCsr,"
31c0: 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a  +%dz",pMem->u.nZ
31d0: 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  ero);.      zCsr
31e0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
31f0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3200: 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30  .    *zCsr = '\0
3210: 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66  ';.  }else if( f
3220: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
3230: 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20    int j, k;.    
3240: 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20  zBuf[0] = ' ';. 
3250: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
3260: 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  yn ){.      zBuf
3270: 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20  [1] = 'z';.     
3280: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3290: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
32a0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
32b0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
32c0: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
32d0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b    zBuf[1] = 't';
32e0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
32f0: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
3300: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3310: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3320: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
3330: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65      zBuf[1] = 'e
3340: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
3350: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3360: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
3370: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3380: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27     zBuf[1] = 's'
3390: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20  ;.    }.    k = 
33a0: 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  2;.    sqlite3_s
33b0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42  nprintf(100, &zB
33c0: 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65  uf[k], "%d", pMe
33d0: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  m->n);.    k += 
33e0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
33f0: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3400: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a  Buf[k++] = '[';.
3410: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31      for(j=0; j<1
3420: 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && j<pMem->n; 
3430: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63  j++){.      u8 c
3440: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20   = pMem->z[j];. 
3450: 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30       if( c>=0x20
3460: 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20   && c<0x7f ){.  
3470: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
3480: 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = c;.      }else
3490: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
34a0: 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++] = '.';.     
34b0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75   }.    }.    zBu
34c0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20  f[k++] = ']';.  
34d0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
34e0: 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c  tf(100,&zBuf[k],
34f0: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
3500: 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  enc]);.    k += 
3510: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3520: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3530: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20  Buf[k++] = 0;.  
3540: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  }.}.#endif..#ifd
3550: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3560: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20  /*.** Print the 
3570: 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73  value of a regis
3580: 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20  ter for tracing 
3590: 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61  purposes:.*/.sta
35a0: 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63  tic void memTrac
35b0: 65 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74  ePrint(FILE *out
35c0: 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28  , Mem *p){.  if(
35d0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
35e0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72 69  Null ){.    fpri
35f0: 6e 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c 22  ntf(out, " NULL"
3600: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3610: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3620: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3630: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3640: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
3650: 6f 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22 2c  out, " si:%lld",
3660: 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73   p->u.i);.  }els
3670: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
3680: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
3690: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 69  fprintf(out, " i
36a0: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
36b0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
36c0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
36d0: 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  INT.  }else if( 
36e0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
36f0: 65 61 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  eal ){.    fprin
3700: 74 66 28 6f 75 74 2c 20 22 20 72 3a 25 67 22 2c  tf(out, " r:%g",
3710: 20 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20   p->r);.#endif. 
3720: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3730: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
3740: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
3750: 6f 75 74 2c 20 22 20 28 72 6f 77 73 65 74 29 22  out, " (rowset)"
3760: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
3770: 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a  char zBuf[200];.
3780: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
3790: 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c  emPrettyPrint(p,
37a0: 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72 69   zBuf);.    fpri
37b0: 6e 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a 20  ntf(out, " ");. 
37c0: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
37d0: 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d  "%s", zBuf);.  }
37e0: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72  .}.static void r
37f0: 65 67 69 73 74 65 72 54 72 61 63 65 28 46 49 4c  egisterTrace(FIL
3800: 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65 67  E *out, int iReg
3810: 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70 72  , Mem *p){.  fpr
3820: 69 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b 25  intf(out, "REG[%
3830: 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20  d] = ", iReg);. 
3840: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 6f   memTracePrint(o
3850: 75 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e 74  ut, p);.  fprint
3860: 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a  f(out, "\n");.}.
3870: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
3880: 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64  QLITE_DEBUG.#  d
3890: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
38a0: 52 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d 3e  RACE(R,M) if(p->
38b0: 74 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72  trace)registerTr
38c0: 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c 4d  ace(p->trace,R,M
38d0: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
38e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
38f0: 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23  (R,M).#endif...#
3900: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
3910: 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d  LE../* .** hwtim
3920: 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c  e.h contains inl
3930: 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f  ine assembler co
3940: 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  de for implement
3950: 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72  ing .** high-per
3960: 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20  formance timing 
3970: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e  routines..*/.#in
3980: 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22  clude "hwtime.h"
3990: 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ..#endif../*.** 
39a0: 54 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  The CHECK_FOR_IN
39b0: 54 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64 65  TERRUPT macro de
39c0: 66 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b 73  fined here looks
39d0: 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a 2a   to see if the.*
39e0: 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  * sqlite3_interr
39f0: 75 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68 61  upt() routine ha
3a00: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20 20  s been called.  
3a10: 49 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c 20  If it has been, 
3a20: 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73 69  then.** processi
3a30: 6e 67 20 6f 66 20 74 68 65 20 56 44 42 45 20 70  ng of the VDBE p
3a40: 72 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72 72  rogram is interr
3a50: 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  upted..**.** Thi
3a60: 73 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74 6f  s macro added to
3a70: 20 65 76 65 72 79 20 69 6e 73 74 72 75 63 74 69   every instructi
3a80: 6f 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20 6a  on that does a j
3a90: 75 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ump in order to.
3aa0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 6c  ** implement a l
3ab0: 6f 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74 20  oop.  This test 
3ac0: 75 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65 76  used to be on ev
3ad0: 65 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74 72  ery single instr
3ae0: 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74  uction,.** but t
3af0: 68 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f 72  hat meant we mor
3b00: 65 20 74 65 73 74 69 6e 67 20 74 68 61 6e 20 77  e testing than w
3b10: 65 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f 6e  e needed.  By on
3b20: 6c 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a 2a  ly testing the.*
3b30: 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20 69  * flag on jump i
3b40: 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65 20  nstructions, we 
3b50: 67 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73 70  get a (small) sp
3b60: 65 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74 2e  eed improvement.
3b70: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45 43  .*/.#define CHEC
3b80: 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 20  K_FOR_INTERRUPT 
3b90: 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  \.   if( db->u1.
3ba0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
3bb0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
3bc0: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 0a 23  o_interrupt;...#
3bd0: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a  ifndef NDEBUG./*
3be0: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
3bf0: 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64  n is only called
3c00: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
3c10: 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73  assert() express
3c20: 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b  ion. It.** check
3c30: 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74  s that the sqlit
3c40: 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20  e3.nTransaction 
3c50: 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72  variable is corr
3c60: 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20  ectly set to.** 
3c70: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  the number of no
3c80: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
3c90: 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74  vepoints current
3ca0: 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69  ly in the .** li
3cb0: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
3cc0: 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53  ng at sqlite3.pS
3cd0: 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a  avepoint..** .**
3ce0: 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20   Usage:.**.**   
3cf0: 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
3d00: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
3d10: 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ) );.*/.static i
3d20: 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  nt checkSavepoin
3d30: 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a  tCount(sqlite3 *
3d40: 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30  db){.  int n = 0
3d50: 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
3d60: 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53  ;.  for(p=db->pS
3d70: 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70  avepoint; p; p=p
3d80: 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20  ->pNext) n++;.  
3d90: 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e  assert( n==(db->
3da0: 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
3db0: 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
3dc0: 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65  vepoint) );.  re
3dd0: 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66  turn 1;.}.#endif
3de0: 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ../*.** Transfer
3df0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74   error message t
3e00: 65 78 74 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69  ext from an sqli
3e10: 74 65 33 5f 76 74 61 62 2e 7a 45 72 72 4d 73 67  te3_vtab.zErrMsg
3e20: 20 28 74 65 78 74 20 73 74 6f 72 65 64 0a 2a 2a   (text stored.**
3e30: 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   in memory obtai
3e40: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
3e50: 5f 6d 61 6c 6c 6f 63 29 20 69 6e 74 6f 20 61 20  _malloc) into a 
3e60: 56 64 62 65 2e 7a 45 72 72 4d 73 67 20 28 74 65  Vdbe.zErrMsg (te
3e70: 78 74 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20  xt stored.** in 
3e80: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
3e90: 66 72 6f 6d 20 73 71 6c 69 74 65 33 44 62 4d 61  from sqlite3DbMa
3ea0: 6c 6c 6f 63 29 2e 0a 2a 2f 0a 73 74 61 74 69 63  lloc)..*/.static
3eb0: 20 76 6f 69 64 20 69 6d 70 6f 72 74 56 74 61 62   void importVtab
3ec0: 45 72 72 4d 73 67 28 56 64 62 65 20 2a 70 2c 20  ErrMsg(Vdbe *p, 
3ed0: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
3ee0: 74 61 62 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  tab){.  sqlite3 
3ef0: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 73  *db = p->db;.  s
3f00: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
3f10: 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
3f20: 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
3f30: 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c  ite3DbStrDup(db,
3f40: 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 29   pVtab->zErrMsg)
3f50: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
3f60: 28 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 29  (pVtab->zErrMsg)
3f70: 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
3f80: 73 67 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  sg = 0;.}.../*.*
3f90: 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63  * Execute as muc
3fa0: 68 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67  h of a VDBE prog
3fb0: 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68  ram as we can th
3fc0: 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a  en return..**.**
3fd0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
3fe0: 52 65 61 64 79 28 29 20 6d 75 73 74 20 62 65 20  Ready() must be 
3ff0: 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68  called before th
4000: 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  is routine in or
4010: 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20  der to.** close 
4020: 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68  the program with
4030: 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74   a final OP_Halt
4040: 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74   and to set up t
4050: 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20  he callbacks.** 
4060: 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65  and the error me
4070: 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a  ssage pointer..*
4080: 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20  *.** Whenever a 
4090: 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61  row or result da
40a0: 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  ta is available,
40b0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
40c0: 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76  ll either.** inv
40d0: 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20 63  oke the result c
40e0: 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72  allback (if ther
40f0: 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74  e is one) or ret
4100: 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  urn with.** SQLI
4110: 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66  TE_ROW..**.** If
4120: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
4130: 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f  ade to open a lo
4140: 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20 74  cked database, t
4150: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
4160: 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20  .** will either 
4170: 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20  invoke the busy 
4180: 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65  callback (if the
4190: 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74  re is one) or it
41a0: 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20   will.** return 
41b0: 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a  SQLITE_BUSY..**.
41c0: 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f  ** If an error o
41d0: 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20  ccurs, an error 
41e0: 6d 65 73 73 61 67 65 20 69 73 20 77 72 69 74 74  message is writt
41f0: 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74  en to memory obt
4200: 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71  ained.** from sq
4210: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61  lite3_malloc() a
4220: 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73  nd p->zErrMsg is
4230: 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74   made to point t
4240: 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a  o that memory..*
4250: 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65  * The error code
4260: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d   is stored in p-
4270: 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75  >rc and this rou
4280: 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c  tine returns SQL
4290: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
42a0: 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b   If the callback
42b0: 20 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f   ever returns no
42c0: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
42d0: 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a   program exits.*
42e0: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  * immediately.  
42f0: 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f  There will be no
4300: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62   error message b
4310: 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65  ut the p->rc fie
4320: 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  ld is.** set to 
4330: 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64  SQLITE_ABORT and
4340: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
4350: 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ll return SQLITE
4360: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20  _ERROR..**.** A 
4370: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
4380: 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73 20 70  n error causes p
4390: 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20 74  ->rc to be set t
43a0: 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61  o SQLITE_NOMEM a
43b0: 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69  nd this.** routi
43c0: 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c  ne to return SQL
43d0: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
43e0: 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72 72   Other fatal err
43f0: 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ors return SQLIT
4400: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41  E_ERROR..**.** A
4410: 66 74 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e  fter this routin
4420: 65 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  e has finished, 
4430: 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c  sqlite3VdbeFinal
4440: 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a  ize() should be.
4450: 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e  ** used to clean
4460: 20 75 70 20 74 68 65 20 6d 65 73 73 20 74 68 61   up the mess tha
4470: 74 20 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e  t was left behin
4480: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
4490: 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62  3VdbeExec(.  Vdb
44a0: 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20  e *p            
44b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
44c0: 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  DBE */.){.  int 
44d0: 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20  pc=0;           
44e0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72         /* The pr
44f0: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f  ogram counter */
4500: 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e  .  Op *aOp = p->
4510: 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  aOp;          /*
4520: 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20   Copy of p->aOp 
4530: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20  */.  Op *pOp;   
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4550: 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61  /* Current opera
4560: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63  tion */.  int rc
4570: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
4580: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
4590: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c   return */.  sql
45a0: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
45b0: 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64  ;       /* The d
45c0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20  atabase */.  u8 
45d0: 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
45e0: 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74  lt = 0; /* Reset
45f0: 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e   schema after an
4600: 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69   error if positi
4610: 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64  ve */.  u8 encod
4620: 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20  ing = ENC(db);  
4630: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4640: 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 23  se encoding */.#
4650: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4660: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4670: 42 41 43 4b 0a 20 20 69 6e 74 20 63 68 65 63 6b  BACK.  int check
4680: 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
4690: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 72 6f    /* True if pro
46a0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 73 20  gress callbacks 
46b0: 61 72 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  are enabled */. 
46c0: 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70   int nProgressOp
46d0: 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4f  s = 0;      /* O
46e0: 70 63 6f 64 65 73 20 65 78 65 63 75 74 65 64 20  pcodes executed 
46f0: 73 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20 63  since progress c
4700: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e 64  allback. */.#end
4710: 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d  if.  Mem *aMem =
4720: 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20   p->aMem;       
4730: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d  /* Copy of p->aM
4740: 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  em */.  Mem *pIn
4750: 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  1 = 0;          
4760: 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20     /* 1st input 
4770: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
4780: 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20   *pIn2 = 0;     
4790: 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69          /* 2nd i
47a0: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
47b0: 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b    Mem *pIn3 = 0;
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
47d0: 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  3rd input operan
47e0: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  d */.  Mem *pOut
47f0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4800: 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72    /* Output oper
4810: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f  and */.  int iCo
4820: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
4830: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
4840: 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65   last OP_Compare
4850: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
4860: 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20  int *aPermute = 
4870: 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65  0;         /* Pe
4880: 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c  rmutation of col
4890: 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70  umns for OP_Comp
48a0: 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73  are */.  i64 las
48b0: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
48c0: 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65  tRowid;  /* Save
48d0: 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c  d value of the l
48e0: 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44  ast insert ROWID
48f0: 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f   */.#ifdef VDBE_
4900: 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74  PROFILE.  u64 st
4910: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  art;            
4920: 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63       /* CPU cloc
4930: 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74  k count at start
4940: 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20   of opcode */.  
4950: 69 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20  int origPc;     
4960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72             /* Pr
4970: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74  ogram counter at
4980: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
4990: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a   */.#endif.  /**
49a0: 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55  * INSERT STACK U
49b0: 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a  NION HERE ***/..
49c0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67    assert( p->mag
49d0: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
49e0: 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65  UN );  /* sqlite
49f0: 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65  3_step() verifie
4a00: 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69  s this */.  sqli
4a10: 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b  te3VdbeEnter(p);
4a20: 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51  .  if( p->rc==SQ
4a30: 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
4a40: 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
4a50: 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  s if a malloc() 
4a60: 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f  inside a call to
4a70: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4a80: 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a  text() or.    **
4a90: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4aa0: 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e  text16() failed.
4ab0: 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f    */.    goto no
4ac0: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _mem;.  }.  asse
4ad0: 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  rt( p->rc==SQLIT
4ae0: 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53  E_OK || p->rc==S
4af0: 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20  QLITE_BUSY );.  
4b00: 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  p->rc = SQLITE_O
4b10: 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  K;.  assert( p->
4b20: 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20  explain==0 );.  
4b30: 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20  p->pResultSet = 
4b40: 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e  0;.  db->busyHan
4b50: 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a  dler.nBusy = 0;.
4b60: 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45    CHECK_FOR_INTE
4b70: 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65 33  RRUPT;.  sqlite3
4b80: 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70  VdbeIOTraceSql(p
4b90: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
4ba0: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
4bb0: 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68 65 63 6b  CALLBACK.  check
4bc0: 50 72 6f 67 72 65 73 73 20 3d 20 64 62 2d 3e 78  Progress = db->x
4bd0: 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a 23 65 6e  Progress!=0;.#en
4be0: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
4bf0: 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65  E_DEBUG.  sqlite
4c00: 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
4c10: 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70  oc();.  if( p->p
4c20: 63 3d 3d 30 20 20 26 26 20 28 70 2d 3e 64 62 2d  c==0  && (p->db-
4c30: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
4c40: 56 64 62 65 4c 69 73 74 69 6e 67 29 21 3d 30 20  VdbeListing)!=0 
4c50: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
4c60: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50    printf("VDBE P
4c70: 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c  rogram Listing:\
4c80: 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  n");.    sqlite3
4c90: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
4ca0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
4cb0: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
4cc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4cd0: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69  rintOp(stdout, i
4ce0: 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20  , &aOp[i]);.    
4cf0: 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45  }.  }.  sqlite3E
4d00: 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
4d10: 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70  ;.#endif.  for(p
4d20: 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c  c=p->pc; rc==SQL
4d30: 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20  ITE_OK; pc++){. 
4d40: 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30     assert( pc>=0
4d50: 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b   && pc<p->nOp );
4d60: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  .    if( db->mal
4d70: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
4d80: 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20   no_mem;.#ifdef 
4d90: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
4da0: 20 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20   origPc = pc;.  
4db0: 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65    start = sqlite
4dc0: 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69  3Hwtime();.#endi
4dd0: 66 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70  f.    pOp = &aOp
4de0: 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e  [pc];..    /* On
4df0: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
4e00: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
4e10: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
4e20: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4e30: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
4e40: 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
4e50: 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20    if( pc==0 ){. 
4e60: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56         printf("V
4e70: 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20 54 72  DBE Execution Tr
4e80: 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ace:\n");.      
4e90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4ea0: 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20 20  ntSql(p);.      
4eb0: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
4ec0: 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72  dbePrintOp(p->tr
4ed0: 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20  ace, pc, pOp);. 
4ee0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
4ef0: 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b    ..    /* Check
4f00: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65   to see if we ne
4f10: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61  ed to simulate a
4f20: 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68  n interrupt.  Th
4f30: 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a  is only happens.
4f40: 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76      ** if we hav
4f50: 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74  e a special test
4f60: 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23   build..    */.#
4f70: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
4f80: 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  T.    if( sqlite
4f90: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
4fa0: 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t>0 ){.      sql
4fb0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
4fc0: 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66  ount--;.      if
4fd0: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
4fe0: 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a  upt_count==0 ){.
4ff0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
5000: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
5010: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
5020: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
5030: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
5040: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f  S_CALLBACK.    /
5050: 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72  * Call the progr
5060: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ess callback if 
5070: 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  it is configured
5080: 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65   and the require
5090: 64 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20  d number.    ** 
50a0: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
50b0: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
50c0: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
50d0: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
50e0: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64      ** sqlite3Vd
50f0: 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63  beExec() or sinc
5100: 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20  e last time the 
5110: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5120: 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20  k was called).. 
5130: 20 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f     ** If the pro
5140: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72  gress callback r
5150: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
5160: 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61   exit the virtua
5170: 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20  l machine with. 
5180: 20 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63     ** a return c
5190: 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ode SQLITE_ABORT
51a0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
51b0: 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 20 29   checkProgress )
51c0: 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  {.      if( db->
51d0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50  nProgressOps==nP
51e0: 72 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20 20  rogressOps ){.  
51f0: 20 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20        int prc;. 
5200: 20 20 20 20 20 20 20 70 72 63 20 3d 20 64 62 2d         prc = db-
5210: 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70  >xProgress(db->p
5220: 50 72 6f 67 72 65 73 73 41 72 67 29 3b 0a 20 20  ProgressArg);.  
5230: 20 20 20 20 20 20 69 66 28 20 70 72 63 21 3d 30        if( prc!=0
5240: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63   ){.          rc
5250: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
5260: 55 50 54 3b 0a 20 20 20 20 20 20 20 20 20 20 67  UPT;.          g
5270: 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
5280: 61 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  alt;.        }. 
5290: 20 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73         nProgress
52a0: 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  Ops = 0;.      }
52b0: 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73  .      nProgress
52c0: 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e  Ops++;.    }.#en
52d0: 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61  dif..    /* On a
52e0: 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74  ny opcode with t
52f0: 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c 61  he "out2-prerela
5300: 73 65 22 20 74 61 67 2c 20 66 72 65 65 20 61 6e  se" tag, free an
5310: 79 0a 20 20 20 20 2a 2a 20 65 78 74 65 72 6e 61  y.    ** externa
5320: 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75  l allocations ou
5330: 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64  t of mem[p2] and
5340: 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20   set mem[p2] to 
5350: 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64  be.    ** an und
5360: 65 66 69 6e 65 64 20 69 6e 74 65 67 65 72 2e 20  efined integer. 
5370: 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c 20 65 69   Opcodes will ei
5380: 74 68 65 72 20 66 69 6c 6c 20 69 6e 20 74 68 65  ther fill in the
5390: 20 69 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a 20   integer.    ** 
53a0: 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72 74  value or convert
53b0: 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69   mem[p2] to a di
53c0: 66 66 65 72 65 6e 74 20 74 79 70 65 2e 0a 20 20  fferent type..  
53d0: 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
53e0: 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73   pOp->opflags==s
53f0: 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
5400: 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  erty[pOp->opcode
5410: 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  ] );.    if( pOp
5420: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
5430: 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53  G_OUT2_PRERELEAS
5440: 45 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  E ){.      asser
5450: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
5460: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5470: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p2<=p->nMem )
5480: 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26  ;.      pOut = &
5490: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
54a0: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
54b0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
54c0: 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c        VdbeMemRel
54d0: 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20  ease(pOut);.    
54e0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
54f0: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a  MEM_Int;.    }..
5500: 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68      /* Sanity ch
5510: 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20  ecking on other 
5520: 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64  operands */.#ifd
5530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
5540: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
5550: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
5560: 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  1)!=0 ){.      a
5570: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
5580: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5590: 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  ( pOp->p1<=p->nM
55a0: 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  em );.      asse
55b0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
55c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29  aMem[pOp->p1]) )
55d0: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
55e0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
55f0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b  &aMem[pOp->p1]);
5600: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
5610: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
5620: 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a  PFLG_IN2)!=0 ){.
5630: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5640: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
5650: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5660: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
5670: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
5680: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
5690: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p2]) );.      R
56a0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
56b0: 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p2, &aMem[pOp
56c0: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p2]);.    }.  
56d0: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
56e0: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  ags & OPFLG_IN3)
56f0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5700: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
5710: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5720: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
5730: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5740: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
5750: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
5760: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5770: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
5780: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5790: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
57a0: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
57b0: 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20  LG_OUT2)!=0 ){. 
57c0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
57d0: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
57e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
57f0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5800: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
5810: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
5820: 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2]);.    }.   
5830: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
5840: 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29  gs & OPFLG_OUT3)
5850: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5860: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
5870: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5880: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
5890: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
58a0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
58b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
58c0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20     }.#endif.  . 
58d0: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
58e0: 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a  opcode ){../****
58f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5900: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5910: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5920: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5930: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61  *********.** Wha
5940: 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d  t follows is a m
5950: 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73 74  assive switch st
5960: 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61  atement where ea
5970: 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e  ch case implemen
5980: 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65  ts a.** separate
5990: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20   instruction in 
59a0: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
59b0: 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c  ine.  If we foll
59c0: 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20  ow the usual.** 
59d0: 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76  indentation conv
59e0: 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61  entions, each ca
59f0: 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  se should be ind
5a00: 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63 65  ented by 6 space
5a10: 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20  s.  But.** that 
5a20: 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74  is a lot of wast
5a30: 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20  ed space on the 
5a40: 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f  left margin.  So
5a50: 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e   the code within
5a60: 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20 73  .** the switch s
5a70: 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72  tatement will br
5a80: 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74  eak with convent
5a90: 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68  ion and be flush
5aa0: 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a  -left. Another.*
5ab0: 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73  * big comment (s
5ac0: 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f  imilar to this o
5ad0: 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68  ne) will mark th
5ae0: 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63  e point in the c
5af0: 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20  ode where.** we 
5b00: 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20  transition back 
5b10: 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74  to normal indent
5b20: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ation..**.** The
5b30: 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65   formatting of e
5b40: 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f  ach case is impo
5b50: 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65  rtant.  The make
5b60: 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a  file for SQLite.
5b70: 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f  ** generates two
5b80: 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65   C files "opcode
5b90: 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65  s.h" and "opcode
5ba0: 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67  s.c" by scanning
5bb0: 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f   this.** file lo
5bc0: 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20  oking for lines 
5bd0: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
5be0: 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65  "case OP_".  The
5bf0: 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73   opcodes.h files
5c00: 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c  .** will be fill
5c10: 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65 73  ed with #defines
5c20: 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71 75   that give uniqu
5c30: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  e integer values
5c40: 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f   to each.** opco
5c50: 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64  de and the opcod
5c60: 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c  es.c file is fil
5c70: 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72 61  led with an arra
5c80: 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65  y of strings whe
5c90: 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e  re.** each strin
5ca0: 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69  g is the symboli
5cb0: 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63  c name for the c
5cc0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63  orresponding opc
5cd0: 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ode.  If the.** 
5ce0: 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69  case statement i
5cf0: 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
5d00: 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66  comment of the f
5d10: 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20  orm "/# same as 
5d20: 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20  ... #/".** that 
5d30: 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20  comment is used 
5d40: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
5d50: 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75   particular valu
5d60: 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e  e of the opcode.
5d70: 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79  .**.** Other key
5d80: 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d  words in the com
5d90: 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77  ment that follow
5da0: 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65 20  s each case are 
5db0: 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74  used to.** const
5dc0: 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49  ruct the OPFLG_I
5dd0: 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65  NITIALIZER value
5de0: 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65   that initialize
5df0: 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  s opcodeProperty
5e00: 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20  []..** Keywords 
5e10: 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e  include: in1, in
5e20: 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65  2, in3, out2_pre
5e30: 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f  release, out2, o
5e40: 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65  ut3.  See.** the
5e50: 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73   mkopcodeh.awk s
5e60: 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69  cript for additi
5e70: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
5e80: 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74  ..**.** Document
5e90: 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45  ation about VDBE
5ea0: 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65   opcodes is gene
5eb0: 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e  rated by scannin
5ec0: 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66  g this file.** f
5ed0: 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74  or lines of that
5ee0: 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65   contain "Opcode
5ef0: 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61  :".  That line a
5f00: 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  nd all subsequen
5f10: 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e  t.** comment lin
5f20: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74  es are used in t
5f30: 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
5f40: 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c   the opcode.html
5f50: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a   documentation.*
5f60: 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55  * file..**.** SU
5f70: 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  MMARY:.**.**    
5f80: 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69   Formatting is i
5f90: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69  mportant to scri
5fa0: 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68  pts that scan th
5fb0: 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20  is file..**     
5fc0: 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66  Do not deviate f
5fd0: 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69  rom the formatti
5fe0: 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74  ng style current
5ff0: 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  ly in use..**.**
6000: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6040: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
6050: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a   Opcode:  Goto *
6060: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
6070: 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  An unconditional
6080: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
6090: 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74   P2..** The next
60a0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65   instruction exe
60b0: 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a  cuted will be .*
60c0: 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64  * the one at ind
60d0: 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62  ex P2 from the b
60e0: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74  eginning of.** t
60f0: 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63  he program..*/.c
6100: 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20  ase OP_Goto: {  
6110: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6120: 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46 4f  mp */.  CHECK_FO
6130: 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  R_INTERRUPT;.  p
6140: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
6150: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6160: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6170: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6180: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6190: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
61a0: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
61b0: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
61c0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
61d0: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
61e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
61f0: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6200: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
6210: 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
6220: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
6230: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6240: 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
6250: 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29   & MEM_Dyn)==0 )
6260: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
6270: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
6280: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6290: 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e  EM_Int;.  pIn1->
62a0: 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49  u.i = pc;.  REGI
62b0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
62c0: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20  p1, pIn1);.  pc 
62d0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
62e0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
62f0: 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31  code:  Return P1
6300: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a   * * * *.**.** J
6310: 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ump to the next 
6320: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65  instruction afte
6330: 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  r the address in
6340: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f   register P1..*/
6350: 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a  .case OP_Return:
6360: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
6370: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
6380: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6390: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
63a0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
63b0: 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70  );.  pc = (int)p
63c0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61  In1->u.i;.  brea
63d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
63e0: 20 20 59 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a    Yield P1 * * *
63f0: 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68   *.**.** Swap th
6400: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
6410: 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  r with the value
6420: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
6430: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c  .*/.case OP_Yiel
6440: 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
6450: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  /* in1 */.  int 
6460: 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d  pcDest;.  pIn1 =
6470: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6480: 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
6490: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
64a0: 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d  n)==0 );.  pIn1-
64b0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
64c0: 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e  ;.  pcDest = (in
64d0: 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70  t)pIn1->u.i;.  p
64e0: 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20  In1->u.i = pc;. 
64f0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
6500: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
6510: 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20    pc = pcDest;. 
6520: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6530: 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c  code:  HaltIfNul
6540: 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  l  P1 P2 P3 P4 *
6550: 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
6560: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
6570: 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69 73  er P3.  If it is
6580: 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20   NULL then Halt 
6590: 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74  using.** paramet
65a0: 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50  er P1, P2, and P
65b0: 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72  4 as if this wer
65c0: 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63  e a Halt instruc
65d0: 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  tion.  If the.**
65e0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
65f0: 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c  er P3 is not NUL
6600: 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  L, then this rou
6610: 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tine is a no-op.
6620: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
6630: 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f  IfNull: {      /
6640: 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20  * in3 */.  pIn3 
6650: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
6660: 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  ;.  if( (pIn3->f
6670: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
6680: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
6690: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
66a0: 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d  nto OP_Halt */.}
66b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
66c0: 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  lt P1 P2 * P4 *.
66d0: 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64  **.** Exit immed
66e0: 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65  iately.  All ope
66f0: 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61  n cursors, etc a
6700: 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74  re closed.** aut
6710: 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a  omatically..**.*
6720: 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75  * P1 is the resu
6730: 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  lt code returned
6740: 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63   by sqlite3_exec
6750: 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65  (), sqlite3_rese
6760: 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74  t(),.** or sqlit
6770: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20  e3_finalize().  
6780: 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c  For a normal hal
6790: 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62  t, this should b
67a0: 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e  e SQLITE_OK (0).
67b0: 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20  .** For errors, 
67c0: 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f  it can be some o
67d0: 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20  ther value.  If 
67e0: 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69  P1!=0 then P2 wi
67f0: 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  ll determine.** 
6800: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
6810: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63  o rollback the c
6820: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
6830: 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c  on.  Do not roll
6840: 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f  back.** if P2==O
6850: 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72  E_Fail. Do the r
6860: 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f  ollback if P2==O
6870: 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20  E_Rollback.  If 
6880: 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a  P2==OE_Abort,.**
6890: 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61   then back out a
68a0: 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  ll changes that 
68b0: 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75  have occurred du
68c0: 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74  ring this execut
68d0: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44  ion of the.** VD
68e0: 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72  BE, but do not r
68f0: 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
6900: 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20  saction. .**.** 
6910: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c  If P4 is not nul
6920: 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20  l then it is an 
6930: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
6940: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  ring..**.** Ther
6950: 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20  e is an implied 
6960: 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73  "Halt 0 0 0" ins
6970: 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65  truction inserte
6980: 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e  d at the very en
6990: 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72  d of.** every pr
69a0: 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d  ogram.  So a jum
69b0: 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20  p past the last 
69c0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
69d0: 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73  he program.** is
69e0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65   the same as exe
69f0: 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a  cuting Halt..*/.
6a00: 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a  case OP_Halt: {.
6a10: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53    if( pOp->p1==S
6a20: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70  QLITE_OK && p->p
6a30: 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Frame ){.    /* 
6a40: 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f  Halt the sub-pro
6a50: 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e  gram. Return con
6a60: 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65  trol to the pare
6a70: 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20  nt frame. */.   
6a80: 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
6a90: 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
6aa0: 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20      p->pFrame = 
6ab0: 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
6ac0: 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d  .    p->nFrame--
6ad0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
6ae0: 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
6af0: 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20  p->nChange);.   
6b00: 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   pc = sqlite3Vdb
6b10: 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46  eFrameRestore(pF
6b20: 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52  rame);.    lastR
6b30: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
6b40: 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f  owid;.    if( pO
6b50: 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p2==OE_Ignore
6b60: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73   ){.      /* Ins
6b70: 74 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74  truction pc is t
6b80: 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68  he OP_Program th
6b90: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73  at invoked the s
6ba0: 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20  ub-program .    
6bb0: 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62    ** currently b
6bc0: 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20  eing halted. If 
6bd0: 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69  the p2 instructi
6be0: 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61  on of this OP_Ha
6bf0: 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74  lt.      ** inst
6c00: 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74  ruction is set t
6c10: 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65  o OE_Ignore, the
6c20: 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  n the sub-progra
6c30: 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20  m is throwing.  
6c40: 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45      ** an IGNORE
6c50: 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74   exception. In t
6c60: 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f  his case jump to
6c70: 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65   the address spe
6c80: 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20  cified.      ** 
6c90: 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65  as the p2 of the
6ca0: 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67   calling OP_Prog
6cb0: 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  ram.  */.      p
6cc0: 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70  c = p->aOp[pc].p
6cd0: 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  2-1;.    }.    a
6ce0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
6cf0: 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b   aMem = p->aMem;
6d00: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
6d10: 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e  .  p->rc = pOp->
6d20: 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63  p1;.  p->errorAc
6d30: 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e  tion = (u8)pOp->
6d40: 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63  p2;.  p->pc = pc
6d50: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  ;.  if( pOp->p4.
6d60: 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  z ){.    assert(
6d70: 20 70 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f   p->rc!=SQLITE_O
6d80: 4b 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  K );.    sqlite3
6d90: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
6da0: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
6db0: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
6dc0: 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74   testcase( sqlit
6dd0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
6de0: 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71  Log!=0 );.    sq
6df0: 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70  lite3_log(pOp->p
6e00: 31 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64 20  1, "abort at %d 
6e10: 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63  in [%s]: %s", pc
6e20: 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 4f 70 2d 3e  , p->zSql, pOp->
6e30: 70 34 2e 7a 29 3b 0a 20 20 7d 65 6c 73 65 20 69  p4.z);.  }else i
6e40: 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20  f( p->rc ){.    
6e50: 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65  testcase( sqlite
6e60: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c  3GlobalConfig.xL
6e70: 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  og!=0 );.    sql
6e80: 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31  ite3_log(pOp->p1
6e90: 2c 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  , "constraint fa
6ea0: 69 6c 65 64 20 61 74 20 25 64 20 69 6e 20 5b 25  iled at %d in [%
6eb0: 73 5d 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c  s]", pc, p->zSql
6ec0: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
6ed0: 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
6ee0: 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
6ef0: 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72  SQLITE_BUSY || r
6f00: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
6f10: 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52  rc==SQLITE_ERROR
6f20: 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   );.  if( rc==SQ
6f30: 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
6f40: 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
6f50: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
6f60: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
6f70: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
6f80: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 43   p->rc==SQLITE_C
6f90: 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20  ONSTRAINT );.   
6fa0: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6fb0: 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44  ITE_OK || db->nD
6fc0: 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 29 3b  eferredCons>0 );
6fd0: 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20  .    rc = p->rc 
6fe0: 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a  ? SQLITE_ERROR :
6ff0: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
7000: 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  }.  goto vdbe_re
7010: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
7020: 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50  de: Integer P1 P
7030: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
7040: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
7050: 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69   value P1 is wri
7060: 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tten into regist
7070: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7080: 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20  P_Integer: {    
7090: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
70a0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
70b0: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31  t->u.i = pOp->p1
70c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
70d0: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a   Opcode: Int64 *
70e0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
70f0: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
7100: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74   to a 64-bit int
7110: 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  eger value..** W
7120: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
7130: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7140: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
7150: 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  64: {           
7160: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
7170: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
7180: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20  pOp->p4.pI64!=0 
7190: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
71a0: 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a   *pOp->p4.pI64;.
71b0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
71c0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
71d0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f  FLOATING_POINT./
71e0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a  * Opcode: Real *
71f0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
7200: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
7210: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f   to a 64-bit flo
7220: 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
7230: 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74  e..** Write that
7240: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
7250: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
7260: 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20   OP_Real: {     
7270: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
7280: 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32  s TK_FLOAT, out2
7290: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
72a0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
72b0: 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72  EM_Real;.  asser
72c0: 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e  t( !sqlite3IsNaN
72d0: 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29  (*pOp->p4.pReal)
72e0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20   );.  pOut->r = 
72f0: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a  *pOp->p4.pReal;.
7300: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
7310: 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74  f../* Opcode: St
7320: 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20  ring8 * P2 * P4 
7330: 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  *.**.** P4 point
7340: 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69  s to a nul termi
7350: 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
7360: 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ng. This opcode 
7370: 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a  is transformed .
7380: 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74  ** into an OP_St
7390: 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69  ring before it i
73a0: 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74  s executed for t
73b0: 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a  he first time..*
73c0: 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67  /.case OP_String
73d0: 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  8: {         /* 
73e0: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e  same as TK_STRIN
73f0: 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  G, out2-prerelea
7400: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
7410: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
7420: 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
7430: 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70  OP_String;.  pOp
7440: 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74  ->p1 = sqlite3St
7450: 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a  rlen30(pOp->p4.z
7460: 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
7470: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
7480: 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51  if( encoding!=SQ
7490: 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20  LITE_UTF8 ){.   
74a0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
74b0: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
74c0: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20   pOp->p4.z, -1, 
74d0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
74e0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
74f0: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
7500: 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f  TOOBIG ) goto to
7510: 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53  o_big;.    if( S
7520: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
7530: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
7540: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
7550: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
7560: 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
7570: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f  Out->zMalloc==pO
7580: 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73  ut->z );.    ass
7590: 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ert( pOut->flags
75a0: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20 20   & MEM_Dyn );.  
75b0: 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20    pOut->zMalloc 
75c0: 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  = 0;.    pOut->f
75d0: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74  lags |= MEM_Stat
75e0: 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ic;.    pOut->fl
75f0: 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b  ags &= ~MEM_Dyn;
7600: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
7610: 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43  type==P4_DYNAMIC
7620: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
7630: 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d  3DbFree(db, pOp-
7640: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  >p4.z);.    }.  
7650: 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
7660: 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20  P4_DYNAMIC;.    
7670: 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74  pOp->p4.z = pOut
7680: 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31  ->z;.    pOp->p1
7690: 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a   = pOut->n;.  }.
76a0: 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70  #endif.  if( pOp
76b0: 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  ->p1>db->aLimit[
76c0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
76d0: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
76e0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
76f0: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
7700: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
7710: 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d  , OP_String */.}
7720: 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .  ./* Opcode: S
7730: 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50 34  tring P1 P2 * P4
7740: 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72   *.**.** The str
7750: 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20  ing value P4 of 
7760: 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73  length P1 (bytes
7770: 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  ) is stored in r
7780: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
7790: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b  ase OP_String: {
77a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
77b0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
77c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
77d0: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
77e0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
77f0: 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
7800: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
7810: 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
7820: 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70  pOut->n = pOp->p
7830: 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  1;.  pOut->enc =
7840: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
7850: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
7860: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
7870: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
7880: 75 6c 6c 20 2a 20 50 32 20 50 33 20 2a 20 2a 0a  ull * P2 P3 * *.
7890: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55  **.** Write a NU
78a0: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
78b0: 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65  s P2.  If P3 gre
78c0: 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68  ater than P2, th
78d0: 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a  en also write.**
78e0: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
78f0: 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 20  ter P3 and ever 
7900: 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74 77  register in betw
7910: 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20  een P2 and P3.  
7920: 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73  If P3.** is less
7930: 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63 61   than P2 (typica
7940: 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20  lly P3 is zero) 
7950: 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74  then only regist
7960: 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20  er P2 is.** set 
7970: 74 6f 20 4e 55 4c 4c 0a 2a 2f 0a 63 61 73 65 20  to NULL.*/.case 
7980: 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  OP_Null: {      
7990: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
79a0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
79b0: 20 63 6e 74 3b 0a 20 20 63 6e 74 20 3d 20 70 4f   cnt;.  cnt = pO
79c0: 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20  p->p3-pOp->p2;. 
79d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
79e0: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
79f0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
7a00: 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20  _Null;.  while( 
7a10: 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75  cnt>0 ){.    pOu
7a20: 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  t++;.    memAbou
7a30: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
7a40: 74 29 3b 0a 20 20 20 20 56 64 62 65 4d 65 6d 52  t);.    VdbeMemR
7a50: 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20  elease(pOut);.  
7a60: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
7a70: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 63 6e  MEM_Null;.    cn
7a80: 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  t--;.  }.  break
7a90: 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
7aa0: 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34   Blob P1 P2 * P4
7ab0: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
7ac0: 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61   to a blob of da
7ad0: 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67  ta P1 bytes long
7ae0: 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a  .  Store this.**
7af0: 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
7b00: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7b10: 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20  _Blob: {        
7b20: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7b30: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7b40: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20  assert( pOp->p1 
7b50: 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  <= SQLITE_MAX_LE
7b60: 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65  NGTH );.  sqlite
7b70: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
7b80: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
7b90: 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a  pOp->p1, 0, 0);.
7ba0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
7bb0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
7bc0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
7bd0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
7be0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69  ./* Opcode: Vari
7bf0: 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20  able P1 P2 * P4 
7c00: 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  *.**.** Transfer
7c10: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62   the values of b
7c20: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50  ound parameter P
7c30: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
7c40: 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  P2.**.** If the 
7c50: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d  parameter is nam
7c60: 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d  ed, then its nam
7c70: 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 20  e appears in P4 
7c80: 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20 54 68  and P3==1..** Th
7c90: 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73  e P4 value is us
7ca0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69  ed by sqlite3_bi
7cb0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
7cc0: 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e()..*/.case OP_
7cd0: 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20  Variable: {     
7ce0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7cf0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d  rerelease */.  M
7d00: 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20  em *pVar;       
7d10: 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74  /* Value being t
7d20: 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20  ransferred */.. 
7d30: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
7d40: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
7d50: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65  ->nVar );.  asse
7d60: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  rt( pOp->p4.z==0
7d70: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70   || pOp->p4.z==p
7d80: 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d  ->azVar[pOp->p1-
7d90: 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26  1] );.  pVar = &
7da0: 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20  p->aVar[pOp->p1 
7db0: 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  - 1];.  if( sqli
7dc0: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
7dd0: 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f  (pVar) ){.    go
7de0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
7df0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
7e00: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
7e10: 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74  , pVar, MEM_Stat
7e20: 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ic);.  UPDATE_MA
7e30: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
7e40: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7e50: 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31   Opcode: Move P1
7e60: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
7e70: 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73   Move the values
7e80: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
7e90: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
7ea0: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
7eb0: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
7ec0: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
7ed0: 31 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  1-1 are.** left 
7ee0: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
7ef0: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
7f00: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
7f10: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
7f20: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
7f30: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a  -1 to overlap..*
7f40: 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20  /.case OP_Move: 
7f50: 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f  {.  char *zMallo
7f60: 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20  c;   /* Holding 
7f70: 76 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c  variable for all
7f80: 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f  ocated memory */
7f90: 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
7fa0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7fb0: 20 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20   registers left 
7fc0: 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74  to copy */.  int
7fd0: 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p1;          /*
7fe0: 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70   Register to cop
7ff0: 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20  y from */.  int 
8000: 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p2;          /* 
8010: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
8020: 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f   to */..  n = pO
8030: 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f  p->p3;.  p1 = pO
8040: 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
8050: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
8060: 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20   n>0 && p1>0 && 
8070: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
8080: 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32  ( p1+n<=p2 || p2
8090: 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e  +n<=p1 );..  pIn
80a0: 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20  1 = &aMem[p1];. 
80b0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32   pOut = &aMem[p2
80c0: 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20  ];.  while( n-- 
80d0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
80e0: 4f 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  Out<=&aMem[p->nM
80f0: 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em] );.    asser
8100: 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 70  t( pIn1<=&aMem[p
8110: 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61  ->nMem] );.    a
8120: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
8130: 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d  d(pIn1) );.    m
8140: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
8150: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d  p, pOut);.    zM
8160: 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d  alloc = pOut->zM
8170: 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d  alloc;.    pOut-
8180: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
8190: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
81a0: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
81b0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
81c0: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f  DEBUG.    if( pO
81d0: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d  ut->pScopyFrom>=
81e0: 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75  &aMem[p1] && pOu
81f0: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 26 61  t->pScopyFrom<&a
8200: 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d 20  Mem[p1+pOp->p3] 
8210: 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70  ){.      pOut->p
8220: 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 31 20  ScopyFrom += p1 
8230: 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 20 20 7d  - pOp->p2;.    }
8240: 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49 6e 31  .#endif.    pIn1
8250: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c  ->zMalloc = zMal
8260: 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54 45  loc;.    REGISTE
8270: 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f  R_TRACE(p2++, pO
8280: 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ut);.    pIn1++;
8290: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d  .    pOut++;.  }
82a0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
82b0: 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20  Opcode: Copy P1 
82c0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d  P2 * * *.**.** M
82d0: 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65  ake a copy of re
82e0: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
82f0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
8300: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
8310: 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20  on makes a deep 
8320: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
8330: 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a  e.  A duplicate.
8340: 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e  ** is made of an
8350: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
8360: 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20   constant.  See 
8370: 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a  also OP_SCopy..*
8380: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20  /.case OP_Copy: 
8390: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
83a0: 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
83b0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
83c0: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
83d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
83e0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
83f0: 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65  pIn1 );.  sqlite
8400: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
8410: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
8420: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 44 65  MEM_Ephem);.  De
8430: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
8440: 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
8450: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
8460: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
8470: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70  ./* Opcode: SCop
8480: 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
8490: 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c  .** Make a shall
84a0: 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73  ow copy of regis
84b0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
84c0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
84d0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
84e0: 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20  makes a shallow 
84f0: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
8500: 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  e.  If the value
8510: 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20  .** is a string 
8520: 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68  or blob, then th
8530: 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61  e copy is only a
8540: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a   pointer to the.
8550: 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20  ** original and 
8560: 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69  hence if the ori
8570: 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f  ginal changes so
8580: 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a   will the copy..
8590: 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65  ** Worse, if the
85a0: 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61   original is dea
85b0: 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f  llocated, the co
85c0: 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c  py becomes inval
85d0: 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20  id..** Thus the 
85e0: 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61  program must gua
85f0: 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20  rantee that the 
8600: 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f  original will no
8610: 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69  t change.** duri
8620: 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20  ng the lifetime 
8630: 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73  of the copy.  Us
8640: 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b  e OP_Copy to mak
8650: 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20  e a complete.** 
8660: 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  copy..*/.case OP
8670: 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  _SCopy: {       
8680: 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74       /* in1, out
8690: 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
86a0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
86b0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
86c0: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
86d0: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
86e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
86f0: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
8700: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
8710: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
8720: 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75  _DEBUG.  if( pOu
8730: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30  t->pScopyFrom==0
8740: 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46   ) pOut->pScopyF
8750: 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64  rom = pIn1;.#end
8760: 69 66 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  if.  REGISTER_TR
8770: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
8780: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
8790: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c  /* Opcode: Resul
87a0: 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a  tRow P1 P2 * * *
87b0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
87c0: 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20  ters P1 through 
87d0: 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20  P1+P2-1 contain 
87e0: 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a  a single row of.
87f0: 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73  ** results. This
8800: 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74   opcode causes t
8810: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
8820: 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e  ) call to termin
8830: 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53  ate.** with an S
8840: 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e  QLITE_ROW return
8850: 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74   code and it set
8860: 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33  s up the sqlite3
8870: 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75  _stmt.** structu
8880: 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63  re to provide ac
8890: 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20  cess to the top 
88a0: 50 31 20 76 61 6c 75 65 73 20 61 73 20 74 68 65  P1 values as the
88b0: 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a   result.** row..
88c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
88d0: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
88e0: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
88f0: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
8900: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
8910: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8920: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
8930: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
8940: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  p2<=p->nMem+1 );
8950: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73  ..  /* If this s
8960: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f  tatement has vio
8970: 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20  lated immediate 
8980: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
8990: 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a  traints, do.  **
89a0: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20   not return the 
89b0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d  number of rows m
89c0: 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20  odified. And do 
89d0: 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20  not RELEASE the 
89e0: 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74  statement.  ** t
89f0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e  ransaction. It n
8a00: 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
8a10: 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66  d back.  */.  if
8a20: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
8a30: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
8a40: 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a  eckFk(p, 0)) ){.
8a50: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
8a60: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
8a70: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73  ntRows );.    as
8a80: 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d  sert( p->usesStm
8a90: 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20  tJournal );.    
8aa0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
8ab0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43   If the SQLITE_C
8ac0: 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73  ountRows flag is
8ad0: 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e   set in sqlite3.
8ae0: 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
8af0: 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65   .  ** DML state
8b00: 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69  ments invoke thi
8b10: 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75  s opcode to retu
8b20: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
8b30: 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69   rows .  ** modi
8b40: 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  fied to the user
8b50: 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  . This is the on
8b60: 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d  ly way that a VM
8b70: 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73   that.  ** opens
8b80: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
8b90: 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76  nsaction may inv
8ba0: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  oke this opcode.
8bb0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61  .  **.  ** In ca
8bc0: 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20  se this is such 
8bd0: 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f  a statement, clo
8be0: 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74  se any statement
8bf0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a   transaction.  *
8c00: 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73  * opened by this
8c10: 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72   VM before retur
8c20: 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  ning control to 
8c30: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
8c40: 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65  s to.  ** ensure
8c50: 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d   that statement-
8c60: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65  transactions are
8c70: 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20   always nested, 
8c80: 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e  not overlapping.
8c90: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65  .  ** If the ope
8ca0: 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  n statement-tran
8cb0: 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63  saction is not c
8cc0: 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e  losed here, then
8cd0: 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d   the user.  ** m
8ce0: 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20  ay step another 
8cf0: 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74  VM that opens it
8d00: 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20  s own statement 
8d10: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69  transaction. Thi
8d20: 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20  s.  ** may lead 
8d30: 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73  to overlapping s
8d40: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
8d50: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
8d60: 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   The statement t
8d70: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65  ransaction is ne
8d80: 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20  ver a top-level 
8d90: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65  transaction.  He
8da0: 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c  nce.  ** the REL
8db0: 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20  EASE call below 
8dc0: 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a  can never fail..
8dd0: 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
8de0: 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
8df0: 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  || db->flags&SQL
8e00: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
8e10: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
8e20: 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e  dbeCloseStatemen
8e30: 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52  t(p, SAVEPOINT_R
8e40: 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e  ELEASE);.  if( N
8e50: 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
8e60: 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  OK) ){.    break
8e70: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61  ;.  }..  /* Inva
8e80: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
8e90: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
8ea0: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
8eb0: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
8ec0: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
8ed0: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
8ee0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
8ef0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
8f00: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
8f10: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
8f20: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
8f30: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
8f40: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
8f50: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69  zed as.  ** a si
8f60: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
8f70: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
8f80: 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70  ultSet = &aMem[p
8f90: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69  Op->p1];.  for(i
8fa0: 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69  =0; i<pOp->p2; i
8fb0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
8fc0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65   memIsValid(&pMe
8fd0: 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65  m[i]) );.    Dee
8fe0: 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65  phemeralize(&pMe
8ff0: 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  m[i]);.    asser
9000: 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  t( (pMem[i].flag
9010: 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d  s & MEM_Ephem)==
9020: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  0.            ||
9030: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
9040: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
9050: 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  lob))==0 );.    
9060: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
9070: 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d  lTerminate(&pMem
9080: 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  [i]);.    sqlite
9090: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
90a0: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
90b0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
90c0: 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d  pOp->p1+i, &pMem
90d0: 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  [i]);.  }.  if( 
90e0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
90f0: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
9100: 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c  .  /* Return SQL
9110: 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70  ITE_ROW.  */.  p
9120: 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20  ->pc = pc + 1;. 
9130: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57   rc = SQLITE_ROW
9140: 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  ;.  goto vdbe_re
9150: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
9160: 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32  de: Concat P1 P2
9170: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64   P3 * *.**.** Ad
9180: 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72 65  d the text in re
9190: 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74  gister P1 onto t
91a0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65  he end of the te
91b0: 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  xt in.** registe
91c0: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
91d0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
91e0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
91f0: 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f 72  either the P1 or
9200: 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c   P2 text are NUL
9210: 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c  L then store NUL
9220: 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20  L in P3..**.**  
9230: 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a   P3 = P2 || P1.*
9240: 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
9250: 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33  al for P1 and P3
9260: 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20   to be the same 
9270: 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69  register. Someti
9280: 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73  mes,.** if P3 is
9290: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
92a0: 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d  er as P2, the im
92b0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20  plementation is 
92c0: 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  able.** to avoid
92d0: 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a   a memcpy()..*/.
92e0: 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20  case OP_Concat: 
92f0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
9300: 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54  ame as TK_CONCAT
9310: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9320: 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
9330: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
9340: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
9350: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
9360: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
9370: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
9380: 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75  ssert( pIn1!=pOu
9390: 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  t );.  if( (pIn1
93a0: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
93b0: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
93c0: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
93d0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
93e0: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
93f0: 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e  .  }.  if( Expan
9400: 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45  dBlob(pIn1) || E
9410: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20  xpandBlob(pIn2) 
9420: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
9430: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c   Stringify(pIn1,
9440: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74   encoding);.  St
9450: 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e  ringify(pIn2, en
9460: 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65  coding);.  nByte
9470: 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e   = pIn1->n + pIn
9480: 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74  2->n;.  if( nByt
9490: 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
94a0: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
94b0: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
94c0: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d  o_big;.  }.  Mem
94d0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
94e0: 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66  , MEM_Str);.  if
94f0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
9500: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
9510: 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70  nByte+2, pOut==p
9520: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
9530: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69   no_mem;.  }.  i
9540: 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b  f( pOut!=pIn2 ){
9550: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74  .    memcpy(pOut
9560: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49  ->z, pIn2->z, pI
9570: 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65  n2->n);.  }.  me
9580: 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49  mcpy(&pOut->z[pI
9590: 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c  n2->n], pIn1->z,
95a0: 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75   pIn1->n);.  pOu
95b0: 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30 3b  t->z[nByte] = 0;
95c0: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
95d0: 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d  +1] = 0;.  pOut-
95e0: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
95f0: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  rm;.  pOut->n = 
9600: 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
9610: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
9620: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
9630: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9640: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9650: 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50  Opcode: Add P1 P
9660: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 P3 * *.**.** A
9670: 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  dd the value in 
9680: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
9690: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
96a0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
96b0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
96c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
96d0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
96e0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
96f0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9700: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  */./* Opcode: Mu
9710: 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20  ltiply P1 P2 P3 
9720: 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c  * *.**.**.** Mul
9730: 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20  tiply the value 
9740: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
9750: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
9760: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
9770: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
9780: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
9790: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
97a0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
97b0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
97c0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
97d0: 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20   Subtract P1 P2 
97e0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62  P3 * *.**.** Sub
97f0: 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
9800: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66  in register P1 f
9810: 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rom the value in
9820: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
9830: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9840: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
9850: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
9860: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
9870: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
9880: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
9890: 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20  e: Divide P1 P2 
98a0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76  P3 * *.**.** Div
98b0: 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ide the value in
98c0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
98d0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
98e0: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
98f0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
9900: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
9910: 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74  (P3=P2/P1). If t
9920: 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20  he value in .** 
9930: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
9940: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ero, then the re
9950: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66  sult is NULL. If
9960: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
9970: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72   .** NULL, the r
9980: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
9990: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d  /./* Opcode: Rem
99a0: 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20  ainder P1 P2 P3 
99b0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74  * *.**.** Comput
99c0: 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  e the remainder 
99d0: 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 64 69  after integer di
99e0: 76 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 76 61  vision of the va
99f0: 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  lue in.** regist
9a00: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
9a10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9a20: 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  2 and store the 
9a30: 72 65 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a 2a  result in P3. .*
9a40: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
9a50: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  n register P2 is
9a60: 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74   zero the result
9a70: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20   is NULL..** If 
9a80: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
9a90: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
9aa0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
9ab0: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9ad0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53   same as TK_PLUS
9ae0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9af0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74   */.case OP_Subt
9b00: 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20  ract:           
9b10: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9b20: 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32  _MINUS, in1, in2
9b30: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
9b40: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20  P_Multiply:     
9b50: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9b60: 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31   as TK_STAR, in1
9b70: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
9b80: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20  ase OP_Divide:  
9b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9ba0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53   same as TK_SLAS
9bb0: 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  H, in1, in2, out
9bc0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d  3 */.case OP_Rem
9bd0: 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20  ainder: {       
9be0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9bf0: 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_REM, in1, in2,
9c00: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 66   out3 */.  int f
9c10: 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f  lags;      /* Co
9c20: 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61  mbined MEM_* fla
9c30: 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70  gs from both inp
9c40: 75 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  uts */.  i64 iA;
9c50: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
9c60: 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  ger value of lef
9c70: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
9c80: 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f  64 iB;         /
9c90: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
9ca0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
9cb0: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b   */.  double rA;
9cc0: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
9cd0: 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  lue of left oper
9ce0: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
9cf0: 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rB;      /* Real
9d00: 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20   value of right 
9d10: 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49  operand */..  pI
9d20: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
9d30: 70 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65  p1];.  applyNume
9d40: 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31  ricAffinity(pIn1
9d50: 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
9d60: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70  m[pOp->p2];.  ap
9d70: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
9d80: 74 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74  ty(pIn2);.  pOut
9d90: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
9da0: 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  ];.  flags = pIn
9db0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
9dc0: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
9dd0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
9de0: 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  !=0 ) goto arith
9df0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9e00: 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49 6e  null;.  if( (pIn
9e10: 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32 2d  1->flags & pIn2-
9e20: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
9e30: 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20  )==MEM_Int ){.  
9e40: 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69    iA = pIn1->u.i
9e50: 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d  ;.    iB = pIn2-
9e60: 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69 74 63 68  >u.i;.    switch
9e70: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
9e80: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
9e90: 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71  dd:       if( sq
9ea0: 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69  lite3AddInt64(&i
9eb0: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
9ec0: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
9ed0: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
9ee0: 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74  ract:  if( sqlit
9ef0: 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69  e3SubInt64(&iB,i
9f00: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
9f10: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
9f20: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
9f30: 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d  y:  if( sqlite3M
9f40: 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ulInt64(&iB,iA) 
9f50: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
9f60: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
9f70: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
9f80: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
9f90: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
9fa0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
9fb0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
9fc0: 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d  iA==-1 && iB==SM
9fd0: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67  ALLEST_INT64 ) g
9fe0: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20  oto fp_math;.   
9ff0: 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20       iB /= iA;. 
a000: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a010: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
a020: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
a030: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
a040: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a050: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
a060: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
a070: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
a080: 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20  iB %= iA;.      
a090: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
a0a0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
a0b0: 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d  >u.i = iB;.    M
a0c0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a0d0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
a0e0: 7d 65 6c 73 65 7b 0a 66 70 5f 6d 61 74 68 3a 0a  }else{.fp_math:.
a0f0: 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33      rA = sqlite3
a100: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
a110: 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71  n1);.    rB = sq
a120: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
a130: 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77  ue(pIn2);.    sw
a140: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
a150: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
a160: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
a170: 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20  rB += rA;       
a180: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
a190: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
a1a0: 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20    rB -= rA;     
a1b0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
a1c0: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
a1d0: 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20      rB *= rA;   
a1e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a1f0: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
a200: 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64   {.        /* (d
a210: 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20  ouble)0 In case 
a220: 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  of SQLITE_OMIT_F
a230: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e  LOATING_POINT...
a240: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
a250: 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20  rA==(double)0 ) 
a260: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
a270: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
a280: 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41          rB /= rA
a290: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
a2a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64  .      }.      d
a2b0: 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20  efault: {.      
a2c0: 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a    iA = (i64)rA;.
a2d0: 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69 36          iB = (i6
a2e0: 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66  4)rB;.        if
a2f0: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
a300: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
a310: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
a320: 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69    if( iA==-1 ) i
a330: 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72  A = 1;.        r
a340: 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20  B = (double)(iB 
a350: 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62  % iA);.        b
a360: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
a370: 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
a380: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
a390: 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e  POINT.    pOut->
a3a0: 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.i = rB;.    Me
a3b0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
a3c0: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c  t, MEM_Int);.#el
a3d0: 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  se.    if( sqlit
a3e0: 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20  e3IsNaN(rB) ){. 
a3f0: 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d       goto arithm
a400: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a410: 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  ull;.    }.    p
a420: 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20  Out->r = rB;.   
a430: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
a440: 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pOut, MEM_Real);
a450: 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 20  .    if( (flags 
a460: 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
a470: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
a480: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
a490: 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a  ty(pOut);.    }.
a4a0: 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
a4b0: 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f  ak;..arithmetic_
a4c0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a  result_is_null:.
a4d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a4e0: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
a4f0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a500: 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31  code: CollSeq P1
a510: 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34   * * P4.**.** P4
a520: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
a530: 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63   a CollSeq struc
a540: 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63  t. If the next c
a550: 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75  all to a user fu
a560: 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67  nction.** or agg
a570: 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c  regate calls sql
a580: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
a590: 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61  eq(), this colla
a5a0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69  tion sequence wi
a5b0: 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65  ll.** be returne
a5c0: 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  d. This is used 
a5d0: 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20  by the built-in 
a5e0: 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64  min(), max() and
a5f0: 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e   nullif().** fun
a600: 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  ctions..**.** If
a610: 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P1 is not zero,
a620: 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65   then it is a re
a630: 67 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75  gister that a su
a640: 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f  bsequent min() o
a650: 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65  r.** max() aggre
a660: 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f  gate will set to
a670: 20 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e   1 if the curren
a680: 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65  t row is not the
a690: 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d   minimum or.** m
a6a0: 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20  aximum.  The P1 
a6b0: 72 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74  register is init
a6c0: 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20  ialized to 0 by 
a6d0: 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
a6e0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ..**.** The inte
a6f0: 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68  rface used by th
a700: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
a710: 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e   of the aforemen
a720: 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  tioned functions
a730: 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20  .** to retrieve 
a740: 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
a750: 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68  quence set by th
a760: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74  is opcode is not
a770: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75   available.** pu
a780: 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20  blicly, only to 
a790: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 64  user functions d
a7a0: 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63  efined in func.c
a7b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
a7c0: 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74  lSeq: {.  assert
a7d0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
a7e0: 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69  4_COLLSEQ );.  i
a7f0: 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
a800: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a810: 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70  SetInt64(&aMem[p
a820: 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d  Op->p1], 0);.  }
a830: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a840: 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e  Opcode: Function
a850: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
a860: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
a870: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
a880: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
a890: 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75   a Function stru
a8a0: 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65  cture that.** de
a8b0: 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69  fines the functi
a8c0: 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75  on) with P5 argu
a8d0: 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d  ments taken from
a8e0: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
a8f0: 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20  .** successors. 
a900: 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   The result of t
a910: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73  he function is s
a920: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
a930: 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65  r P3..** Registe
a940: 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65  r P3 must not be
a950: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63   one of the func
a960: 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a  tion inputs..**.
a970: 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69  ** P1 is a 32-bi
a980: 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61  t bitmask indica
a990: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
a9a0: 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e  not each argumen
a9b0: 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e  t to the .** fun
a9c0: 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d  ction was determ
a9d0: 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74  ined to be const
a9e0: 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74  ant at compile t
a9f0: 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73  ime. If the firs
aa00: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61  t.** argument wa
aa10: 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20  s constant then 
aa20: 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73  bit 0 of P1 is s
aa30: 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
aa40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a   to determine.**
aa50: 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61   whether meta da
aa60: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
aa70: 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  th a user functi
aa80: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e  on argument usin
aa90: 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  g the.** sqlite3
aaa0: 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41  _set_auxdata() A
aab0: 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79  PI may be safely
aac0: 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20   retained until 
aad0: 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f  the next.** invo
aae0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f  cation of this o
aaf0: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
ab00: 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61   also: AggStep a
ab10: 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63  nd AggFinal.*/.c
ab20: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a  ase OP_Function:
ab30: 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65   {.  int i;.  Me
ab40: 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74  m *pArg;.  sqlit
ab50: 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
ab60: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
ab70: 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e  **apVal;.  int n
ab80: 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35  ;..  n = pOp->p5
ab90: 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61  ;.  apVal = p->a
aba0: 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20  pArg;.  assert( 
abb0: 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b  apVal || n==0 );
abc0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
abd0: 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
abe0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f  =p->nMem );.  pO
abf0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
ac00: 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
ac10: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
ac20: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d  ;..  assert( n==
ac30: 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20  0 || (pOp->p2>0 
ac40: 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d  && pOp->p2+n<=p-
ac50: 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73  >nMem+1) );.  as
ac60: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
ac70: 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p2 || pOp->p3
ac80: 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20  >=pOp->p2+n );. 
ac90: 20 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f   pArg = &aMem[pO
aca0: 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d  p->p2];.  for(i=
acb0: 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72  0; i<n; i++, pAr
acc0: 67 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  g++){.    assert
acd0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72  ( memIsValid(pAr
ace0: 67 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b  g) );.    apVal[
acf0: 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44  i] = pArg;.    D
ad00: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41  eephemeralize(pA
ad10: 72 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  rg);.    sqlite3
ad20: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
ad30: 28 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47 49  (pArg);.    REGI
ad40: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
ad50: 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d  p2+i, pArg);.  }
ad60: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
ad70: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
ad80: 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  DEF || pOp->p4ty
ad90: 70 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43 20  pe==P4_VDBEFUNC 
ada0: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  );.  if( pOp->p4
adb0: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
adc0: 20 29 7b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e   ){.    ctx.pFun
add0: 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
ade0: 63 3b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65  c;.    ctx.pVdbe
adf0: 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  Func = 0;.  }els
ae00: 65 7b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65  e{.    ctx.pVdbe
ae10: 46 75 6e 63 20 3d 20 28 56 64 62 65 46 75 6e 63  Func = (VdbeFunc
ae20: 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46  *)pOp->p4.pVdbeF
ae30: 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 46 75  unc;.    ctx.pFu
ae40: 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75  nc = ctx.pVdbeFu
ae50: 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a  nc->pFunc;.  }..
ae60: 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20    ctx.s.flags = 
ae70: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e  MEM_Null;.  ctx.
ae80: 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78  s.db = db;.  ctx
ae90: 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63  .s.xDel = 0;.  c
aea0: 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  tx.s.zMalloc = 0
aeb0: 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70  ;..  /* The outp
aec0: 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65  ut cell may alre
aed0: 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65  ady have a buffe
aee0: 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76  r allocated. Mov
aef0: 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74  e.  ** the point
af00: 65 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69  er to ctx.s so i
af10: 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d  n case the user-
af20: 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65  function can use
af30: 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64  .  ** the alread
af40: 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  y allocated buff
af50: 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c  er instead of al
af60: 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f  locating a new o
af70: 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74  ne..  */.  sqlit
af80: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63  e3VdbeMemMove(&c
af90: 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d  tx.s, pOut);.  M
afa0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63  emSetTypeFlag(&c
afb0: 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  tx.s, MEM_Null);
afc0: 0a 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20  ..  ctx.isError 
afd0: 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70  = 0;.  if( ctx.p
afe0: 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51  Func->flags & SQ
aff0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
b000: 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  LL ){.    assert
b010: 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20  ( pOp>aOp );.   
b020: 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
b030: 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  .p4type==P4_COLL
b040: 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72  SEQ );.    asser
b050: 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
b060: 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b  e==OP_CollSeq );
b070: 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d  .    ctx.pColl =
b080: 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c   pOp[-1].p4.pCol
b090: 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c 61 73  l;.  }.  db->las
b0a0: 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
b0b0: 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e  id;.  (*ctx.pFun
b0c0: 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20  c->xFunc)(&ctx, 
b0d0: 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d  n, apVal); /* IM
b0e0: 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30  P: R-24505-23230
b0f0: 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64 20   */.  lastRowid 
b100: 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
b110: 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 61 75  ..  /* If any au
b120: 78 69 6c 69 61 72 79 20 64 61 74 61 20 66 75 6e  xiliary data fun
b130: 63 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e  ctions have been
b140: 20 63 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20   called by this 
b150: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20  user function,. 
b160: 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
b170: 63 61 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63  call the destruc
b180: 74 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d  tor for any non-
b190: 73 74 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20  static values.. 
b1a0: 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56   */.  if( ctx.pV
b1b0: 64 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73  dbeFunc ){.    s
b1c0: 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
b1d0: 41 75 78 44 61 74 61 28 63 74 78 2e 70 56 64 62  AuxData(ctx.pVdb
b1e0: 65 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b  eFunc, pOp->p1);
b1f0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64  .    pOp->p4.pVd
b200: 62 65 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64  beFunc = ctx.pVd
b210: 62 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d  beFunc;.    pOp-
b220: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 56 44 42  >p4type = P4_VDB
b230: 45 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 69 66  EFUNC;.  }..  if
b240: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
b250: 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65  ed ){.    /* Eve
b260: 6e 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f  n though a mallo
b270: 63 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20  c() has failed, 
b280: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
b290: 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a  on of the.    **
b2a0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d   user function m
b2b0: 61 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61  ay have called a
b2c0: 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  n sqlite3_result
b2d0: 5f 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a  _XXX() function.
b2e0: 20 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e      ** to return
b2f0: 20 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f   a value. The fo
b300: 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c  llowing call rel
b310: 65 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72  eases any resour
b320: 63 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63  ces.    ** assoc
b330: 69 61 74 65 64 20 77 69 74 68 20 73 75 63 68 20  iated with such 
b340: 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  a value..    */.
b350: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
b360: 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73  emRelease(&ctx.s
b370: 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  );.    goto no_m
b380: 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  em;.  }..  /* If
b390: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65   the function re
b3a0: 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c  turned an error,
b3b0: 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74   throw an except
b3c0: 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78  ion */.  if( ctx
b3d0: 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
b3e0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
b3f0: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
b400: 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
b410: 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e  value_text(&ctx.
b420: 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74  s));.    rc = ct
b430: 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a  x.isError;.  }..
b440: 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65    /* Copy the re
b450: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
b460: 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tion into regist
b470: 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74  er P3 */.  sqlit
b480: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
b490: 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63  ding(&ctx.s, enc
b4a0: 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65  oding);.  sqlite
b4b0: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75  3VdbeMemMove(pOu
b4c0: 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69 66  t, &ctx.s);.  if
b4d0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
b4e0: 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a  TooBig(pOut) ){.
b4f0: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
b500: 3b 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f  ;.  }..#if 0.  /
b510: 2a 20 54 68 65 20 61 70 70 2d 64 65 66 69 6e 65  * The app-define
b520: 64 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 64  d function has d
b530: 6f 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  one something th
b540: 61 74 20 61 73 20 63 61 75 73 65 64 20 74 68 69  at as caused thi
b550: 73 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74  s.  ** statement
b560: 20 74 6f 20 65 78 70 69 72 65 2e 20 20 28 50 65   to expire.  (Pe
b570: 72 68 61 70 73 20 74 68 65 20 66 75 6e 63 74 69  rhaps the functi
b580: 6f 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69 74 65  on called sqlite
b590: 33 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20 77 69  3_exec().  ** wi
b5a0: 74 68 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  th a CREATE TABL
b5b0: 45 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20  E statement.).  
b5c0: 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69  */.  if( p->expi
b5d0: 72 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54  red ) rc = SQLIT
b5e0: 45 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a  E_ABORT;.#endif.
b5f0: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
b600: 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
b610: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
b620: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
b630: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
b640: 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20  code: BitAnd P1 
b650: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
b660: 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73  Take the bit-wis
b670: 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c  e AND of the val
b680: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
b690: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
b6a0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b6b0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b6c0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b6d0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b6e0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b6f0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b700: 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a  BitOr P1 P2 P3 *
b710: 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68   *.**.** Take th
b720: 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66  e bit-wise OR of
b730: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
b740: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
b750: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
b760: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b770: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b780: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b790: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b7a0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
b7b0: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66  Opcode: ShiftLef
b7c0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
b7d0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
b7e0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
b7f0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
b800: 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a  he left by the.*
b810: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
b820: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
b830: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
b840: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
b850: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b860: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b870: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b880: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b890: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b8a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
b8b0: 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20  tRight P1 P2 P3 
b8c0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  * *.**.** Shift 
b8d0: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
b8e0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b8f0: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
b900: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
b910: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
b920: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
b930: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
b940: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
b950: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b960: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b970: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b980: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b990: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
b9a0: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
b9b0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b9c0: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
b9d0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
b9e0: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
b9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ba00: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
ba10: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
ba20: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
ba30: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
ba40: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ba50: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
ba60: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
ba70: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
ba80: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
ba90: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
baa0: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
bab0: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
bac0: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
bad0: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
bae0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
baf0: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
bb00: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
bb10: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
bb20: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
bb30: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
bb40: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
bb50: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
bb60: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
bb70: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
bb80: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
bb90: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
bba0: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
bbb0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
bbc0: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
bbd0: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
bbe0: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
bbf0: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
bc00: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
bc10: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
bc20: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
bc30: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
bc40: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
bc50: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
bc60: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
bc70: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
bc80: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
bc90: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
bca0: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
bcb0: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
bcc0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
bcd0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
bce0: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
bcf0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
bd00: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
bd10: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
bd20: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
bd30: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
bd40: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
bd50: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
bd60: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
bd70: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
bd80: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
bd90: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
bda0: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
bdb0: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
bdc0: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
bdd0: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
bde0: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
bdf0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
be00: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
be10: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
be20: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
be30: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
be40: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
be50: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
be60: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
be70: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
be80: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
be90: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
bea0: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
beb0: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
bec0: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
bed0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
bee0: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
bef0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
bf00: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
bf10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
bf20: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
bf30: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
bf40: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
bf50: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
bf60: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
bf70: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
bf80: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
bf90: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
bfa0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
bfb0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
bfc0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
bfd0: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
bfe0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
bff0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
c000: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
c010: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
c020: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
c030: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
c040: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
c050: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
c060: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
c070: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
c080: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
c090: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
c0a0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c0b0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
c0c0: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
c0d0: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
c0e0: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
c0f0: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
c100: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
c110: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
c120: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
c130: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
c140: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
c150: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
c160: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
c170: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
c180: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
c190: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
c1a0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
c1b0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
c1c0: 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66  ->p1];.  applyAf
c1d0: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
c1e0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
c1f0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66   encoding);.  if
c200: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
c210: 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
c220: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
c230: 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
c240: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
c250: 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
c260: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
c270: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
c280: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
c290: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
c2a0: 65 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  e{.    MemSetTyp
c2b0: 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f  eFlag(pIn1, MEM_
c2c0: 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
c2d0: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
c2e0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
c2f0: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
c300: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
c310: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
c320: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
c330: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
c340: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
c350: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
c360: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
c370: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
c380: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
c390: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
c3a0: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
c3b0: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
c3c0: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
c3d0: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
c3e0: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
c3f0: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
c400: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
c410: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
c420: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
c430: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
c440: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
c450: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
c460: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
c470: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
c480: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
c490: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
c4a0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c4b0: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
c4c0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
c4d0: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
c4e0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
c4f0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
c500: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
c510: 6f 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a  ode: ToText P1 *
c520: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c530: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c540: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c550: 65 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68  e text..** If th
c560: 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72  e value is numer
c570: 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ic, convert it t
c580: 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67  o a string using
c590: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
c5a0: 6e 74 20 6f 66 20 70 72 69 6e 74 66 28 29 2e 20  nt of printf(). 
c5b0: 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65   Blob values are
c5c0: 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a   unchanged and.*
c5d0: 2a 20 61 72 65 20 61 66 74 65 72 77 61 72 64 73  * are afterwards
c5e0: 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65   simply interpre
c5f0: 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a  ted as text..**.
c600: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
c610: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
c620: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
c630: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
c640: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54  ..*/.case OP_ToT
c650: 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ext: {          
c660: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c670: 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69  as TK_TO_TEXT, i
c680: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
c690: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
c6a0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
c6b0: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66  e(p, pIn1);.  if
c6c0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
c6d0: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
c6e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f  ;.  assert( MEM_
c6f0: 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e  Str==(MEM_Blob>>
c700: 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  3) );.  pIn1->fl
c710: 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c  ags |= (pIn1->fl
c720: 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33  ags&MEM_Blob)>>3
c730: 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  ;.  applyAffinit
c740: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
c750: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
c760: 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  g);.  rc = Expan
c770: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61  dBlob(pIn1);.  a
c780: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
c790: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
c7a0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
c7b0: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
c7c0: 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d  s &= ~(MEM_Int|M
c7d0: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62  EM_Real|MEM_Blob
c7e0: 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50  |MEM_Zero);.  UP
c7f0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
c800: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
c810: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c820: 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20  ToBlob P1 * * * 
c830: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
c840: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c850: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42  ter P1 to be a B
c860: 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  LOB..** If the v
c870: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
c880: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c890: 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a   string first..*
c8a0: 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69  * Strings are si
c8b0: 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74  mply reinterpret
c8c0: 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68  ed as blobs with
c8d0: 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f   no change.** to
c8e0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
c8f0: 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  data..**.** A NU
c900: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
c910: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
c920: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
c930: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
c940: 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20  se OP_ToBlob: { 
c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c960: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
c970: 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20  O_BLOB, in1 */. 
c980: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
c990: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
c9a0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
c9b0: 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20  Null ) break;.  
c9c0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
c9d0: 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20   & MEM_Blob)==0 
c9e0: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
c9f0: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
ca00: 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f  E_AFF_TEXT, enco
ca10: 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72  ding);.    asser
ca20: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
ca30: 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e   MEM_Str || db->
ca40: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
ca50: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
ca60: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f  ag(pIn1, MEM_Blo
ca70: 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
ca80: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20   pIn1->flags &= 
ca90: 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e  ~(MEM_TypeMask&~
caa0: 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20  MEM_Blob);.  }. 
cab0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
cac0: 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72  SIZE(pIn1);.  br
cad0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
cae0: 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20  e: ToNumeric P1 
caf0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
cb00: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
cb10: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
cb20: 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68  be numeric (eith
cb30: 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72  er an.** integer
cb40: 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70   or a floating-p
cb50: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a  oint number.).**
cb60: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
cb70: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
cb80: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
cb90: 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65   to an using the
cba0: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
cbb0: 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66  f atoi() or atof
cbc0: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69  () and store 0 i
cbd0: 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72  f no such conver
cbe0: 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73  sion .** is poss
cbf0: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
cc00: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
cc10: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
cc20: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
cc30: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
cc40: 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a  se OP_ToNumeric:
cc50: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
cc60: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cc70: 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e  K_TO_NUMERIC, in
cc80: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
cc90: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
cca0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
ccb0: 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  merify(pIn1);.  
ccc0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
ccd0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
cce0: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
ccf0: 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20  e: ToInt P1 * * 
cd00: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
cd10: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
cd20: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
cd30: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a  n integer.  If.*
cd40: 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63  * The value is c
cd50: 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20  urrently a real 
cd60: 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73  number, drop its
cd70: 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
cd80: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
cd90: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
cda0: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
cdb0: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
cdc0: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
cdd0: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
cde0: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
cdf0: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
ce00: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
ce10: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
ce20: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
ce30: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
ce40: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
ce50: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
ce60: 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20   OP_ToInt: {    
ce70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ce80: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49   same as TK_TO_I
ce90: 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  NT, in1 */.  pIn
cea0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
ceb0: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
cec0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
ced0: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  l)==0 ){.    sql
cee0: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
cef0: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  erify(pIn1);.  }
cf00: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
cf10: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
cf20: 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21  _OMIT_CAST) && !
cf30: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
cf40: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
cf50: 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  NT)./* Opcode: T
cf60: 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  oReal P1 * * * *
cf70: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
cf80: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
cf90: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c  er P1 to be a fl
cfa0: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
cfb0: 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76  ber..** If The v
cfc0: 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c  alue is currentl
cfd0: 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f  y an integer, co
cfe0: 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20  nvert it..** If 
cff0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
d000: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
d010: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
d020: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
d030: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
d040: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
d050: 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f   store 0.0 if no
d060: 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e   such conversion
d070: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
d080: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
d090: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
d0a0: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
d0b0: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
d0c0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
d0d0: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
d0e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d0f0: 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20   as TK_TO_REAL, 
d100: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
d110: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
d120: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
d130: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69  ge(p, pIn1);.  i
d140: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
d150: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
d160: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
d170: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
d180: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
d190: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
d1a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
d1b0: 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e  _CAST) && !defin
d1c0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
d1d0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a  LOATING_POINT) *
d1e0: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  /../* Opcode: Lt
d1f0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
d200: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68  **.** Compare th
d210: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
d220: 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20  ster P1 and P3. 
d230: 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28   If reg(P3)<reg(
d240: 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70  P1) then.** jump
d250: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20   to address P2. 
d260: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53   .**.** If the S
d270: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
d280: 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65   bit of P5 is se
d290: 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67  t and either reg
d2a0: 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50  (P1) or.** reg(P
d2b0: 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  3) is NULL then 
d2c0: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20  take the jump.  
d2d0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
d2e0: 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74  MPIFNULL .** bit
d2f0: 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66   is clear then f
d300: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65  all through if e
d310: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
d320: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
d330: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
d340: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d   portion of P5 m
d350: 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69  ust be an affini
d360: 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a  ty character -.*
d370: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  * SQLITE_AFF_TEX
d380: 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  T, SQLITE_AFF_IN
d390: 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f  TEGER, and so fo
d3a0: 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  rth. An attempt 
d3b0: 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63  is made .** to c
d3c0: 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74  oerce both input
d3d0: 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  s according to t
d3e0: 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66  his affinity bef
d3f0: 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  ore the.** compa
d400: 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49  rison is made. I
d410: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
d420: 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74  _MASK is 0x00, t
d430: 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61  hen numeric.** a
d440: 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e  ffinity is used.
d450: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61   Note that the a
d460: 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69  ffinity conversi
d470: 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a  ons are stored.*
d480: 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  * back into the 
d490: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
d4a0: 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74  P1 and P3.  So t
d4b0: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63  his opcode can c
d4c0: 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65  ause.** persiste
d4d0: 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65  nt changes to re
d4e0: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
d4f0: 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e  3..**.** Once an
d500: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61  y conversions ha
d510: 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20  ve taken place, 
d520: 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75  and neither valu
d530: 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74  e is NULL, .** t
d540: 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  he values are co
d550: 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20  mpared. If both 
d560: 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73  values are blobs
d570: 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69   then memcmp() i
d580: 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74  s.** used to det
d590: 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ermine the resul
d5a0: 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  ts of the compar
d5b0: 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76  ison.  If both v
d5c0: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78  alues.** are tex
d5d0: 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72  t, then the appr
d5e0: 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e  opriate collatin
d5f0: 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  g function speci
d600: 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73  fied in.** P4 is
d610: 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65    used to do the
d620: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
d630: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
d640: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
d650: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
d660: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
d670: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
d680: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
d690: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
d6a0: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
d6b0: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
d6c0: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
d6d0: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
d6e0: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
d6f0: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
d700: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
d710: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
d720: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
d730: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
d740: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
d750: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62  SQLITE_STOREP2 b
d760: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  it of P5 is set,
d770: 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d   then do not jum
d780: 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20  p.  Instead,.** 
d790: 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20  store a boolean 
d7a0: 72 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30  result (either 0
d7b0: 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29  , or 1, or NULL)
d7c0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
d7d0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
d7e0: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
d7f0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
d800: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
d810: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
d820: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
d830: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
d840: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
d850: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
d860: 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e  3 are not equal.
d870: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
d880: 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74  ode for.** addit
d890: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
d8a0: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  n..**.** If SQLI
d8b0: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
d8c0: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
d8d0: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
d8e0: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
d8f0: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
d900: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
d910: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
d920: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
d930: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
d940: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
d950: 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20  rison is false. 
d960: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
d970: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
d980: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 72  the result is tr
d990: 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  ue..** If neithe
d9a0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
d9b0: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
d9c0: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
d9d0: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
d9e0: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
d9f0: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
da00: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a  d from P5..*/./*
da10: 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50   Opcode: Eq P1 P
da20: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
da30: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
da40: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
da50: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
da60: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
da70: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72  n if.** the oper
da80: 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72  ands in register
da90: 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20  s P1 and P3 are 
daa0: 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68  equal..** See th
dab0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
dac0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
dad0: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  mation..**.** If
dae0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
daf0: 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e  s set in P5 then
db00: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
db10: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77  omparison is alw
db20: 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72  ays either.** tr
db30: 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20  ue or false and 
db40: 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20  is never NULL.  
db50: 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  If both operands
db60: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74   are NULL then t
db70: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20  he result.** of 
db80: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72  comparison is tr
db90: 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  ue.  If either o
dba0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
dbb0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
dbc0: 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e  s false..** If n
dbd0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
dbe0: 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c  s NULL the resul
dbf0: 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  t is the same as
dc00: 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a   it would be if.
dc10: 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55  ** the SQLITE_NU
dc20: 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f  LLEQ flag were o
dc30: 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a  mitted from P5..
dc40: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65  */./* Opcode: Le
dc50: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
dc60: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
dc70: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
dc80: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
dc90: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
dca0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
dcb0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
dcc0: 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20  ster P3 is less 
dcd0: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
dce0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
dcf0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
dd00: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
dd10: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
dd20: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
dd30: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20  /./* Opcode: Gt 
dd40: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
dd50: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
dd60: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
dd70: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
dd80: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
dd90: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
dda0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
ddb0: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
ddc0: 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65  r than the conte
ddd0: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
dde0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
ddf0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
de00: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
de10: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
de20: 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50  e: Ge P1 P2 P3 P
de30: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
de40: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
de50: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
de60: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
de70: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
de80: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
de90: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
dea0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
deb0: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
dec0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
ded0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
dee0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
def0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
df00: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
df10: 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
df20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
df30: 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
df40: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
df50: 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
df60: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
df70: 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
df80: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
df90: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
dfa0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
dfb0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
dfc0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
dfe0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
dff0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
e000: 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
e010: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e020: 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
e030: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
e040: 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
e050: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e060: 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
e070: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
e080: 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
e090: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
e0a0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
e0b0: 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
e0c0: 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
e0d0: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
e0e0: 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
e0f0: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
e100: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
e110: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
e120: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
e130: 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
e140: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
e150: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
e160: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
e170: 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
e180: 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
e190: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
e1a0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
e1b0: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
e1c0: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
e1d0: 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
e1e0: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
e1f0: 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
e200: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
e210: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
e220: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
e230: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
e240: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
e250: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
e260: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
e270: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
e280: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
e290: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
e2a0: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
e2b0: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
e2c0: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
e2d0: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
e2e0: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
e2f0: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
e300: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
e310: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
e320: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
e330: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
e340: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
e350: 4e 65 20 29 3b 0a 20 20 20 20 20 20 72 65 73 20  Ne );.      res 
e360: 3d 20 28 66 6c 61 67 73 31 20 26 20 66 6c 61 67  = (flags1 & flag
e370: 73 33 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  s3 & MEM_Null)==
e380: 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
e390: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55      /* SQLITE_NU
e3a0: 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e  LLEQ is clear an
e3b0: 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f  d at least one o
e3c0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a  perand is NULL,.
e3d0: 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
e3e0: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
e3f0: 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a  ys NULL..      *
e400: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
e410: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
e420: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
e430: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a   is set..      *
e440: 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  /.      if( pOp-
e450: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
e460: 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20  REP2 ){.        
e470: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
e480: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d  ->p2];.        M
e490: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
e4a0: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
e4b0: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
e4c0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
e4d0: 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Out);.      }els
e4e0: 65 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20  e if( pOp->p5 & 
e4f0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
e500: 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20  L ){.        pc 
e510: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20  = pOp->p2-1;.   
e520: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
e530: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
e540: 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20  .    /* Neither 
e550: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
e560: 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f    Do a compariso
e570: 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69  n. */.    affini
e580: 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53  ty = pOp->p5 & S
e590: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a  QLITE_AFF_MASK;.
e5a0: 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79      if( affinity
e5b0: 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41   ){.      applyA
e5c0: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66  ffinity(pIn1, af
e5d0: 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67  finity, encoding
e5e0: 29 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  );.      applyAf
e5f0: 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66  finity(pIn3, aff
e600: 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29  inity, encoding)
e610: 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  ;.      if( db->
e620: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
e630: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
e640: 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  }..    assert( p
e650: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
e660: 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70  OLLSEQ || pOp->p
e670: 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20  4.pColl==0 );.  
e680: 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
e690: 31 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c  1);.    ExpandBl
e6a0: 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 72 65  ob(pIn3);.    re
e6b0: 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  s = sqlite3MemCo
e6c0: 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31  mpare(pIn3, pIn1
e6d0: 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29  , pOp->p4.pColl)
e6e0: 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20  ;.  }.  switch( 
e6f0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
e700: 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20     case OP_Eq:  
e710: 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20    res = res==0; 
e720: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
e730: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65  ase OP_Ne:    re
e740: 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20  s = res!=0;     
e750: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
e760: 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20  OP_Lt:    res = 
e770: 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61  res<0;      brea
e780: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c  k;.    case OP_L
e790: 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c  e:    res = res<
e7a0: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
e7b0: 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20     case OP_Gt:  
e7c0: 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20    res = res>0;  
e7d0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
e7e0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65  efault:       re
e7f0: 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20  s = res>=0;     
e800: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66  break;.  }..  if
e810: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
e820: 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
e830: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
e840: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d  Op->p2];.    mem
e850: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
e860: 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53   pOut);.    MemS
e870: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
e880: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70   MEM_Int);.    p
e890: 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a  Out->u.i = res;.
e8a0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
e8b0: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
e8c0: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72  );.  }else if( r
e8d0: 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
e8e0: 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 0a 20  Op->p2-1;.  }.. 
e8f0: 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61   /* Undo any cha
e900: 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70  nges made by app
e910: 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20  lyAffinity() to 
e920: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
e930: 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e  ers. */.  pIn1->
e940: 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e 66  flags = (pIn1->f
e950: 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61  lags&~MEM_TypeMa
e960: 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26 4d 45  sk) | (flags1&ME
e970: 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 70  M_TypeMask);.  p
e980: 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49  In3->flags = (pI
e990: 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54  n3->flags&~MEM_T
e9a0: 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
e9b0: 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  s3&MEM_TypeMask)
e9c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e9d0: 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61   Opcode: Permuta
e9e0: 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  tion * * * P4 *.
e9f0: 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65  **.** Set the pe
ea00: 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62  rmutation used b
ea10: 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  y the OP_Compare
ea20: 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20   operator to be 
ea30: 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20  the array.** of 
ea40: 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a  integers in P4..
ea50: 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74  **.** The permut
ea60: 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61  ation is only va
ea70: 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  lid until the ne
ea80: 78 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  xt OP_Permutatio
ea90: 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a  n, OP_Compare,.*
eaa0: 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f 50  * OP_Halt, or OP
eab0: 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20 54 79 70  _ResultRow.  Typ
eac0: 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65  ically the OP_Pe
ead0: 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64  rmutation should
eae0: 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64 69   occur.** immedi
eaf0: 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74  ately prior to t
eb00: 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a  he OP_Compare..*
eb10: 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74  /.case OP_Permut
eb20: 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72  ation: {.  asser
eb30: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
eb40: 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
eb50: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
eb60: 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74  .ai );.  aPermut
eb70: 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  e = pOp->p4.ai;.
eb80: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
eb90: 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50  pcode: Compare P
eba0: 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
ebb0: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76  ** Compare two v
ebc0: 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
ebd0: 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
ebe0: 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61  reg(P1+P3-1) (ca
ebf0: 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f  ll this.** vecto
ec00: 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65  r "A") and in re
ec10: 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33  g(P2)..reg(P2+P3
ec20: 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65  -1) ("B").  Save
ec30: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
ec40: 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
ec50: 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the 
ec60: 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73  next OP_Jump ins
ec70: 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  truct..**.** P4 
ec80: 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  is a KeyInfo str
ec90: 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69  ucture that defi
eca0: 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  nes collating se
ecb0: 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74  quences and sort
ecc0: 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74  .** orders for t
ecd0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
ece0: 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
ecf0: 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73  applies to regis
ed00: 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ters.** only.  T
ed10: 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65  he KeyInfo eleme
ed20: 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71  nts are used seq
ed30: 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  uentially..**.**
ed40: 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   The comparison 
ed50: 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72  is a sort compar
ed60: 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63  ison, so NULLs c
ed70: 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a  ompare equal,.**
ed80: 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20   NULLs are less 
ed90: 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75  than numbers, nu
eda0: 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74  mbers are less t
edb0: 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20  han strings,.** 
edc0: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
edd0: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
ede0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70  .*/.case OP_Comp
edf0: 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  are: {.  int n;.
ee00: 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70    int i;.  int p
ee10: 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63  1;.  int p2;.  c
ee20: 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  onst KeyInfo *pK
ee30: 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64  eyInfo;.  int id
ee40: 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  x;.  CollSeq *pC
ee50: 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  oll;    /* Colla
ee60: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f  ting sequence to
ee70: 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72   use on this ter
ee80: 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b  m */.  int bRev;
ee90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
eea0: 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47  e for DESCENDING
eeb0: 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a   sort order */..
eec0: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
eed0: 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
eee0: 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
eef0: 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20  assert( n>0 );. 
ef00: 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
ef10: 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70  o!=0 );.  p1 = p
ef20: 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
ef30: 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49  Op->p2;.#if SQLI
ef40: 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61  TE_DEBUG.  if( a
ef50: 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69  Permute ){.    i
ef60: 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20  nt k, mx = 0;.  
ef70: 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20    for(k=0; k<n; 
ef80: 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74  k++) if( aPermut
ef90: 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61  e[k]>mx ) mx = a
efa0: 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20  Permute[k];.    
efb0: 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
efc0: 70 31 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  p1+mx<=p->nMem+1
efd0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
efe0: 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 70  p2>0 && p2+mx<=p
eff0: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 65  ->nMem+1 );.  }e
f000: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
f010: 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 70   p1>0 && p1+n<=p
f020: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20 20  ->nMem+1 );.    
f030: 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
f040: 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  p2+n<=p->nMem+1 
f050: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
f060: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
f070: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
f080: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
f090: 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
f0a0: 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
f0b0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
f0c0: 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
f0d0: 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
f0e0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
f0f0: 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
f100: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
f110: 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
f120: 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
f130: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
f140: 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
f150: 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
f160: 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   i<pKeyInfo->nFi
f170: 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
f180: 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
f190: 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
f1a0: 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
f1b0: 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
f1c0: 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
f1d0: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
f1e0: 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
f1f0: 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
f200: 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
f210: 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
f220: 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
f230: 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
f240: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
f250: 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d    }.  aPermute =
f260: 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
f270: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
f280: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
f290: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
f2a0: 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
f2b0: 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
f2c0: 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
f2d0: 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
f2e0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
f2f0: 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
f300: 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
f310: 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
f320: 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
f330: 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
f340: 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
f350: 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
f360: 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
f370: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
f380: 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
f390: 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63  pare<0 ){.    pc
f3a0: 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a   = pOp->p1 - 1;.
f3b0: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d    }else if( iCom
f3c0: 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70  pare==0 ){.    p
f3d0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
f3e0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63  .  }else{.    pc
f3f0: 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a   = pOp->p3 - 1;.
f400: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
f410: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
f420: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
f430: 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
f440: 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  al AND of the va
f450: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
f460: 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  s P1 and P2 and.
f470: 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73  ** write the res
f480: 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ult into registe
f490: 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
f4a0: 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
f4b0: 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e  s 0 (false) then
f4c0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30   the result is 0
f4d0: 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20   even if.** the 
f4e0: 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
f4f0: 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
f500: 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c   true or two NUL
f510: 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c  Ls give.** a NUL
f520: 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20  L output..*/./* 
f530: 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32  Opcode: Or P1 P2
f540: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61   P3 * *.**.** Ta
f550: 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f  ke the logical O
f560: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
f570: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
f580: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
f590: 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e  re the answer in
f5a0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
f5b0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
f5c0: 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72   or P2 is nonzer
f5d0: 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68  o (true) then th
f5e0: 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74  e result is 1 (t
f5f0: 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20  rue).** even if 
f600: 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
f610: 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
f620: 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77   and false or tw
f630: 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20  o NULLs.** give 
f640: 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
f650: 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20  /.case OP_And:  
f660: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f670: 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69  ame as TK_AND, i
f680: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
f690: 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20  .case OP_Or: {  
f6a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f6b0: 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31  me as TK_OR, in1
f6c0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
f6d0: 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c   int v1;    /* L
f6e0: 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d  eft operand:  0=
f6f0: 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
f700: 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
f710: 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b  ULL */.  int v2;
f720: 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65      /* Right ope
f730: 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20  rand: 0==FALSE, 
f740: 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
f750: 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a  OWN or NULL */..
f760: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
f770: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
f780: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
f790: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20  _Null ){.    v1 
f7a0: 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
f7b0: 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64    v1 = sqlite3Vd
f7c0: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
f7d0: 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20  !=0;.  }.  pIn2 
f7e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
f7f0: 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c  ;.  if( pIn2->fl
f800: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
f810: 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20  {.    v2 = 2;.  
f820: 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20  }else{.    v2 = 
f830: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f840: 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20  lue(pIn2)!=0;.  
f850: 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  }.  if( pOp->opc
f860: 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20  ode==OP_And ){. 
f870: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
f880: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e  unsigned char an
f890: 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  d_logic[] = { 0,
f8a0: 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20   0, 0, 0, 1, 2, 
f8b0: 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76  0, 2, 2 };.    v
f8c0: 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31  1 = and_logic[v1
f8d0: 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b  *3+v2];.  }else{
f8e0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
f8f0: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
f900: 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  or_logic[] = { 0
f910: 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 2, 1, 1, 1,
f920: 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20   2, 1, 2 };.    
f930: 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31  v1 = or_logic[v1
f940: 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f  *3+v2];.  }.  pO
f950: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
f960: 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32  p3];.  if( v1==2
f970: 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79   ){.    MemSetTy
f980: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
f990: 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b  _Null);.  }else{
f9a0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
f9b0: 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   v1;.    MemSetT
f9c0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
f9d0: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72  M_Int);.  }.  br
f9e0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
f9f0: 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  e: Not P1 P2 * *
fa00: 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72   *.**.** Interpr
fa10: 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
fa20: 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
fa30: 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
fa40: 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f   Store the.** bo
fa50: 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74  olean complement
fa60: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
fa70: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
fa80: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
fa90: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
faa0: 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64  a NULL is stored
fab0: 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
fac0: 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  OP_Not: {       
fad0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
fae0: 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c   as TK_NOT, in1,
faf0: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
fb00: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
fb10: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
fb20: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
fb30: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
fb40: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
fb50: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
fb60: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
fb70: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
fb80: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
fb90: 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64  pOut, !sqlite3Vd
fba0: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
fbb0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
fbc0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
fbd0: 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
fbe0: 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
fbf0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
fc00: 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
fc10: 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72  n integer.  Stor
fc20: 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f  e the.** ones-co
fc30: 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20  mplement of the 
fc40: 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  P1 value into re
fc50: 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50  gister P2.  If P
fc60: 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c  1 holds.** a NUL
fc70: 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e  L then store a N
fc80: 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  ULL in P2..*/.ca
fc90: 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20  se OP_BitNot: { 
fca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
fcb0: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54  ame as TK_BITNOT
fcc0: 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
fcd0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
fce0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
fcf0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
fd00: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
fd10: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
fd20: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
fd30: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
fd40: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
fd50: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
fd60: 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c  Int64(pOut, ~sql
fd70: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
fd80: 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62  (pIn1));.  }.  b
fd90: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
fda0: 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a  de: Once P1 P2 *
fdb0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
fdc0: 20 69 66 20 4f 50 5f 4f 6e 63 65 20 66 6c 61 67   if OP_Once flag
fdd0: 20 50 31 20 69 73 20 73 65 74 2e 20 49 66 20 73   P1 is set. If s
fde0: 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
fdf0: 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
fe00: 77 69 73 65 2c 0a 2a 2a 20 73 65 74 20 74 68 65  wise,.** set the
fe10: 20 66 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20 74   flag and fall t
fe20: 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
fe30: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
fe40: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
fe50: 4a 75 6d 70 4f 6e 63 65 0a 2a 2f 0a 63 61 73 65  JumpOnce.*/.case
fe60: 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20   OP_Once: {     
fe70: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
fe80: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
fe90: 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ->p1<p->nOnceFla
fea0: 67 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f  g );.  if( p->aO
feb0: 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
fec0: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
fed0: 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b  ->p2-1;.  }else{
fee0: 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61  .    p->aOnceFla
fef0: 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a  g[pOp->p1] = 1;.
ff00: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
ff10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31  /* Opcode: If P1
ff20: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
ff30: 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
ff40: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
ff50: 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e  ster P1 is true.
ff60: 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
ff70: 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  s considered tru
ff80: 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72  e if it is numer
ff90: 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e  ic and non-zero.
ffa0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
ffb0: 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
ffc0: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
ffd0: 6d 70 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  mp if P3 is non-
ffe0: 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  zero..*/./* Opco
fff0: 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20  de: IfNot P1 P2 
10000 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
10010 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
10020 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
10030 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54   P1 is False.  T
10040 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63  he value.** is c
10050 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20  onsidered false 
10060 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65  if it has a nume
10070 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72  ric value of zer
10080 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
10090 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
100a0 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
100b0 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 7a 65  jump if P3 is ze
100c0 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ro..*/.case OP_I
100d0 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f:              
100e0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
100f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
10100 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
10110 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
10120 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d   int c;.  pIn1 =
10130 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
10140 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
10150 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
10160 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33  .    c = pOp->p3
10170 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65  ;.  }else{.#ifde
10180 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
10190 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20  OATING_POINT.   
101a0 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
101b0 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
101c0 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d  0;.#else.    c =
101d0 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
101e0 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30  Value(pIn1)!=0.0
101f0 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
10200 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
10210 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b  _IfNot ) c = !c;
10220 0a 20 20 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a  .  }.  if( c ){.
10230 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
10240 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
10250 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
10260 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  sNull P1 P2 * * 
10270 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
10280 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
10290 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
102a0 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
102b0 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20  OP_IsNull: {    
102c0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
102d0 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75  as TK_ISNULL, ju
102e0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
102f0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
10300 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
10310 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
10320 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  l)!=0 ){.    pc 
10330 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
10340 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10350 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c  * Opcode: NotNul
10360 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
10370 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
10380 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
10390 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f  egister P1 is no
103a0 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73  t NULL.  .*/.cas
103b0 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20  e OP_NotNull: { 
103c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
103d0 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c  me as TK_NOTNULL
103e0 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
103f0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
10400 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
10410 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
10420 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
10430 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
10440 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
10450 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
10460 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34  lumn P1 P2 P3 P4
10470 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70   P5.**.** Interp
10480 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ret the data tha
10490 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
104a0 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63  ts to as a struc
104b0 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67  ture built using
104c0 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  .** the MakeReco
104d0 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  rd instruction. 
104e0 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65   (See the MakeRe
104f0 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  cord opcode for 
10500 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e  additional.** in
10510 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
10520 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
10530 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63  e data.)  Extrac
10540 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  t the P2-th colu
10550 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20  mn.** from this 
10560 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72  record.  If ther
10570 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20  e are less that 
10580 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65  (P2+1) .** value
10590 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  s in the record,
105a0 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
105b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
105c0 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74   extracted is st
105d0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
105e0 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
105f0 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  e column contain
10600 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20  s fewer than P2 
10610 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74  fields, then ext
10620 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72  ract a NULL.  Or
10630 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61  ,.** if the P4 a
10640 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f  rgument is a P4_
10650 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75  MEM use the valu
10660 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75  e of the P4 argu
10670 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72  ment as.** the r
10680 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  esult..**.** If 
10690 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52  the OPFLAG_CLEAR
106a0 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74  CACHE bit is set
106b0 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73   on P5 and P1 is
106c0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
106d0 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20  cursor,.** then 
106e0 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65  the cache of the
106f0 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74   cursor is reset
10700 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63   prior to extrac
10710 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  ting the column.
10720 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50  .** The first OP
10730 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20  _Column against 
10740 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61  a pseudo-table a
10750 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f  fter the value o
10760 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  f the content.**
10770 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68   register has ch
10780 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76  anged should hav
10790 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a  e this bit set..
107a0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
107b0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
107c0 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
107d0 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20  RG bits are set 
107e0 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68  on P5 when.** th
107f0 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72  e result is guar
10800 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62  anteed to only b
10810 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
10820 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67  gument of a leng
10830 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f  th().** or typeo
10840 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65  f() function, re
10850 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65  spectively.  The
10860 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67   loading of larg
10870 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a  e blobs can be.*
10880 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65  * skipped for le
10890 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63  ngth() and all c
108a0 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63  ontent loading c
108b0 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f  an be skipped fo
108c0 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63  r typeof()..*/.c
108d0 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b  ase OP_Column: {
108e0 0a 20 20 75 33 32 20 70 61 79 6c 6f 61 64 53 69  .  u32 payloadSi
108f0 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ze;   /* Number 
10900 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
10910 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20  record */.  i64 
10920 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f  payloadSize64; /
10930 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
10940 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
10950 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20  */.  int p1;    
10960 20 20 20 20 20 20 20 20 2f 2a 20 50 31 20 76 61          /* P1 va
10970 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
10980 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20  e */.  int p2;  
10990 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c            /* col
109a0 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65  umn number to re
109b0 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65  trieve */.  Vdbe
109c0 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f  Cursor *pC;    /
109d0 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
109e0 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52 65  r */.  char *zRe
109f0 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  c;        /* Poi
10a00 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65  nter to complete
10a10 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a 2f 0a   record-data */.
10a20 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
10a30 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65  r;   /* The BTre
10a40 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33  e cursor */.  u3
10a50 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20 20 20  2 *aType;       
10a60 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c   /* aType[i] hol
10a70 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74  ds the numeric t
10a80 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74 68 20  ype of the i-th 
10a90 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20  column */.  u32 
10aa0 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f  *aOffset;      /
10ab0 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20  * aOffset[i] is 
10ac0 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74 20  offset to start 
10ad0 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68  of data for i-th
10ae0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74   column */.  int
10af0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
10b00 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  /* number of fie
10b10 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
10b20 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  d */.  int len; 
10b30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
10b40 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   length of the s
10b50 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66  erialized data f
10b60 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f  or the column */
10b70 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
10b80 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
10b90 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61 72 20  unter */.  char 
10ba0 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *zData;       /*
10bb0 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63   Part of the rec
10bc0 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
10bd0 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73  d */.  Mem *pDes
10be0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65  t;        /* Whe
10bf0 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  re to write the 
10c00 65 78 74 72 61 63 74 65 64 20 76 61 6c 75 65 20  extracted value 
10c10 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20  */.  Mem sMem;  
10c20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73          /* For s
10c30 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72  toring the recor
10c40 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
10c50 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78 3b 20 20  */.  u8 *zIdx;  
10c60 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
10c70 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a 2f 0a   into header */.
10c80 20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 20    u8 *zEndHdr;  
10c90 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
10ca0 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
10cb0 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
10cc0 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20  /.  u32 offset; 
10cd0 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
10ce0 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a   into the data *
10cf0 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64 3b  /.  u32 szField;
10d00 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
10d10 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
10d20 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69   content of a fi
10d30 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 48  eld */.  int szH
10d40 64 72 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  dr;         /* S
10d50 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65  ize of the heade
10d60 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61 74 20  r size field at 
10d70 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72 64 20  start of record 
10d80 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69 6c 3b 20  */.  int avail; 
10d90 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
10da0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76  r of bytes of av
10db0 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a  ailable data */.
10dc0 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20 20    u32 t;        
10dd0 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63       /* A type c
10de0 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63  ode from the rec
10df0 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  ord header */.  
10e00 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20  Mem *pReg;      
10e10 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c     /* PseudoTabl
10e20 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
10e30 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f 70   */...  p1 = pOp
10e40 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
10e50 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b 0a  ->p2;.  pC = 0;.
10e60 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
10e70 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
10e80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3c 70  ;.  assert( p1<p
10e90 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
10ea0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
10eb0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
10ec0 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20  nMem );.  pDest 
10ed0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
10ee0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
10ef0 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
10f00 20 20 7a 52 65 63 20 3d 20 30 3b 0a 0a 20 20 2f    zRec = 0;..  /
10f10 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20 73 65 74  * This block set
10f20 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 70  s the variable p
10f30 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62 65  ayloadSize to be
10f40 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
10f50 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73 20  r of.  ** bytes 
10f60 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20  in the record.. 
10f70 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69 73   **.  ** zRec is
10f80 20 73 65 74 20 74 6f 20 62 65 20 74 68 65 20 63   set to be the c
10f90 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
10fa0 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69 74  the record if it
10fb0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 20   is available.. 
10fc0 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74 65   ** The complete
10fd0 20 72 65 63 6f 72 64 20 74 65 78 74 20 69 73 20   record text is 
10fe0 61 6c 77 61 79 73 20 61 76 61 69 6c 61 62 6c 65  always available
10ff0 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62 6c   for pseudo-tabl
11000 65 73 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 72  es.  ** If the r
11010 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20  ecord is stored 
11020 69 6e 20 61 20 63 75 72 73 6f 72 2c 20 74 68 65  in a cursor, the
11030 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64   complete record
11040 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68 74   text.  ** might
11050 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e   be available in
11060 20 74 68 65 20 20 70 43 2d 3e 61 52 6f 77 20 63   the  pC->aRow c
11070 61 63 68 65 2e 20 20 4f 72 20 69 74 20 6d 69 67  ache.  Or it mig
11080 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a 20  ht not be..  ** 
11090 49 66 20 74 68 65 20 64 61 74 61 20 69 73 20 75  If the data is u
110a0 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52 65  navailable,  zRe
110b0 63 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  c is set to NULL
110c0 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20 61  ..  **.  ** We a
110d0 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 20  lso compute the 
110e0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
110f0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e  s in the record.
11100 20 20 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a 20    For cursors,. 
11110 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   ** the number o
11120 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74 6f  f columns is sto
11130 72 65 64 20 69 6e 20 74 68 65 20 56 64 62 65 43  red in the VdbeC
11140 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20 65 6c 65  ursor.nField ele
11150 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70 43 20  ment..  */.  pC 
11160 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31 5d 3b 0a  = p->apCsr[p1];.
11170 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
11180 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
11190 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
111a0 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70 43  BLE.  assert( pC
111b0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d 30  ->pVtabCursor==0
111c0 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 70 43 72   );.#endif.  pCr
111d0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
111e0 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d 30  ;.  if( pCrsr!=0
111f0 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 72   ){.    /* The r
11200 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20  ecord is stored 
11210 69 6e 20 61 20 42 2d 54 72 65 65 20 2a 2f 0a 20  in a B-Tree */. 
11220 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
11230 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
11240 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  pC);.    if( rc 
11250 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
11260 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69  _to_error;.    i
11270 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
11280 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53  {.      payloadS
11290 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ize = 0;.    }el
112a0 73 65 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65  se if( pC->cache
112b0 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65  Status==p->cache
112c0 43 74 72 20 29 7b 0a 20 20 20 20 20 20 70 61 79  Ctr ){.      pay
112d0 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 70  loadSize = pC->p
112e0 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20  ayloadSize;.    
112f0 20 20 7a 52 65 63 20 3d 20 28 63 68 61 72 2a 29    zRec = (char*)
11300 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d 65  pC->aRow;.    }e
11310 6c 73 65 20 69 66 28 20 70 43 2d 3e 69 73 49 6e  lse if( pC->isIn
11320 64 65 78 20 29 7b 0a 20 20 20 20 20 20 61 73 73  dex ){.      ass
11330 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
11340 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
11350 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 56  Crsr) );.      V
11360 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
11370 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
11380 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61  e(pCrsr, &payloa
11390 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20  dSize64);.      
113a0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
113b0 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 54 72  TE_OK );   /* Tr
113c0 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  ue because of Cu
113d0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
113e0 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20  l above */.     
113f0 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   /* sqlite3Btree
11400 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20 75  ParseCellPtr() u
11410 73 65 73 20 67 65 74 56 61 72 69 6e 74 33 32 28  ses getVarint32(
11420 29 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  ) to extract the
11430 0a 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61  .      ** payloa
11440 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73  d size, so it is
11450 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20   impossible for 
11460 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f  payloadSize64 to
11470 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72   be.      ** lar
11480 67 65 72 20 74 68 61 6e 20 33 32 20 62 69 74 73  ger than 32 bits
11490 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  . */.      asser
114a0 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36  t( (payloadSize6
114b0 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  4 & SQLITE_MAX_U
114c0 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61  32)==(u64)payloa
114d0 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20  dSize64 );.     
114e0 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28   payloadSize = (
114f0 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36  u32)payloadSize6
11500 34 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  4;.    }else{.  
11510 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
11520 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
11530 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
11540 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72        VVA_ONLY(r
11550 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65  c =) sqlite3Btre
11560 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c  eDataSize(pCrsr,
11570 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a   &payloadSize);.
11580 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
11590 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
115a0 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63   /* DataSize() c
115b0 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20  annot fail */.  
115c0 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20    }.  }else if( 
115d0 41 4c 57 41 59 53 28 70 43 2d 3e 70 73 65 75 64  ALWAYS(pC->pseud
115e0 6f 54 61 62 6c 65 52 65 67 3e 30 29 20 29 7b 0a  oTableReg>0) ){.
115f0 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d      pReg = &aMem
11600 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65  [pC->pseudoTable
11610 52 65 67 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  Reg];.    assert
11620 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20  ( pReg->flags & 
11630 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
11640 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
11650 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20  id(pReg) );.    
11660 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 52  payloadSize = pR
11670 65 67 2d 3e 6e 3b 0a 20 20 20 20 7a 52 65 63 20  eg->n;.    zRec 
11680 3d 20 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 70  = pReg->z;.    p
11690 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
116a0 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47   (pOp->p5&OPFLAG
116b0 5f 43 4c 45 41 52 43 41 43 48 45 29 20 3f 20 43  _CLEARCACHE) ? C
116c0 41 43 48 45 5f 53 54 41 4c 45 20 3a 20 70 2d 3e  ACHE_STALE : p->
116d0 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 61 73  cacheCtr;.    as
116e0 73 65 72 74 28 20 70 61 79 6c 6f 61 64 53 69 7a  sert( payloadSiz
116f0 65 3d 3d 30 20 7c 7c 20 7a 52 65 63 21 3d 30 20  e==0 || zRec!=0 
11700 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11710 2f 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 65 20  /* Consider the 
11720 72 6f 77 20 74 6f 20 62 65 20 4e 55 4c 4c 20 2a  row to be NULL *
11730 2f 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a  /.    payloadSiz
11740 65 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  e = 0;.  }..  /*
11750 20 49 66 20 70 61 79 6c 6f 61 64 53 69 7a 65 20   If payloadSize 
11760 69 73 20 30 2c 20 74 68 65 6e 20 6a 75 73 74 20  is 0, then just 
11770 73 74 6f 72 65 20 61 20 4e 55 4c 4c 2e 20 20 54  store a NULL.  T
11780 68 69 73 20 63 61 6e 20 68 61 70 70 65 6e 20 62  his can happen b
11790 65 63 61 75 73 65 20 6f 66 0a 20 20 2a 2a 20 6e  ecause of.  ** n
117a0 75 6c 6c 52 6f 77 20 6f 72 20 62 65 63 61 75 73  ullRow or becaus
117b0 65 20 6f 66 20 61 20 63 6f 72 72 75 70 74 20 64  e of a corrupt d
117c0 61 74 61 62 61 73 65 2e 20 2a 2f 0a 20 20 69 66  atabase. */.  if
117d0 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30  ( payloadSize==0
117e0 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79   ){.    MemSetTy
117f0 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45  peFlag(pDest, ME
11800 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 67 6f 74  M_Null);.    got
11810 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
11820 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64  .  }.  assert( d
11830 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
11840 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d  _LIMIT_LENGTH]>=
11850 30 20 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f  0 );.  if( paylo
11860 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62  adSize > (u32)db
11870 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
11880 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
11890 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
118a0 67 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64  g;.  }..  nField
118b0 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20   = pC->nField;. 
118c0 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65   assert( p2<nFie
118d0 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64  ld );..  /* Read
118e0 20 61 6e 64 20 70 61 72 73 65 20 74 68 65 20 74   and parse the t
118f0 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74  able header.  St
11900 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ore the results 
11910 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a  of the parse.  *
11920 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  * into the recor
11930 64 20 68 65 61 64 65 72 20 63 61 63 68 65 20 66  d header cache f
11940 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72  ields of the cur
11950 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70  sor..  */.  aTyp
11960 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20  e = pC->aType;. 
11970 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74   if( pC->cacheSt
11980 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74  atus==p->cacheCt
11990 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74  r ){.    aOffset
119a0 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a   = pC->aOffset;.
119b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
119c0 65 72 74 28 61 54 79 70 65 29 3b 0a 20 20 20 20  ert(aType);.    
119d0 61 76 61 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70  avail = 0;.    p
119e0 43 2d 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f 66  C->aOffset = aOf
119f0 66 73 65 74 20 3d 20 26 61 54 79 70 65 5b 6e 46  fset = &aType[nF
11a00 69 65 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70  ield];.    pC->p
11a10 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61 79  ayloadSize = pay
11a20 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 70 43  loadSize;.    pC
11a30 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
11a40 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20 20  p->cacheCtr;..  
11a50 20 20 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20    /* Figure out 
11a60 68 6f 77 20 6d 61 6e 79 20 62 79 74 65 73 20 61  how many bytes a
11a70 72 65 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  re in the header
11a80 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a 52 65 63   */.    if( zRec
11a90 20 29 7b 0a 20 20 20 20 20 20 7a 44 61 74 61 20   ){.      zData 
11aa0 3d 20 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73  = zRec;.    }els
11ab0 65 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  e{.      if( pC-
11ac0 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
11ad0 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61      zData = (cha
11ae0 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 4b  r*)sqlite3BtreeK
11af0 65 79 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  eyFetch(pCrsr, &
11b00 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65  avail);.      }e
11b10 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61  lse{.        zDa
11b20 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69  ta = (char*)sqli
11b30 74 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63  te3BtreeDataFetc
11b40 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29  h(pCrsr, &avail)
11b50 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
11b60 2f 2a 20 49 66 20 4b 65 79 46 65 74 63 68 28 29  /* If KeyFetch()
11b70 2f 44 61 74 61 46 65 74 63 68 28 29 20 6d 61 6e  /DataFetch() man
11b80 61 67 65 64 20 74 6f 20 67 65 74 20 74 68 65 20  aged to get the 
11b90 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a  entire payload,.
11ba0 20 20 20 20 20 20 2a 2a 20 73 61 76 65 20 74 68        ** save th
11bb0 65 20 70 61 79 6c 6f 61 64 20 69 6e 20 74 68 65  e payload in the
11bc0 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e   pC->aRow cache.
11bd0 20 20 54 68 61 74 20 77 69 6c 6c 20 73 61 76 65    That will save
11be0 20 75 73 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a   us from.      *
11bf0 2a 20 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65  * having to make
11c00 20 61 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c   additional call
11c10 73 20 74 6f 20 66 65 74 63 68 20 74 68 65 20 63  s to fetch the c
11c20 6f 6e 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f  ontent portion o
11c30 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72  f.      ** the r
11c40 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a  ecord..      */.
11c50 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76        assert( av
11c60 61 69 6c 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20  ail>=0 );.      
11c70 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20  if( payloadSize 
11c80 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b  <= (u32)avail ){
11c90 0a 20 20 20 20 20 20 20 20 7a 52 65 63 20 3d 20  .        zRec = 
11ca0 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 20 20 70  zData;.        p
11cb0 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a  C->aRow = (u8*)z
11cc0 44 61 74 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Data;.      }els
11cd0 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  e{.        pC->a
11ce0 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  Row = 0;.      }
11cf0 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68  .    }.    /* Th
11d00 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65  e following asse
11d10 72 74 20 69 73 20 74 72 75 65 20 69 6e 20 61 6c  rt is true in al
11d20 6c 20 63 61 73 65 73 20 65 78 63 65 70 74 20 77  l cases except w
11d30 68 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 64  hen.    ** the d
11d40 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 61 73  atabase file has
11d50 20 62 65 65 6e 20 63 6f 72 72 75 70 74 65 64 20   been corrupted 
11d60 65 78 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20  externally..    
11d70 2a 2a 20 20 20 20 61 73 73 65 72 74 28 20 7a 52  **    assert( zR
11d80 65 63 21 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d  ec!=0 || avail>=
11d90 70 61 79 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61  payloadSize || a
11da0 76 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20  vail>=9 ); */.  
11db0 20 20 73 7a 48 64 72 20 3d 20 67 65 74 56 61 72    szHdr = getVar
11dc0 69 6e 74 33 32 28 28 75 38 2a 29 7a 44 61 74 61  int32((u8*)zData
11dd0 2c 20 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20 20  , offset);..    
11de0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63  /* Make sure a c
11df0 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20  orrupt database 
11e00 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73  has not given us
11e10 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61   an oversize hea
11e20 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74  der..    ** Do t
11e30 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64  his now to avoid
11e40 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d   an oversize mem
11e50 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a  ory allocation..
11e60 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79      **.    ** Ty
11e70 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62  pe entries can b
11e80 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
11e90 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42  5 bytes each.  B
11ea0 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a  ut 4 and 5 byte.
11eb0 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65      ** types use
11ec0 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70   so much data sp
11ed0 61 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63  ace that there c
11ee0 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20  an only be 4096 
11ef0 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a  and 32 of.    **
11f00 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76   them, respectiv
11f10 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78  ely.  So the max
11f20 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67  imum header leng
11f30 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  th results from 
11f40 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20  a.    ** 3-byte 
11f50 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66  type for each of
11f60 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
11f70 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c  32768 columns pl
11f80 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20  us three.    ** 
11f90 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20  extra bytes for 
11fa0 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74  the header lengt
11fb0 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38  h itself.  32768
11fc0 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a  *3 + 3 = 98307..
11fd0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f      */.    if( o
11fe0 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 29 7b  ffset > 98307 ){
11ff0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
12000 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
12010 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
12020 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
12030 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65  ..    /* Compute
12040 20 69 6e 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62   in len the numb
12050 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
12060 61 74 61 20 77 65 20 6e 65 65 64 20 74 6f 20 72  ata we need to r
12070 65 61 64 20 69 6e 20 6f 72 64 65 72 0a 20 20 20  ead in order.   
12080 20 2a 2a 20 74 6f 20 67 65 74 20 6e 46 69 65 6c   ** to get nFiel
12090 64 20 74 79 70 65 20 76 61 6c 75 65 73 2e 20 20  d type values.  
120a0 6f 66 66 73 65 74 20 69 73 20 61 6e 20 75 70 70  offset is an upp
120b0 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73  er bound on this
120c0 2e 20 20 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46  .  But.    ** nF
120d0 69 65 6c 64 20 6d 69 67 68 74 20 62 65 20 73 69  ield might be si
120e0 67 6e 69 66 69 63 61 6e 74 6c 79 20 6c 65 73 73  gnificantly less
120f0 20 74 68 61 6e 20 74 68 65 20 74 72 75 65 20 6e   than the true n
12100 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
12110 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 74  .    ** in the t
12120 61 62 6c 65 2c 20 61 6e 64 20 69 6e 20 74 68 61  able, and in tha
12130 74 20 63 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64  t case, 5*nField
12140 2b 33 20 6d 69 67 68 74 20 62 65 20 73 6d 61 6c  +3 might be smal
12150 6c 65 72 20 74 68 61 6e 20 6f 66 66 73 65 74 2e  ler than offset.
12160 0a 20 20 20 20 2a 2a 20 57 65 20 77 61 6e 74 20  .    ** We want 
12170 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20  to minimize len 
12180 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69  in order to limi
12190 74 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  t the size of th
121a0 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20  e memory.    ** 
121b0 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65  allocation, espe
121c0 63 69 61 6c 6c 79 20 69 66 20 61 20 63 6f 72 72  cially if a corr
121d0 75 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c  upt database fil
121e0 65 20 68 61 73 20 63 61 75 73 65 64 20 6f 66 66  e has caused off
121f0 73 65 74 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  set.    ** to be
12200 20 6f 76 65 72 73 69 7a 65 64 2e 20 4f 66 66 73   oversized. Offs
12210 65 74 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f  et is limited to
12220 20 39 38 33 30 37 20 61 62 6f 76 65 2e 20 20 42   98307 above.  B
12230 75 74 20 39 38 33 30 37 20 6d 69 67 68 74 0a 20  ut 98307 might. 
12240 20 20 20 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65     ** still exce
12250 65 64 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79  ed Robson memory
12260 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69   allocation limi
12270 74 73 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69  ts on some confi
12280 67 75 72 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a  gurations..    *
12290 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 74 68 61  * On systems tha
122a0 74 20 63 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74  t cannot tolerat
122b0 65 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61  e large memory a
122c0 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65  llocations, nFie
122d0 6c 64 2a 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69  ld*5+3.    ** wi
122e0 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63  ll likely be muc
122f0 68 20 73 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20  h smaller since 
12300 6e 46 69 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65  nField will like
12310 6c 79 20 62 65 20 6c 65 73 73 20 74 68 61 6e 0a  ly be less than.
12320 20 20 20 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e      ** 20 or so.
12330 20 20 54 68 69 73 20 69 6e 73 75 72 65 73 20 74    This insures t
12340 68 61 74 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72  hat Robson memor
12350 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d  y allocation lim
12360 69 74 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e  its are.    ** n
12370 6f 74 20 65 78 63 65 65 64 65 64 20 65 76 65 6e  ot exceeded even
12380 20 66 6f 72 20 63 6f 72 72 75 70 74 20 64 61 74   for corrupt dat
12390 61 62 61 73 65 20 66 69 6c 65 73 2e 0a 20 20 20  abase files..   
123a0 20 2a 2f 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46   */.    len = nF
123b0 69 65 6c 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20  ield*5 + 3;.    
123c0 69 66 28 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f  if( len > (int)o
123d0 66 66 73 65 74 20 29 20 6c 65 6e 20 3d 20 28 69  ffset ) len = (i
123e0 6e 74 29 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20  nt)offset;..    
123f0 2f 2a 20 54 68 65 20 4b 65 79 46 65 74 63 68 28  /* The KeyFetch(
12400 29 20 6f 72 20 44 61 74 61 46 65 74 63 68 28 29  ) or DataFetch()
12410 20 61 62 6f 76 65 20 61 72 65 20 66 61 73 74 20   above are fast 
12420 61 6e 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65  and will get the
12430 20 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72   entire.    ** r
12440 65 63 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20  ecord header in 
12450 6d 6f 73 74 20 63 61 73 65 73 2e 20 20 42 75 74  most cases.  But
12460 20 74 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20   they will fail 
12470 74 6f 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c  to get the compl
12480 65 74 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72  ete.    ** recor
12490 64 20 68 65 61 64 65 72 20 69 66 20 74 68 65 20  d header if the 
124a0 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f  record header do
124b0 65 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20  es not fit on a 
124c0 73 69 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20  single page.    
124d0 2a 2a 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65  ** in the B-Tree
124e0 2e 20 20 57 68 65 6e 20 74 68 61 74 20 68 61 70  .  When that hap
124f0 70 65 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65  pens, use sqlite
12500 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
12510 65 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63  e() to.    ** ac
12520 71 75 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65  quire the comple
12530 74 65 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a  te header text..
12540 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21      */.    if( !
12550 7a 52 65 63 20 26 26 20 61 76 61 69 6c 3c 6c 65  zRec && avail<le
12560 6e 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e  n ){.      sMem.
12570 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20  flags = 0;.     
12580 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20   sMem.db = 0;.  
12590 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
125a0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
125b0 28 70 43 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20  (pCrsr, 0, len, 
125c0 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d  pC->isIndex, &sM
125d0 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  em);.      if( r
125e0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
125f0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
12600 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
12610 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20    }.      zData 
12620 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a  = sMem.z;.    }.
12630 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75      zEndHdr = (u
12640 38 20 2a 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b  8 *)&zData[len];
12650 0a 20 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20  .    zIdx = (u8 
12660 2a 29 26 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b  *)&zData[szHdr];
12670 0a 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20 74 68  ..    /* Scan th
12680 65 20 68 65 61 64 65 72 20 61 6e 64 20 75 73 65  e header and use
12690 20 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74   it to fill in t
126a0 68 65 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 61  he aType[] and a
126b0 4f 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20  Offset[].    ** 
126c0 61 72 72 61 79 73 2e 20 20 61 54 79 70 65 5b 69  arrays.  aType[i
126d0 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74  ] will contain t
126e0 68 65 20 74 79 70 65 20 69 6e 74 65 67 65 72 20  he type integer 
126f0 66 6f 72 20 74 68 65 20 69 2d 74 68 0a 20 20 20  for the i-th.   
12700 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61   ** column and a
12710 4f 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63  Offset[i] will c
12720 6f 6e 74 61 69 6e 20 74 68 65 20 6f 66 66 73 65  ontain the offse
12730 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
12740 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74  ning.    ** of t
12750 68 65 20 72 65 63 6f 72 64 20 74 6f 20 74 68 65  he record to the
12760 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 64 61   start of the da
12770 74 61 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20  ta for the i-th 
12780 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20  column.    */.  
12790 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69    for(i=0; i<nFi
127a0 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  eld; i++){.     
127b0 20 69 66 28 20 7a 49 64 78 3c 7a 45 6e 64 48 64   if( zIdx<zEndHd
127c0 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61 4f 66  r ){.        aOf
127d0 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74  fset[i] = offset
127e0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 49  ;.        if( zI
127f0 64 78 5b 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20  dx[0]<0x80 ){.  
12800 20 20 20 20 20 20 20 20 74 20 3d 20 7a 49 64 78          t = zIdx
12810 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7a  [0];.          z
12820 49 64 78 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  Idx++;.        }
12830 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
12840 7a 49 64 78 20 2b 3d 20 73 71 6c 69 74 65 33 47  zIdx += sqlite3G
12850 65 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c  etVarint32(zIdx,
12860 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a   &t);.        }.
12870 20 20 20 20 20 20 20 20 61 54 79 70 65 5b 69 5d          aType[i]
12880 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 73 7a   = t;.        sz
12890 46 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56  Field = sqlite3V
128a0 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
128b0 28 74 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66  (t);.        off
128c0 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a  set += szField;.
128d0 20 20 20 20 20 20 20 20 69 66 28 20 6f 66 66 73          if( offs
128e0 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f  et<szField ){  /
128f0 2a 20 54 72 75 65 20 69 66 20 6f 66 66 73 65 74  * True if offset
12900 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20   overflows */.  
12910 20 20 20 20 20 20 20 20 7a 49 64 78 20 3d 20 26          zIdx = &
12920 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20  zEndHdr[1];  /* 
12930 46 6f 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f  Forces SQLITE_CO
12940 52 52 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c  RRUPT return bel
12950 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ow */.          
12960 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
12970 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
12980 20 20 20 20 20 20 2f 2a 20 49 66 20 69 20 69 73        /* If i is
12990 20 6c 65 73 73 20 74 68 61 74 20 6e 46 69 65 6c   less that nFiel
129a0 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 61 72  d, then there ar
129b0 65 20 66 65 77 65 72 20 66 69 65 6c 64 73 20 69  e fewer fields i
129c0 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a  n this.        *
129d0 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20 53 65  * record than Se
129e0 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64 69  tNumColumns indi
129f0 63 61 74 65 64 20 74 68 65 72 65 20 61 72 65 20  cated there are 
12a00 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20  columns in the. 
12a10 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 2e         ** table.
12a20 20 53 65 74 20 74 68 65 20 6f 66 66 73 65 74 20   Set the offset 
12a30 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20 63 6f  for any extra co
12a40 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65 6e  lumns not presen
12a50 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20  t in.        ** 
12a60 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 30 2e  the record to 0.
12a70 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f 64 65   This tells code
12a80 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65 20   below to store 
12a90 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
12aa0 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72  e.        ** for
12ab0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 73 74   the column inst
12ac0 65 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c 69  ead of deseriali
12ad0 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72 6f  zing a value fro
12ae0 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  m the record..  
12af0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
12b00 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b   aOffset[i] = 0;
12b10 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
12b20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
12b30 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
12b40 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20  .    sMem.flags 
12b50 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20  = MEM_Null;..   
12b60 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72   /* If we have r
12b70 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20  ead more header 
12b80 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f  data than was co
12b90 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68  ntained in the h
12ba0 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72  eader,.    ** or
12bb0 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
12bc0 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
12bd0 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74  pears to be past
12be0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
12bf0 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f      ** record, o
12c00 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
12c10 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
12c20 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66  ppears to be bef
12c30 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20  ore the end.    
12c40 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
12c50 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64   (when all field
12c60 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e  s present), then
12c70 20 77 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c   we must be deal
12c80 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74 68  ing .    ** with
12c90 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
12ca0 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ase..    */.    
12cb0 69 66 28 20 28 7a 49 64 78 20 3e 20 7a 45 6e 64  if( (zIdx > zEnd
12cc0 48 64 72 29 20 7c 7c 20 28 6f 66 66 73 65 74 20  Hdr) || (offset 
12cd0 3e 20 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20  > payloadSize). 
12ce0 20 20 20 20 20 20 20 20 7c 7c 20 28 7a 49 64 78          || (zIdx
12cf0 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66  ==zEndHdr && off
12d00 73 65 74 21 3d 70 61 79 6c 6f 61 64 53 69 7a 65  set!=payloadSize
12d10 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  ) ){.      rc = 
12d20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
12d30 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
12d40 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
12d50 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47     }.  }..  /* G
12d60 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  et the column in
12d70 66 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20 61 4f  formation. If aO
12d80 66 66 73 65 74 5b 70 32 5d 20 69 73 20 6e 6f 6e  ffset[p2] is non
12d90 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20 20 2a  -zero, then .  *
12da0 2a 20 64 65 73 65 72 69 61 6c 69 7a 65 20 74 68  * deserialize th
12db0 65 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  e value from the
12dc0 20 72 65 63 6f 72 64 2e 20 49 66 20 61 4f 66 66   record. If aOff
12dd0 73 65 74 5b 70 32 5d 20 69 73 20 7a 65 72 6f 2c  set[p2] is zero,
12de0 0a 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 72 65  .  ** then there
12df0 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20   are not enough 
12e00 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
12e10 63 6f 72 64 20 74 6f 20 73 61 74 69 73 66 79 20  cord to satisfy 
12e20 74 68 65 0a 20 20 2a 2a 20 72 65 71 75 65 73 74  the.  ** request
12e30 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
12e40 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 4e   set the value N
12e50 55 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69 66 20  ULL or to P4 if 
12e60 50 34 20 69 73 0a 20 20 2a 2a 20 61 20 70 6f 69  P4 is.  ** a poi
12e70 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d 20 6f 62  nter to a Mem ob
12e80 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  ject..  */.  if(
12e90 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 29 7b 0a   aOffset[p2] ){.
12ea0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
12eb0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20  SQLITE_OK );.   
12ec0 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20   if( zRec ){.   
12ed0 20 20 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73     VdbeMemReleas
12ee0 65 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  e(pDest);.      
12ef0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
12f00 6c 47 65 74 28 28 75 38 20 2a 29 26 7a 52 65 63  lGet((u8 *)&zRec
12f10 5b 61 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61  [aOffset[p2]], a
12f20 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29  Type[p2], pDest)
12f30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
12f40 20 20 20 74 20 3d 20 61 54 79 70 65 5b 70 32 5d     t = aType[p2]
12f50 3b 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 71  ;.      len = sq
12f60 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
12f70 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
12f80 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20   if( (pOp->p5 & 
12f90 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52  (OPFLAG_LENGTHAR
12fa0 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  G|OPFLAG_TYPEOFA
12fb0 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 26  RG))!=0.       &
12fc0 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26  & ((t>=12 && (t&
12fd0 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e  1)==0) || (pOp->
12fe0 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45  p5 & OPFLAG_TYPE
12ff0 4f 46 41 52 47 29 21 3d 30 29 0a 20 20 20 20 20  OFARG)!=0).     
13000 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43   ){.        /* C
13010 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65  ontent is irrele
13020 76 61 6e 74 20 66 6f 72 20 74 68 65 20 74 79 70  vant for the typ
13030 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 61  eof() function a
13040 6e 64 20 66 6f 72 0a 20 20 20 20 20 20 20 20 2a  nd for.        *
13050 2a 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20  * the length(X) 
13060 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73  function if X is
13070 20 61 20 62 6c 6f 62 2e 20 20 53 6f 20 77 65 20   a blob.  So we 
13080 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73  might as well us
13090 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 62 6f 67  e.        ** bog
130a0 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68 65  us content rathe
130b0 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 20 63  r than reading c
130c0 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b  ontent from disk
130d0 2e 20 20 4e 55 4c 4c 20 77 6f 72 6b 73 0a 20 20  .  NULL works.  
130e0 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 74 65 78        ** for tex
130f0 74 20 61 6e 64 20 62 6c 6f 62 20 61 6e 64 20 77  t and blob and w
13100 68 61 74 65 76 65 72 20 69 73 20 69 6e 20 74 68  hatever is in th
13110 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  e payloadSize64 
13120 76 61 72 69 61 62 6c 65 0a 20 20 20 20 20 20 20  variable.       
13130 20 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f   ** will work fo
13140 72 20 65 76 65 72 79 74 68 69 6e 67 20 65 6c 73  r everything els
13150 65 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 7a 44  e. */.        zD
13160 61 74 61 20 3d 20 74 3c 31 32 20 3f 20 28 63 68  ata = t<12 ? (ch
13170 61 72 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a 65  ar*)&payloadSize
13180 36 34 20 3a 20 30 3b 0a 20 20 20 20 20 20 7d 65  64 : 0;.      }e
13190 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
131a0 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
131b0 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20  &sMem, pDest);. 
131c0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
131d0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
131e0 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73  ree(pCrsr, aOffs
131f0 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 20 70 43  et[p2], len,  pC
13200 2d 3e 69 73 49 6e 64 65 78 2c 0a 20 20 20 20 20  ->isIndex,.     
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13230 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20  &sMem);.        
13240 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
13250 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
13260 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
13270 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
13280 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65       zData = sMe
13290 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  m.z;.      }.   
132a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
132b0 72 69 61 6c 47 65 74 28 28 75 38 2a 29 7a 44 61  rialGet((u8*)zDa
132c0 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20  ta, t, pDest);. 
132d0 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e     }.    pDest->
132e0 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
132f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28    }else{.    if(
13300 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
13310 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73 71  _MEM ){.      sq
13320 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
13330 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70  lowCopy(pDest, p
13340 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d  Op->p4.pMem, MEM
13350 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d 65  _Static);.    }e
13360 6c 73 65 7b 0a 20 20 20 20 20 20 4d 65 6d 53 65  lse{.      MemSe
13370 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
13380 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
13390 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77  }.  }..  /* If w
133a0 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  e dynamically al
133b0 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f  located space to
133c0 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28   hold the data (
133d0 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69  in the.  ** sqli
133e0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
133f0 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  ree() call above
13400 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72 20  ) then transfer 
13410 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a  control of that.
13420 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79    ** dynamically
13430 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
13440 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44 65   over to the pDe
13450 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20  st structure..  
13460 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73  ** This prevents
13470 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a   a memory copy..
13480 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e    */.  if( sMem.
13490 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61  zMalloc ){.    a
134a0 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73  ssert( sMem.z==s
134b0 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20  Mem.zMalloc );. 
134c0 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65     assert( !(pDe
134d0 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  st->flags & MEM_
134e0 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73 65  Dyn) );.    asse
134f0 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61  rt( !(pDest->fla
13500 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
13510 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73  EM_Str)) || pDes
13520 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a  t->z==sMem.z );.
13530 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
13540 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c   &= ~(MEM_Ephem|
13550 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
13560 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d   pDest->flags |=
13570 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70   MEM_Term;.    p
13580 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a  Dest->z = sMem.z
13590 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61  ;.    pDest->zMa
135a0 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c  lloc = sMem.zMal
135b0 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d  loc;.  }..  rc =
135c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
135d0 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44 65  akeWriteable(pDe
135e0 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  st);..op_column_
135f0 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  out:.  UPDATE_MA
13600 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
13610 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
13620 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
13630 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st);.  break;.}.
13640 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69  ./* Opcode: Affi
13650 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20  nity P1 P2 * P4 
13660 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66  *.**.** Apply af
13670 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61  finities to a ra
13680 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74  nge of P2 regist
13690 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74  ers starting wit
136a0 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  h P1..**.** P4 i
136b0 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
136c0 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
136d0 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63   long. The nth c
136e0 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
136f0 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
13700 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
13710 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
13720 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
13730 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72  the nth.** memor
13740 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
13750 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
13760 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
13770 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
13780 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
13790 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
137a0 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63  lied */.  char c
137b0 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aff;            
137c0 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63     /* A single c
137d0 68 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69  haracter of affi
137e0 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  nity */..  zAffi
137f0 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
13800 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
13810 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
13820 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b  sert( zAffinity[
13830 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20  pOp->p2]==0 );. 
13840 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
13850 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28  p->p1];.  while(
13860 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69   (cAff = *(zAffi
13870 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20  nity++))!=0 ){. 
13880 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20     assert( pIn1 
13890 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e  <= &p->aMem[p->n
138a0 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  Mem] );.    asse
138b0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
138c0 49 6e 31 29 20 29 3b 0a 20 20 20 20 45 78 70 61  In1) );.    Expa
138d0 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
138e0 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
138f0 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f  pIn1, cAff, enco
13900 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b  ding);.    pIn1+
13910 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
13920 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  }../* Opcode: Ma
13930 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50  keRecord P1 P2 P
13940 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e  3 P4 *.**.** Con
13950 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
13960 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
13970 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
13980 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
13990 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
139a0 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
139b0 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
139c0 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
139d0 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
139e0 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
139f0 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
13a00 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
13a10 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
13a20 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
13a30 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
13a40 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20  e nth character 
13a50 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
13a60 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
13a70 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
13a80 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
13a90 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a  ed for the nth.*
13aa0 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69  * field of the i
13ab0 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20  ndex key..**.** 
13ac0 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d  The mapping from
13ad0 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66   character to af
13ae0 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20  finity is given 
13af0 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  by the SQLITE_AF
13b00 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66  F_.** macros def
13b10 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e  ined in sqliteIn
13b20 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  t.h..**.** If P4
13b30 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c   is NULL then al
13b40 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68  l index fields h
13b50 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79  ave the affinity
13b60 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NONE..*/.case O
13b70 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a  P_MakeRecord: {.
13b80 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64    u8 *zNewRecord
13b90 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75  ;        /* A bu
13ba0 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65  ffer to hold the
13bb0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65   data for the ne
13bc0 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  w record */.  Me
13bd0 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20  m *pRec;        
13be0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
13bf0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20  record */.  u64 
13c00 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  nData;          
13c10 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13c20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
13c30 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64  ace */.  int nHd
13c40 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
13c50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
13c60 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
13c70 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  ce */.  i64 nByt
13c80 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
13c90 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71  * Data space req
13ca0 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72  uired for this r
13cb0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
13cc0 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20  Zero;           
13cd0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
13ce0 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
13cf0 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
13d00 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72  rd */.  int nVar
13d10 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
13d20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
13d30 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f  s in a varint */
13d40 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79  .  u32 serial_ty
13d50 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70  pe;       /* Typ
13d60 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d  e field */.  Mem
13d70 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20   *pData0;       
13d80 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65      /* First fie
13d90 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65  ld to be combine
13da0 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  d into the recor
13db0 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73  d */.  Mem *pLas
13dc0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
13dd0 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74   Last field of t
13de0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
13df0 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
13e00 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13e10 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
13e20 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61   record */.  cha
13e30 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
13e40 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
13e50 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ity string for t
13e60 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
13e70 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  nt file_format; 
13e80 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f        /* File fo
13e90 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20  rmat to use for 
13ea0 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
13eb0 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
13ec0 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
13ed0 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
13ee0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  [] */.  int len;
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13f00 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69  * Length of a fi
13f10 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  eld */..  /* Ass
13f20 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  uming the record
13f30 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c   contains N fiel
13f40 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66  ds, the record f
13f50 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a  ormat looks.  **
13f60 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a   like this:.  **
13f70 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
13f80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13f90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13fa0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13fb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
13fc0 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c   ** | hdr-size |
13fd0 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31   type 0 | type 1
13fe0 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d   | ... | type N-
13ff0 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20  1 | data0 | ... 
14000 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20  | data N-1 | .  
14010 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
14020 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14030 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14040 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14050 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
14060 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73  .  ** Data(0) is
14070 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
14080 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31  ster P1.  Data(1
14090 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67  ) comes from reg
140a0 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20  ister P1+1.  ** 
140b0 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20  and so froth..  
140c0 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70  **.  ** Each typ
140d0 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72  e field is a var
140e0 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67  int representing
140f0 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65   the serial type
14100 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f   of the .  ** co
14110 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61  rresponding data
14120 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71   element (see sq
14130 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14140 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a  ype()). The.  **
14150 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20   hdr-size field 
14160 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74  is also a varint
14170 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
14180 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
14190 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20  ginning.  ** of 
141a0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61  the record to da
141b0 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74  ta0..  */.  nDat
141c0 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
141d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
141e0 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
141f0 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20  */.  nHdr = 0;  
14200 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14210 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
14220 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
14230 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20  nZero = 0;      
14240 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14250 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
14260 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
14270 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  ord */.  nField 
14280 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66  = pOp->p1;.  zAf
14290 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
142a0 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46  .z;.  assert( nF
142b0 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ield>0 && pOp->p
142c0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
142d0 46 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  Field<=p->nMem+1
142e0 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
142f0 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
14300 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
14310 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
14320 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
14330 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
14340 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
14350 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
14360 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
14370 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
14380 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
14390 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
143a0 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
143b0 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
143c0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
143d0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
143e0 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
143f0 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
14400 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
14410 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
14420 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
14430 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
14440 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
14450 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
14460 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
14470 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30   for(pRec=pData0
14480 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70  ; pRec<=pLast; p
14490 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  Rec++){.    asse
144a0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
144b0 52 65 63 29 20 29 3b 0a 20 20 20 20 69 66 28 20  Rec) );.    if( 
144c0 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20  zAffinity ){.   
144d0 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
144e0 28 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79  (pRec, zAffinity
144f0 5b 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65  [pRec-pData0], e
14500 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a  ncoding);.    }.
14510 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
14520 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20  ags&MEM_Zero && 
14530 70 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20  pRec->n>0 ){.   
14540 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
14550 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63  mExpandBlob(pRec
14560 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72  );.    }.    ser
14570 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
14580 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
14590 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
145a0 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73  at);.    len = s
145b0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
145c0 54 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74  TypeLen(serial_t
145d0 79 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20  ype);.    nData 
145e0 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72  += len;.    nHdr
145f0 20 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e   += sqlite3Varin
14600 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
14610 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
14620 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
14630 6f 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e  o ){.      /* On
14640 6c 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c  ly pure zero-fil
14650 6c 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65  led BLOBs can be
14660 20 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f   input to this O
14670 70 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20  pcode..      ** 
14680 57 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  We do not allow 
14690 62 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65  blobs with a pre
146a0 66 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66  fix and a zero-f
146b0 69 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20  illed tail. */. 
146c0 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52       nZero += pR
146d0 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
146e0 20 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29   }else if( len )
146f0 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20  {.      nZero = 
14700 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  0;.    }.  }..  
14710 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69  /* Add the initi
14720 61 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74  al header varint
14730 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73   and total the s
14740 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d  ize */.  nHdr +=
14750 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74   nVarint = sqlit
14760 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
14770 29 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74  );.  if( nVarint
14780 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65  <sqlite3VarintLe
14790 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e  n(nHdr) ){.    n
147a0 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79  Hdr++;.  }.  nBy
147b0 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d  te = nHdr+nData-
147c0 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79  nZero;.  if( nBy
147d0 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
147e0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
147f0 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
14800 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f  oo_big;.  }..  /
14810 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
14820 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
14830 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72  has a buffer lar
14840 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f  ge enough to sto
14850 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77  re .  ** the new
14860 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74   record. The out
14870 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f  put register (pO
14880 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c  p->p3) is not al
14890 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65  lowed to.  ** be
148a0 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75   one of the inpu
148b0 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63  t registers (bec
148c0 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ause the followi
148d0 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20  ng call to.  ** 
148e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
148f0 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62  ow() could clobb
14900 65 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66  er the value bef
14910 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e  ore it is used).
14920 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
14930 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
14940 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c  Out, (int)nByte,
14950 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
14960 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
14970 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
14980 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
14990 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
149a0 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
149b0 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
149c0 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70  , nHdr);.  for(p
149d0 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
149e0 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
149f0 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
14a00 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
14a10 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
14a20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
14a30 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74    i += putVarint
14a40 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  32(&zNewRecord[i
14a50 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  ], serial_type);
14a60 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20        /* serial 
14a70 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f  type */.  }.  fo
14a80 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
14a90 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
14aa0 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20  ++){  /* serial 
14ab0 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d  data */.    i +=
14ac0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
14ad0 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
14ae0 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74  d[i], (int)(nByt
14af0 65 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f  e-i), pRec,file_
14b00 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61  format);.  }.  a
14b10 73 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20  ssert( i==nByte 
14b20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
14b30 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
14b40 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
14b50 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
14b60 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
14b70 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20  lags = MEM_Blob 
14b80 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75  | MEM_Dyn;.  pOu
14b90 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69  t->xDel = 0;.  i
14ba0 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
14bb0 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
14bc0 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
14bd0 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
14be0 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ro;.  }.  pOut->
14bf0 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
14c00 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
14c10 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
14c20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78  converted to tex
14c30 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f  t */.  REGISTER_
14c40 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
14c50 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
14c60 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
14c70 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
14c80 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
14c90 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
14ca0 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
14cb0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
14cc0 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
14cd0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
14ce0 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
14cf0 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
14d00 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
14d10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
14d20 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
14d30 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
14d40 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
14d50 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
14d60 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42   i64 nEntry;.  B
14d70 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
14d80 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70  .  pCrsr = p->ap
14d90 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43  Csr[pOp->p1]->pC
14da0 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57  ursor;.  if( ALW
14db0 41 59 53 28 70 43 72 73 72 29 20 29 7b 0a 20 20  AYS(pCrsr) ){.  
14dc0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
14dd0 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20  reeCount(pCrsr, 
14de0 26 6e 45 6e 74 72 79 29 3b 0a 20 20 7d 65 6c 73  &nEntry);.  }els
14df0 65 7b 0a 20 20 20 20 6e 45 6e 74 72 79 20 3d 20  e{.    nEntry = 
14e00 30 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  0;.  }.  pOut->u
14e10 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62  .i = nEntry;.  b
14e20 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
14e30 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70  /* Opcode: Savep
14e40 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a  oint P1 * * P4 *
14e50 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c  .**.** Open, rel
14e60 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b  ease or rollback
14e70 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e   the savepoint n
14e80 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65  amed by paramete
14e90 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a  r P4, depending.
14ea0 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20  ** on the value 
14eb0 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61  of P1. To open a
14ec0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20   new savepoint, 
14ed0 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73  P1==0. To releas
14ee0 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a  e (commit) an.**
14ef0 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
14f00 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74  int, P1==1, or t
14f10 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78  o rollback an ex
14f20 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
14f30 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20   P1==2..*/.case 
14f40 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a  OP_Savepoint: {.
14f50 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
14f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f70 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31    /* Value of P1
14f80 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68   operand */.  ch
14f90 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14fb0 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69   Name of savepoi
14fc0 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d  nt */.  int nNam
14fd0 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  e;.  Savepoint *
14fe0 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e  pNew;.  Savepoin
14ff0 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  t *pSavepoint;. 
15000 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70   Savepoint *pTmp
15010 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  ;.  int iSavepoi
15020 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20  nt;.  int ii;.. 
15030 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
15040 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34   zName = pOp->p4
15050 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74  .z;..  /* Assert
15060 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72   that the p1 par
15070 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e  ameter is valid.
15080 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68   Also that if th
15090 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20  ere is no open. 
150a0 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c   ** transaction,
150b0 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e   then there cann
150c0 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f  ot be any savepo
150d0 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73  ints. .  */.  as
150e0 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
150f0 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61  oint==0 || db->a
15100 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
15110 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41    assert( p1==SA
15120 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70  VEPOINT_BEGIN||p
15130 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
15140 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EASE||p1==SAVEPO
15150 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a  INT_ROLLBACK );.
15160 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
15170 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e  avepoint || db->
15180 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
15190 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61  epoint==0 );.  a
151a0 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
151b0 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
151c0 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56  ;..  if( p1==SAV
151d0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a  EPOINT_BEGIN ){.
151e0 20 20 20 20 69 66 28 20 64 62 2d 3e 77 72 69 74      if( db->writ
151f0 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20  eVdbeCnt>0 ){.  
15200 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76      /* A new sav
15210 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65  epoint cannot be
15220 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72   created if ther
15230 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
15240 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61  te .      ** sta
15250 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70  tements (i.e. op
15260 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e  en read/write in
15270 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68  cremental blob h
15280 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a  andles)..      *
15290 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
152a0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
152b0 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
152c0 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74  t open savepoint
152d0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
152e0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
152f0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
15300 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
15310 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
15320 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
15330 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
15340 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
15350 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
15360 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
15370 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
15380 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
15390 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
153a0 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
153b0 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
153c0 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
153d0 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
153e0 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
153f0 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
15400 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
15410 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
15420 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
15430 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
15440 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
15450 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
15460 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
15470 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
15480 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
15490 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
154a0 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
154b0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
154c0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
154d0 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
154e0 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15500 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
15510 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
15520 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
15530 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
15540 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
15550 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
15560 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
15570 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
15580 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
15590 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
155a0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
155b0 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
155c0 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
155d0 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
155e0 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
155f0 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
15600 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
15610 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
15620 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
15630 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
15640 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
15650 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
15660 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
15670 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
15680 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
15690 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
156a0 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
156b0 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
156c0 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
156d0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
156e0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
156f0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
15700 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
15710 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
15720 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
15730 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
15740 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20      }.    .     
15750 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
15760 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
15770 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
15780 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
15790 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
157a0 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
157b0 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
157c0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
157d0 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
157e0 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
157f0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
15800 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20  dCons;.      }. 
15810 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
15820 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30    iSavepoint = 0
15830 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74  ;..    /* Find t
15840 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69  he named savepoi
15850 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20  nt. If there is 
15860 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
15870 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a  t, then an.    *
15880 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  * an error is re
15890 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
158a0 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28  er.  */.    for(
158b0 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
158c0 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
158d0 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65  nt; .      pSave
158e0 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33  point && sqlite3
158f0 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69  StrICmp(pSavepoi
15900 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  nt->zName, zName
15910 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  );.      pSavepo
15920 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
15930 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20  ->pNext.    ){. 
15940 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b       iSavepoint+
15950 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
15960 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a   !pSavepoint ){.
15970 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
15980 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
15990 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68  sg, db, "no such
159a0 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c   savepoint: %s",
159b0 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72   zName);.      r
159c0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
159d0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
159e0 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74  db->writeVdbeCnt
159f0 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f  >0 && p1==SAVEPO
15a00 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
15a10 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f       /* It is no
15a20 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65  t possible to re
15a30 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
15a40 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68   savepoint if th
15a50 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a  ere are .      *
15a60 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20 73  * active write s
15a70 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20  tatements..     
15a80 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
15a90 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
15aa0 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20  ErrMsg, db, .   
15ab0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 72 65 6c       "cannot rel
15ac0 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d  ease savepoint -
15ad0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
15ae0 69 6e 20 70 72 6f 67 72 65 73 73 22 0a 20 20 20  in progress".   
15af0 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d     );.      rc =
15b00 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
15b10 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20    }else{..      
15b20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65  /* Determine whe
15b30 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73  ther or not this
15b40 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
15b50 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  n savepoint. If 
15b60 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  so,.      ** and
15b70 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
15b80 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e  SE command, then
15b90 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
15ba0 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20  nsaction .      
15bb0 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e  ** is committed.
15bc0 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20   .      */.     
15bd0 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69   int isTransacti
15be0 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  on = pSavepoint-
15bf0 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d  >pNext==0 && db-
15c00 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
15c10 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69  vepoint;.      i
15c20 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  f( isTransaction
15c30 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
15c40 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
15c50 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73       if( (rc = s
15c60 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
15c70 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
15c80 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
15c90 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
15ca0 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
15cb0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
15cc0 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  mit = 1;.       
15cd0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
15ce0 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
15cf0 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
15d00 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
15d10 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
15d20 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
15d30 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
15d40 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
15d50 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
15d60 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
15d70 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
15d80 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
15d90 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20  avepoint = 0;.  
15da0 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63        rc = p->rc
15db0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
15dc0 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
15dd0 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
15de0 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
15df0 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  - 1;.        for
15e00 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
15e10 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
15e20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
15e30 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64  TripAllCursors(d
15e40 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20  b->aDb[ii].pBt, 
15e50 53 51 4c 49 54 45 5f 41 42 4f 52 54 29 3b 0a 20  SQLITE_ABORT);. 
15e60 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
15e70 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
15e80 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
15e90 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
15ea0 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69  ite3BtreeSavepoi
15eb0 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  nt(db->aDb[ii].p
15ec0 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  Bt, p1, iSavepoi
15ed0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nt);.          i
15ee0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
15ef0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
15f00 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
15f10 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
15f20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
15f30 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53         if( p1==S
15f40 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
15f50 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 26  K && (db->flags&
15f60 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
15f70 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20 20  nges)!=0 ){.    
15f80 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
15f90 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
15fa0 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20  ments(db);.     
15fb0 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
15fc0 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
15fd0 64 62 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20  db, -1);.       
15fe0 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28     db->flags = (
15ff0 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49  db->flags | SQLI
16000 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
16010 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
16020 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
16030 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   Regardless of w
16040 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
16050 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c   RELEASE or ROLL
16060 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c  BACK, destroy al
16070 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  l .      ** save
16080 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e  points nested in
16090 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76 65  side of the save
160a0 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
160b0 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ated on. */.    
160c0 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61    while( db->pSa
160d0 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f  vepoint!=pSavepo
160e0 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70  int ){.        p
160f0 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  Tmp = db->pSavep
16100 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
16110 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
16120 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  Tmp->pNext;.    
16130 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
16140 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20  e(db, pTmp);.   
16150 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
16160 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a  int--;.      }..
16170 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69        /* If it i
16180 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65  s a RELEASE, the
16190 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61  n destroy the sa
161a0 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
161b0 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20  erated on .     
161c0 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69   ** too. If it i
161d0 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c  s a ROLLBACK TO,
161e0 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75   then set the nu
161f0 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
16200 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74   .      ** const
16210 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
16220 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
16230 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20  database to the 
16240 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20  value stored.   
16250 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73     ** when the s
16260 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65  avepoint was cre
16270 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20  ated.  */.      
16280 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
16290 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
162a0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61       assert( pSa
162b0 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61  vepoint==db->pSa
162c0 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20  vepoint );.     
162d0 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
162e0 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  t = pSavepoint->
162f0 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
16300 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
16310 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   pSavepoint);.  
16320 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61        if( !isTra
16330 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  nsaction ){.    
16340 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
16350 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20  oint--;.        
16360 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  }.      }else{. 
16370 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65         db->nDefe
16380 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65  rredCons = pSave
16390 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64  point->nDeferred
163a0 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  Cons;.      }.. 
163b0 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e       if( !isTran
163c0 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20  saction ){.     
163d0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
163e0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
163f0 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
16400 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
16410 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
16420 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
16430 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
16440 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61     }.  }..  brea
16450 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
16460 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50   AutoCommit P1 P
16470 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65  2 * * *.**.** Se
16480 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  t the database a
16490 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20  uto-commit flag 
164a0 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20  to P1 (1 or 0). 
164b0 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72  If P2 is true, r
164c0 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20  oll.** back any 
164d0 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65  currently active
164e0 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69   btree transacti
164f0 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72  ons. If there ar
16500 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20  e any active.** 
16510 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20  VMs (apart from 
16520 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20  this one), then 
16530 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73  a ROLLBACK fails
16540 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c  .  A COMMIT fail
16550 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72  s if.** there ar
16560 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e 67  e active writing
16570 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56   VMs or active V
16580 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61 72  Ms that use shar
16590 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20  ed cache..**.** 
165a0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
165b0 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20 74   causes the VM t
165c0 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  o halt..*/.case 
165d0 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b  OP_AutoCommit: {
165e0 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41 75  .  int desiredAu
165f0 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20  toCommit;.  int 
16600 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74  iRollback;.  int
16610 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65   turnOnAC;..  de
16620 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
16630 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f  = pOp->p1;.  iRo
16640 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32  llback = pOp->p2
16650 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64  ;.  turnOnAC = d
16660 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
16670 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d   && !db->autoCom
16680 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28 20 64  mit;.  assert( d
16690 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
166a0 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75  ==1 || desiredAu
166b0 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
166c0 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
166d0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
166e0 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b   iRollback==0 );
166f0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
16700 63 74 69 76 65 56 64 62 65 43 6e 74 3e 30 20 29  ctiveVdbeCnt>0 )
16710 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
16720 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
16730 74 69 76 65 20 2a 2f 0a 0a 23 69 66 20 30 0a 20  tive */..#if 0. 
16740 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26   if( turnOnAC &&
16750 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62   iRollback && db
16760 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
16770 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  1 ){.    /* If t
16780 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
16790 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c  implements a ROL
167a0 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20  LBACK and other 
167b0 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73  VMs are.    ** s
167c0 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e  till running, an
167d0 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  d a transaction 
167e0 69 73 20 61 63 74 69 76 65 2c 20 72 65 74 75 72  is active, retur
167f0 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
16800 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61  ating.    ** tha
16810 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
16820 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
16830 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  rst. .    */.   
16840 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
16850 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
16860 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  b, "cannot rollb
16870 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
16880 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
16890 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
168a0 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72  rogress");.    r
168b0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
168c0 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
168d0 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26    if( turnOnAC &
168e0 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20  & !iRollback && 
168f0 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74  db->writeVdbeCnt
16900 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  >0 ){.    /* If 
16910 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
16920 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f   implements a CO
16930 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56  MMIT and other V
16940 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20  Ms are writing. 
16950 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20     ** return an 
16960 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
16970 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20   that the other 
16980 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  VMs must complet
16990 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f  e first. .    */
169a0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
169b0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
169c0 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63  g, db, "cannot c
169d0 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f  ommit transactio
169e0 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  n - ".        "S
169f0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
16a00 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
16a10 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
16a20 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64  Y;.  }else if( d
16a30 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
16a40 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  !=db->autoCommit
16a50 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c   ){.    if( iRol
16a60 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61  lback ){.      a
16a70 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
16a80 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20  toCommit==1 );. 
16a90 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c       sqlite3Roll
16aa0 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49  backAll(db, SQLI
16ab0 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
16ac0 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  K);.      db->au
16ad0 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
16ae0 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20    }else if( (rc 
16af0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
16b00 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
16b10 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
16b20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
16b30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
16b40 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
16b50 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41  t = (u8)desiredA
16b60 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20  utoCommit;.     
16b70 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
16b80 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
16b90 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
16ba0 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
16bb0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
16bc0 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69  it = (u8)(1-desi
16bd0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a  redAutoCommit);.
16be0 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
16bf0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
16c00 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76  ;.        goto v
16c10 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
16c20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
16c30 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
16c40 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73  ment==0 );.    s
16c50 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
16c60 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69  oints(db);.    i
16c70 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
16c80 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
16c90 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  = SQLITE_DONE;. 
16ca0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
16cb0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
16cc0 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  R;.    }.    got
16cd0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
16ce0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
16cf0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
16d00 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20  >zErrMsg, db,.  
16d10 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41        (!desiredA
16d20 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e  utoCommit)?"cann
16d30 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ot start a trans
16d40 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20  action within a 
16d50 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20  transaction":(. 
16d60 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63         (iRollbac
16d70 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  k)?"cannot rollb
16d80 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  ack - no transac
16d90 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a  tion is active":
16da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16db0 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d      "cannot comm
16dc0 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  it - no transact
16dd0 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29  ion is active"))
16de0 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20  ;.         .    
16df0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
16e00 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  R;.  }.  break;.
16e10 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72  }../* Opcode: Tr
16e20 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20  ansaction P1 P2 
16e30 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69  * * *.**.** Begi
16e40 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  n a transaction.
16e50 20 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f    The transactio
16e60 6e 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f  n ends when a Co
16e70 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b  mmit or Rollback
16e80 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e  .** opcode is en
16e90 63 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65  countered.  Depe
16ea0 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20  nding on the ON 
16eb0 43 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67  CONFLICT setting
16ec0 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63  , the.** transac
16ed0 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20  tion might also 
16ee0 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69  be rolled back i
16ef0 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e  f an error is en
16f00 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a  countered..**.**
16f10 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
16f20 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
16f30 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74   file on which t
16f40 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
16f50 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49  s.** started.  I
16f60 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61  ndex 0 is the ma
16f70 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
16f80 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20   and index 1 is 
16f90 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64  the.** file used
16fa0 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74   for temporary t
16fb0 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20  ables.  Indices 
16fc0 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65  of 2 or more are
16fd0 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74   used for.** att
16fe0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
16ff0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  .**.** If P2 is 
17000 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
17010 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
17020 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20  on is started.  
17030 41 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20  A RESERVED lock 
17040 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f  is.** obtained o
17050 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
17060 69 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74 65  ile when a write
17070 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
17080 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20  started.  No.** 
17090 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 63 61  other process ca
170a0 6e 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20  n start another 
170b0 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
170c0 6e 20 77 68 69 6c 65 20 74 68 69 73 20 74 72 61  n while this tra
170d0 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75  nsaction is.** u
170e0 6e 64 65 72 77 61 79 2e 20 20 53 74 61 72 74 69  nderway.  Starti
170f0 6e 67 20 61 20 77 72 69 74 65 20 74 72 61 6e 73  ng a write trans
17100 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61  action also crea
17110 74 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  tes a rollback j
17120 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69  ournal. A.** wri
17130 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  te transaction m
17140 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
17150 65 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65  efore any change
17160 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
17170 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
17180 2e 20 20 49 66 20 50 32 20 69 73 20 32 20 6f 72  .  If P2 is 2 or
17190 20 67 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e   greater then an
171a0 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20   EXCLUSIVE lock 
171b0 69 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64  is also obtained
171c0 0a 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e  .** on the file.
171d0 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74  .**.** If a writ
171e0 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
171f0 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65   started and the
17200 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f   Vdbe.usesStmtJo
17210 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a  urnal flag is.**
17220 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67   true (this flag
17230 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56   is set if the V
17240 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d  dbe may modify m
17250 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77  ore than one row
17260 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f   and may.** thro
17270 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
17280 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65  tion), a stateme
17290 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  nt transaction m
172a0 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65  ay also be opene
172b0 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69  d..** More speci
172c0 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65  fically, a state
172d0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
172e0 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74   is opened iff t
172f0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
17300 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
17310 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75  rently not in au
17320 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f  tocommit mode, o
17330 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f  r if there are o
17340 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73  ther.** active s
17350 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61  tatements. A sta
17360 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
17370 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68  on allows the ch
17380 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74 68  anges made by th
17390 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65  is.** VDBE to be
173a0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74   rolled back aft
173b0 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68  er an error with
173c0 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f  out having to ro
173d0 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65  ll back the.** e
173e0 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f  ntire transactio
173f0 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69  n. If no error i
17400 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74  s encountered, t
17410 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
17420 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c  nsaction.** will
17430 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
17440 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56  ommit when the V
17450 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a  DBE halts..**.**
17460 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20   If P2 is zero, 
17470 74 68 65 6e 20 61 20 72 65 61 64 2d 6c 6f 63 6b  then a read-lock
17480 20 69 73 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20   is obtained on 
17490 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
174a0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72  e..*/.case OP_Tr
174b0 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42  ansaction: {.  B
174c0 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
174d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
174e0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
174f0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
17500 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
17510 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
17520 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
17530 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
17540 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20  pOp->p1].pBt;.. 
17550 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20   if( pBt ){.    
17560 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
17570 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c  eBeginTrans(pBt,
17580 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69   pOp->p2);.    i
17590 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
175a0 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70  SY ){.      p->p
175b0 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d  c = pc;.      p-
175c0 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
175d0 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f  E_BUSY;.      go
175e0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
175f0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63      }.    if( rc
17600 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
17610 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
17620 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
17630 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70    }..    if( pOp
17640 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53  ->p2 && p->usesS
17650 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20  tmtJournal .    
17660 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d   && (db->autoCom
17670 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 63  mit==0 || db->ac
17680 74 69 76 65 56 64 62 65 43 6e 74 3e 31 29 20 0a  tiveVdbeCnt>1) .
17690 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73      ){.      ass
176a0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
176b0 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20  eIsInTrans(pBt) 
176c0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
176d0 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b  iStatement==0 ){
176e0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
176f0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e   db->nStatement>
17700 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70  =0 && db->nSavep
17710 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20  oint>=0 );.     
17720 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e     db->nStatemen
17730 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d  t++; .        p-
17740 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62  >iStatement = db
17750 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
17760 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20  b->nStatement;. 
17770 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63       }..      rc
17780 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
17790 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45  vepoint(db, SAVE
177a0 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e  POINT_BEGIN, p->
177b0 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20  iStatement-1);. 
177c0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
177d0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
177e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
177f0 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74  reeBeginStmt(pBt
17800 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29  , p->iStatement)
17810 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
17820 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75   /* Store the cu
17830 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74  rrent value of t
17840 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
17850 6c 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  les deferred con
17860 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a  straint.      **
17870 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65   counter. If the
17880 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
17890 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  action needs to 
178a0 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a  be rolled back,.
178b0 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c        ** the val
178c0 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74  ue of this count
178d0 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  er needs to be r
178e0 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f  estored too.  */
178f0 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44  .      p->nStmtD
17900 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  efCons = db->nDe
17910 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
17920 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
17930 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
17940 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  dCookie P1 P2 P3
17950 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
17960 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33  cookie number P3
17970 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50   from database P
17980 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69  1 and write it i
17990 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
179a0 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65  .** P3==1 is the
179b0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
179c0 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64    P3==2 is the d
179d0 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
179e0 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20  ** P3==3 is the 
179f0 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
17a00 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
17a10 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
17a20 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
17a30 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
17a40 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
17a50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
17a60 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
17a70 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
17a80 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75  ..**.** There mu
17a90 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63  st be a read-loc
17aa0 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
17ab0 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e  e (either a tran
17ac0 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20  saction.** must 
17ad0 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68  be started or th
17ae0 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f  ere must be an o
17af0 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f  pen cursor) befo
17b00 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20  re.** executing 
17b10 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17b20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
17b30 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  dCookie: {      
17b40 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
17b50 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
17b60 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
17b70 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f  t iDb;.  int iCo
17b80 6f 6b 69 65 3b 0a 0a 20 20 69 44 62 20 3d 20 70  okie;..  iDb = p
17b90 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69  Op->p1;.  iCooki
17ba0 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  e = pOp->p3;.  a
17bb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53  ssert( pOp->p3<S
17bc0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
17bd0 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
17be0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
17bf0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
17c00 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  t( db->aDb[iDb].
17c10 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
17c20 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
17c30 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
17c40 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 0a  )<<iDb))!=0 );..
17c50 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
17c60 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44  tMeta(db->aDb[iD
17c70 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c  b].pBt, iCookie,
17c80 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
17c90 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
17ca0 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Meta;.  break;.}
17cb0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74  ../* Opcode: Set
17cc0 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
17cd0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
17ce0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
17cf0 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74 65  egister P3 (inte
17d00 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e  rpreted as an in
17d10 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63  teger).** into c
17d20 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20  ookie number P2 
17d30 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  of database P1. 
17d40 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P2==1 is the sc
17d50 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a  hema version.  .
17d60 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20  ** P2==2 is the 
17d70 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
17d80 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P2==3 is the re
17d90 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
17da0 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20  cache .** size, 
17db0 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
17dc0 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e  1==0 is the main
17dd0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
17de0 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
17df0 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
17e00 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
17e10 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
17e20 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61  ..**.** A transa
17e30 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74  ction must be st
17e40 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65  arted before exe
17e50 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  cuting this opco
17e60 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  de..*/.case OP_S
17e70 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  etCookie: {     
17e80 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62    /* in3 */.  Db
17e90 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28   *pDb;.  assert(
17ea0 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f   pOp->p2<SQLITE_
17eb0 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
17ec0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
17ed0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
17ee0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
17ef0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
17f00 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
17f10 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  1)<<pOp->p1))!=0
17f20 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
17f30 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
17f40 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
17f50 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
17f60 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
17f70 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70  utexHeld(db, pOp
17f80 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70 49  ->p1, 0) );.  pI
17f90 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
17fa0 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p3];.  sqlite3Vd
17fb0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
17fc0 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20  pIn3);.  /* See 
17fd0 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78  note about index
17fe0 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f   shifting on OP_
17ff0 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20  ReadCookie */.  
18000 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18010 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d  eUpdateMeta(pDb-
18020 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28  >pBt, pOp->p2, (
18030 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  int)pIn3->u.i);.
18040 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42    if( pOp->p2==B
18050 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53  TREE_SCHEMA_VERS
18060 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68  ION ){.    /* Wh
18070 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  en the schema co
18080 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65  okie changes, re
18090 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f  cord the new coo
180a0 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a  kie internally *
180b0 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
180c0 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
180d0 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75  e = (int)pIn3->u
180e0 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  .i;.    db->flag
180f0 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65  s |= SQLITE_Inte
18100 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c  rnChanges;.  }el
18110 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  se if( pOp->p2==
18120 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41  BTREE_FILE_FORMA
18130 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f  T ){.    /* Reco
18140 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  rd changes in th
18150 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f  e file format */
18160 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
18170 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  a->file_format =
18180 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a   (u8)pIn3->u.i;.
18190 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
181a0 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49  1==1 ){.    /* I
181b0 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72  nvalidate all pr
181c0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
181d0 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 54  s whenever the T
181e0 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 20  EMP database.   
181f0 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68   ** schema is ch
18200 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23  anged.  Ticket #
18210 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69  1644 */.    sqli
18220 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
18230 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
18240 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
18250 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 0;.  }.  break
18260 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
18270 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31 20  VerifyCookie P1 
18280 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
18290 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20  Check the value 
182a0 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74 61 62 61  of global databa
182b0 73 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d  se parameter num
182c0 62 65 72 20 30 20 28 74 68 65 0a 2a 2a 20 73 63  ber 0 (the.** sc
182d0 68 65 6d 61 20 76 65 72 73 69 6f 6e 29 20 61 6e  hema version) an
182e0 64 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69  d make sure it i
182f0 73 20 65 71 75 61 6c 20 74 6f 20 50 32 20 61 6e  s equal to P2 an
18300 64 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 67 65  d that the.** ge
18310 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
18320 20 6f 6e 20 74 68 65 20 6c 6f 63 61 6c 20 73 63   on the local sc
18330 68 65 6d 61 20 70 61 72 73 65 20 65 71 75 61 6c  hema parse equal
18340 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  s P3..**.** P1 i
18350 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e  s the database n
18360 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 30  umber which is 0
18370 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
18380 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61  tabase file.** a
18390 6e 64 20 31 20 66 6f 72 20 74 68 65 20 66 69 6c  nd 1 for the fil
183a0 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72  e holding tempor
183b0 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 73  ary tables and s
183c0 6f 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62 65  ome higher numbe
183d0 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69 61  r.** for auxilia
183e0 72 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a  ry databases..**
183f0 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63  .** The cookie c
18400 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65  hanges its value
18410 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   whenever the da
18420 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
18430 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f  anges..** This o
18440 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64  peration is used
18450 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20   to detect when 
18460 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20  that the cookie 
18470 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61  has changed.** a
18480 6e 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72  nd that the curr
18490 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64  ent process need
184a0 73 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20  s to reread the 
184b0 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69  schema..**.** Ei
184c0 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69  ther a transacti
184d0 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76 65  on needs to have
184e0 20 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f 72   been started or
184f0 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64   an OP_Open need
18500 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63 75  s.** to be execu
18510 74 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69 73  ted (to establis
18520 68 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20 62  h a read lock) b
18530 65 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f 64  efore this opcod
18540 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e  e is.** invoked.
18550 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72 69  .*/.case OP_Veri
18560 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e  fyCookie: {.  in
18570 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69  t iMeta;.  int i
18580 47 65 6e 3b 0a 20 20 42 74 72 65 65 20 2a 70 42  Gen;.  Btree *pB
18590 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t;..  assert( pO
185a0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
185b0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
185c0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
185d0 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
185e0 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29  ask)1)<<pOp->p1)
185f0 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
18600 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
18610 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70  utexHeld(db, pOp
18620 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70 42  ->p1, 0) );.  pB
18630 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
18640 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20  >p1].pBt;.  if( 
18650 70 42 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  pBt ){.    sqlit
18660 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70  e3BtreeGetMeta(p
18670 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41  Bt, BTREE_SCHEMA
18680 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a  _VERSION, (u32 *
18690 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47  )&iMeta);.    iG
186a0 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  en = db->aDb[pOp
186b0 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69  ->p1].pSchema->i
186c0 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65  Generation;.  }e
186d0 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20  lse{.    iGen = 
186e0 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20  iMeta = 0;.  }. 
186f0 20 69 66 28 20 69 4d 65 74 61 21 3d 70 4f 70 2d   if( iMeta!=pOp-
18700 3e 70 32 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70  >p2 || iGen!=pOp
18710 2d 3e 70 33 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p3 ){.    sqli
18720 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
18730 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
18740 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
18750 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
18760 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
18770 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
18780 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
18790 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
187a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
187b0 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
187c0 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
187d0 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
187e0 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
187f0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
18800 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
18810 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
18820 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
18830 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
18840 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
18850 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
18860 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
18870 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
18880 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
18890 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
188a0 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
188b0 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
188c0 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
188d0 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
188e0 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
188f0 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
18900 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
18910 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
18920 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
18930 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
18940 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
18950 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
18960 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
18970 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
18980 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
18990 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
189a0 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
189b0 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
189c0 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
189d0 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
189e0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
189f0 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
18a00 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
18a10 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
18a20 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
18a30 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
18a40 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
18a50 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
18a60 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
18a70 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
18a80 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
18a90 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
18aa0 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
18ab0 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70  alSchema(db, pOp
18ac0 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ->p1);.    }..  
18ad0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
18ae0 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
18af0 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20  E_SCHEMA;.  }.  
18b00 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18b10 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31  ode: OpenRead P1
18b20 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
18b30 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f  ** Open a read-o
18b40 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74  nly cursor for t
18b50 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
18b60 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  e whose root pag
18b70 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20  e is.** P2 in a 
18b80 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
18b90 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  The database fil
18ba0 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
18bb0 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30  by P3. .** P3==0
18bc0 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20   means the main 
18bd0 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20  database, P3==1 
18be0 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
18bf0 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20  se used for .** 
18c00 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
18c10 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73  , and P3>1 means
18c20 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73   used the corres
18c30 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64  ponding attached
18c40 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47  .** database.  G
18c50 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73  ive the new curs
18c60 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  or an identifier
18c70 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a   of P1.  The P1.
18c80 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e  ** values need n
18c90 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73  ot be contiguous
18ca0 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75   but all P1 valu
18cb0 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61  es should be sma
18cc0 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20  ll integers..** 
18cd0 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
18ce0 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61  or P1 to be nega
18cf0 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tive..**.** If P
18d00 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68  5!=0 then use th
18d10 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
18d20 69 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20  ister P2 as the 
18d30 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a  root page, not.*
18d40 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  * the value of P
18d50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20  2 itself..**.** 
18d60 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20  There will be a 
18d70 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65  read lock on the
18d80 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76   database whenev
18d90 65 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a  er there is an.*
18da0 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20  * open cursor.  
18db0 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
18dc0 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69  was unlocked pri
18dd0 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72  or to this instr
18de0 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61  uction.** then a
18df0 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63   read lock is ac
18e00 71 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f  quired as part o
18e10 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
18e20 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c  on.  A read.** l
18e30 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72  ock allows other
18e40 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65   processes to re
18e50 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ad the database 
18e60 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a  but prohibits.**
18e70 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65   any other proce
18e80 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e  ss from modifyin
18e90 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  g the database. 
18ea0 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69   The read lock i
18eb0 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68  s.** released wh
18ec0 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61  en all cursors a
18ed0 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74  re closed.  If t
18ee0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
18ef0 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67  attempts.** to g
18f00 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62  et a read lock b
18f10 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63  ut fails, the sc
18f20 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20  ript terminates 
18f30 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54  with an.** SQLIT
18f40 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64  E_BUSY error cod
18f50 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  e..**.** The P4 
18f60 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74  value may be eit
18f70 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28  her an integer (
18f80 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70  P4_INT32) or a p
18f90 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b  ointer to.** a K
18fa0 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
18fb0 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49   (P4_KEYINFO). I
18fc0 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  f it is a pointe
18fd0 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a  r to a KeyInfo .
18fe0 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68  ** structure, th
18ff0 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72  en said structur
19000 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f  e defines the co
19010 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74  ntent and collat
19020 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ing .** sequence
19030 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65   of the index be
19040 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65  ing opened. Othe
19050 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20  rwise, if P4 is 
19060 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76  an integer .** v
19070 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20  alue, it is set 
19080 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
19090 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
190a0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  table..**.** See
190b0 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e   also OpenWrite.
190c0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
190d0 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50  penWrite P1 P2 P
190e0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70  3 P4 P5.**.** Op
190f0 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20  en a read/write 
19100 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20  cursor named P1 
19110 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  on the table or 
19120 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
19130 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20  .** page is P2. 
19140 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65   Or if P5!=0 use
19150 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
19160 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66  register P2 to f
19170 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20  ind the.** root 
19180 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  page..**.** The 
19190 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
191a0 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
191b0 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
191c0 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
191d0 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
191e0 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
191f0 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
19200 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
19210 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
19220 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
19230 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
19240 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
19250 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
19260 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
19270 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
19280 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
19290 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
192a0 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
192b0 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
192c0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
192d0 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20  he table, or to 
192e0 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69  the.** largest i
192f0 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75  ndex of any colu
19300 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  mn of the table 
19310 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79  that is actually
19320 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   used..**.** Thi
19330 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f  s instruction wo
19340 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70  rks just like Op
19350 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68  enRead except th
19360 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20  at it opens the 
19370 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61  cursor.** in rea
19380 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46  d/write mode.  F
19390 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65  or a given table
193a0 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f  , there can be o
193b0 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d  ne or more read-
193c0 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20  only.** cursors 
193d0 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64  or a single read
193e0 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75  /write cursor bu
193f0 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a  t not both..**.*
19400 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52  * See also OpenR
19410 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ead..*/.case OP_
19420 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f  OpenRead:.case O
19430 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20  P_OpenWrite: {. 
19440 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b   int nField;.  K
19450 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
19460 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e  ;.  int p2;.  in
19470 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46  t iDb;.  int wrF
19480 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58  lag;.  Btree *pX
19490 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
194a0 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b  pCur;.  Db *pDb;
194b0 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72  ..  if( p->expir
194c0 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  ed ){.    rc = S
194d0 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20  QLITE_ABORT;.   
194e0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e   break;.  }..  n
194f0 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65  Field = 0;.  pKe
19500 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20  yInfo = 0;.  p2 
19510 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62  = pOp->p2;.  iDb
19520 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
19530 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
19540 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
19550 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
19560 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
19570 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30  ask)1)<<iDb))!=0
19580 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
19590 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20  >aDb[iDb];.  pX 
195a0 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73  = pDb->pBt;.  as
195b0 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20  sert( pX!=0 );. 
195c0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
195d0 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29  ==OP_OpenWrite )
195e0 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 31  {.    wrFlag = 1
195f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  ;.    assert( sq
19600 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
19610 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
19620 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d   );.    if( pDb-
19630 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
19640 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72  ormat < p->minWr
19650 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b  iteFileFormat ){
19660 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69  .      p->minWri
19670 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70  teFileFormat = p
19680 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
19690 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a  e_format;.    }.
196a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46    }else{.    wrF
196b0 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  lag = 0;.  }.  i
196c0 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
196d0 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 29    assert( p2>0 )
196e0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
196f0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
19700 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32   pIn2 = &aMem[p2
19710 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ];.    assert( m
19720 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20  emIsValid(pIn2) 
19730 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
19740 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
19750 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20  M_Int)!=0 );.   
19760 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
19770 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
19780 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70  .    p2 = (int)p
19790 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a  In2->u.i;.    /*
197a0 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c   The p2 value al
197b0 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20  ways comes from 
197c0 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74  a prior OP_Creat
197d0 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e  eTable opcode an
197e0 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70  d.    ** that op
197f0 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
19800 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75   set the p2 valu
19810 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f  e to 2 or more o
19820 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20  r else fail..   
19830 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72   ** If there wer
19840 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65  e a failure, the
19850 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
19860 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68  ent would have h
19870 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66  alted.    ** bef
19880 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69  ore reaching thi
19890 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a  s instruction. *
198a0 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52 28  /.    if( NEVER(
198b0 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20  p2<2) ) {.      
198c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
198d0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
198e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
198f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
19900 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34   }.  if( pOp->p4
19910 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
19920 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f   ){.    pKeyInfo
19930 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
19940 6e 66 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66  nfo;.    pKeyInf
19950 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e  o->enc = ENC(p->
19960 64 62 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20  db);.    nField 
19970 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  = pKeyInfo->nFie
19980 6c 64 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ld+1;.  }else if
19990 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
199a0 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e  4_INT32 ){.    n
199b0 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e  Field = pOp->p4.
199c0 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  i;.  }.  assert(
199d0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
199e0 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
199f0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
19a00 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20  1, nField, iDb, 
19a10 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d  1);.  if( pCur==
19a20 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
19a30 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
19a40 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73   = 1;.  pCur->is
19a50 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 72  Ordered = 1;.  r
19a60 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
19a70 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77  Cursor(pX, p2, w
19a80 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c  rFlag, pKeyInfo,
19a90 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b   pCur->pCursor);
19aa0 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66  .  pCur->pKeyInf
19ab0 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20  o = pKeyInfo;.. 
19ac0 20 2f 2a 20 53 69 6e 63 65 20 69 74 20 70 65 72   /* Since it per
19ad0 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20  forms no memory 
19ae0 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f  allocation or IO
19af0 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65  , the only value
19b00 20 74 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74   that.  ** sqlit
19b10 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20  e3BtreeCursor() 
19b20 6d 61 79 20 72 65 74 75 72 6e 20 69 73 20 53 51  may return is SQ
19b30 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61 73  LITE_OK. */.  as
19b40 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
19b50 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 53 65 74  _OK );..  /* Set
19b60 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
19b70 69 73 54 61 62 6c 65 20 61 6e 64 20 69 73 49 6e  isTable and isIn
19b80 64 65 78 20 76 61 72 69 61 62 6c 65 73 2e 20 50  dex variables. P
19b90 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
19ba0 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20   of.  ** SQLite 
19bb0 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66  used to check if
19bc0 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66   the root-page f
19bd0 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61  lags were sane a
19be0 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a  t this point.  *
19bf0 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74  * and report dat
19c00 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
19c10 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f   if they were no
19c20 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63  t, but this chec
19c30 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65  k has.  ** since
19c40 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
19c50 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f  btree layer.  */
19c60 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62    .  pCur->isTab
19c70 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65  le = pOp->p4type
19c80 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20  !=P4_KEYINFO;.  
19c90 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20  pCur->isIndex = 
19ca0 21 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 3b 0a  !pCur->isTable;.
19cb0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19cc0 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d  pcode: OpenEphem
19cd0 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  eral P1 P2 * P4 
19ce0 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P5.**.** Open a 
19cf0 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f  new cursor P1 to
19d00 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
19d10 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
19d20 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e  r is always open
19d30 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76  ed read/write ev
19d40 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61  en if .** the ma
19d50 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72  in database is r
19d60 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65  ead-only.  The e
19d70 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c  phemeral.** tabl
19d80 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
19d90 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
19da0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
19db0 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  osed..**.** P2 i
19dc0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
19dd0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65  columns in the e
19de0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a  phemeral table..
19df0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f  ** The cursor po
19e00 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20  ints to a BTree 
19e10 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61  table if P4==0 a
19e20 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e  nd to a BTree in
19e30 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20  dex.** if P4 is 
19e40 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73  not 0.  If P4 is
19e50 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f   not NULL, it po
19e60 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66  ints to a KeyInf
19e70 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74  o structure.** t
19e80 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
19e90 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69  format of keys i
19ea0 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a  n the index..**.
19eb0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
19ec0 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f  as once called O
19ed0 70 65 6e 54 65 6d 70 2e 20 20 42 75 74 20 74 68  penTemp.  But th
19ee0 61 74 20 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f  at created.** co
19ef0 6e 66 75 73 69 6f 6e 20 62 65 63 61 75 73 65 20  nfusion because 
19f00 74 68 65 20 74 65 72 6d 20 22 74 65 6d 70 20 74  the term "temp t
19f10 61 62 6c 65 22 2c 20 6d 69 67 68 74 20 72 65 66  able", might ref
19f20 65 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20  er either.** to 
19f30 61 20 54 45 4d 50 20 74 61 62 6c 65 20 61 74 20  a TEMP table at 
19f40 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f  the SQL level, o
19f50 72 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 70 65  r to a table ope
19f60 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f  ned by.** this o
19f70 70 63 6f 64 65 2e 20 20 54 68 65 6e 20 74 68 69  pcode.  Then thi
19f80 73 20 6f 70 63 6f 64 65 20 77 61 73 20 63 61 6c  s opcode was cal
19f90 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20 20  l OpenVirtual.  
19fa0 42 75 74 0a 2a 2a 20 74 68 61 74 20 63 72 65 61  But.** that crea
19fb0 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69  ted confusion wi
19fc0 74 68 20 74 68 65 20 77 68 6f 6c 65 20 76 69 72  th the whole vir
19fd0 74 75 61 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e  tual-table idea.
19fe0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  .**.** The P5 pa
19ff0 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61  rameter can be a
1a000 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52   mask of the BTR
1a010 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  EE_* flags defin
1a020 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68  ed.** in btree.h
1a030 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63  .  These flags c
1a040 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f  ontrol aspects o
1a050 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  f the operation 
1a060 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e  of.** the btree.
1a070 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54    The BTREE_OMIT
1a080 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52  _JOURNAL and BTR
1a090 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20  EE_SINGLE flags 
1a0a0 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74  are.** added aut
1a0b0 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f  omatically..*/./
1a0c0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75  * Opcode: OpenAu
1a0d0 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20  toindex P1 P2 * 
1a0e0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4 *.**.** This 
1a0f0 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65  opcode works the
1a100 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e   same as OP_Open
1a110 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68  Ephemeral.  It h
1a120 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e  as a.** differen
1a130 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e  t name to distin
1a140 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20 20  guish its use.  
1a150 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75  Tables created u
1a160 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20  sing.** by this 
1a170 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1a180 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69  sed for automati
1a190 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72  cally created tr
1a1a0 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63  ansient.** indic
1a1b0 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a  es in joins..*/.
1a1c0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f  case OP_OpenAuto
1a1d0 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f  index: .case OP_
1a1e0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b  OpenEphemeral: {
1a1f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1a200 43 78 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  Cx;.  static con
1a210 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20  st int vfsFlags 
1a220 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  = .      SQLITE_
1a230 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c  OPEN_READWRITE |
1a240 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1a250 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20  EN_CREATE |.    
1a260 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58    SQLITE_OPEN_EX
1a270 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20  CLUSIVE |.      
1a280 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45  SQLITE_OPEN_DELE
1a290 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20  TEONCLOSE |.    
1a2a0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52    SQLITE_OPEN_TR
1a2b0 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61  ANSIENT_DB;..  a
1a2c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1a2d0 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1a2e0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1a2f0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1a300 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70   -1, 1);.  if( p
1a310 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1a320 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1a330 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  Row = 1;.  rc = 
1a340 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e  sqlite3BtreeOpen
1a350 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62  (db->pVfs, 0, db
1a360 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20  , &pCx->pBt, .  
1a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a380 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54        BTREE_OMIT
1a390 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45  _JOURNAL | BTREE
1a3a0 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70  _SINGLE | pOp->p
1a3b0 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20  5, vfsFlags);.  
1a3c0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1a3d0 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
1a3e0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
1a3f0 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31  rans(pCx->pBt, 1
1a400 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
1a410 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1a420 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
1a430 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
1a440 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
1a450 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
1a460 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
1a470 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74  reateTable() wit
1a480 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42  h the BTREE_BLOB
1a490 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a  KEY flag before.
1a4a0 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69      ** opening i
1a4b0 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  t. If a transien
1a4c0 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69  t table is requi
1a4d0 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68  red, just use th
1a4e0 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74  e.    ** automat
1a4f0 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1a500 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70  able with root-p
1a510 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49  age 1 (an BLOB_I
1a520 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20  NTKEY table)..  
1a530 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70    */.    if( pOp
1a540 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b  ->p4.pKeyInfo ){
1a550 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b  .      int pgno;
1a560 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1a570 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1a580 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20  EYINFO );.      
1a590 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1a5a0 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78  eCreateTable(pCx
1a5b0 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54  ->pBt, &pgno, BT
1a5c0 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f  REE_BLOBKEY | pO
1a5d0 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69  p->p5); .      i
1a5e0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1a5f0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1a600 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52  rt( pgno==MASTER
1a610 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20  _ROOT+1 );.     
1a620 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1a630 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1a640 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20  pBt, pgno, 1, . 
1a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1a670 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34  KeyInfo*)pOp->p4
1a680 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72  .z, pCx->pCursor
1a690 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e  );.        pCx->
1a6a0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1a6b0 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
1a6c0 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e       pCx->pKeyIn
1a6d0 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d  fo->enc = ENC(p-
1a6e0 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  >db);.      }.  
1a6f0 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1a700 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1a710 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1a720 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1a730 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f  Cx->pBt, MASTER_
1a740 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d  ROOT, 1, 0, pCx-
1a750 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1a760 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1a770 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  1;.    }.  }.  p
1a780 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  Cx->isOrdered = 
1a790 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f  (pOp->p5!=BTREE_
1a7a0 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 70 43  UNORDERED);.  pC
1a7b0 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43  x->isIndex = !pC
1a7c0 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72  x->isTable;.  br
1a7d0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1a7e0 65 3a 20 4f 70 65 6e 53 6f 72 74 65 72 20 50 31  e: OpenSorter P1
1a7f0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
1a800 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
1a810 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45  ks like OP_OpenE
1a820 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20  phemeral except 
1a830 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a  that it opens.**
1a840 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1a850 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69  ex that is speci
1a860 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64  fically designed
1a870 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a   to sort large.*
1a880 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61  * tables using a
1a890 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65  n external merge
1a8a0 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e  -sort algorithm.
1a8b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
1a8c0 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  erOpen: {.  Vdbe
1a8d0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 23 69 66  Cursor *pCx;.#if
1a8e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1a8f0 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 20 20 70 43  _MERGE_SORT.  pC
1a900 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1a910 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1a920 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
1a930 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1a940 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1a950 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
1a960 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
1a970 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d    pCx->pKeyInfo-
1a980 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62  >enc = ENC(p->db
1a990 29 3b 0a 20 20 70 43 78 2d 3e 69 73 53 6f 72 74  );.  pCx->isSort
1a9a0 65 72 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  er = 1;.  rc = s
1a9b0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
1a9c0 49 6e 69 74 28 64 62 2c 20 70 43 78 29 3b 0a 23  Init(db, pCx);.#
1a9d0 65 6c 73 65 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  else.  pOp->opco
1a9e0 64 65 20 3d 20 4f 50 5f 4f 70 65 6e 45 70 68 65  de = OP_OpenEphe
1a9f0 6d 65 72 61 6c 3b 0a 20 20 70 63 2d 2d 3b 0a 23  meral;.  pc--;.#
1aa00 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d  endif.  break;.}
1aa10 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1aa20 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33  nPseudo P1 P2 P3
1aa30 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20   * *.**.** Open 
1aa40 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
1aa50 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
1aa60 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
1aa70 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
1aa80 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
1aa90 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
1aaa0 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 6e 20  that one row in 
1aab0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d  the content of m
1aac0 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65  emory.** registe
1aad0 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20  r P2.  In other 
1aae0 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31  words, cursor P1
1aaf0 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61   becomes an alia
1ab00 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45  s for the .** ME
1ab10 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63  M_Blob content c
1ab20 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69  ontained in regi
1ab30 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41  ster P2..**.** A
1ab40 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72   pseudo-table cr
1ab50 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70  eated by this op
1ab60 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
1ab70 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  hold a single.**
1ab80 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
1ab90 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
1aba0 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
1abb0 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
1abc0 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
1abd0 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
1abe0 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1abf0 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  ode.  The OP_Col
1ac00 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  umn opcode.** is
1ac10 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72   the only cursor
1ac20 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72   opcode that wor
1ac30 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f  ks with a pseudo
1ac40 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33  -table..**.** P3
1ac50 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1ac60 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1ac70 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
1ac80 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
1ac90 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
1aca0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
1acb0 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56  penPseudo: {.  V
1acc0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1acd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1ace0 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p1>=0 );.  pCx =
1acf0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1ad00 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1ad10 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69  >p3, -1, 0);.  i
1ad20 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1ad30 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1ad40 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1ad50 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  Cx->pseudoTableR
1ad60 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  eg = pOp->p2;.  
1ad70 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
1ad80 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78  ;.  pCx->isIndex
1ad90 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
1ada0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f  ../* Opcode: Clo
1adb0 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  se P1 * * * *.**
1adc0 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73  .** Close a curs
1add0 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  or previously op
1ade0 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20  ened as P1.  If 
1adf0 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72  P1 is not.** cur
1ae00 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69  rently open, thi
1ae10 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
1ae20 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
1ae30 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20  e OP_Close: {.  
1ae40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1ae50 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1ae60 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71  >nCursor );.  sq
1ae70 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72  lite3VdbeFreeCur
1ae80 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b  sor(p, p->apCsr[
1ae90 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e  pOp->p1]);.  p->
1aea0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d  apCsr[pOp->p1] =
1aeb0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
1aec0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1aed0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
1aee0 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1aef0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1af00 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1af10 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1af20 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1af30 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1af40 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74  register P3 as t
1af50 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73  he key.  If curs
1af60 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1af70 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1af80 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1af90 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1afa0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1afb0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1afc0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1afd0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1afe0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1aff0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1b000 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1b010 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1b020 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1b030 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
1b040 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1b050 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1b060 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1b070 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e  .** greater than
1b080 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1b090 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1b0a0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1b0b0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1b0c0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1b0d0 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69   NotFound, Disti
1b0e0 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65  nct, SeekLt, See
1b0f0 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGt, SeekLe.*/./
1b100 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 74  * Opcode: SeekGt
1b110 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1b120 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1b130 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1b140 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1b150 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1b160 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1b170 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1b180 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1b190 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1b1a0 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1b1b0 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1b1c0 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1b1d0 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1b1e0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1b1f0 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1b200 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1b210 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1b220 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1b230 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
1b240 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1b250 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
1b260 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
1b270 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
1b280 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1b290 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1b2a0 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a  greater than .**
1b2b0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1b2c0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1b2d0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1b2e0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1b2f0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
1b300 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c  istinct, SeekLt,
1b310 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1b320 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1b330 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  ekLt P1 P2 P3 P4
1b340 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72   * .**.** If cur
1b350 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1b360 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1b370 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1b380 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1b390 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1b3a0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1b3b0 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1b3c0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1b3d0 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1b3e0 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1b3f0 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1b400 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1b410 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1b420 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1b430 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1b440 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1b450 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1b460 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1b470 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1b480 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1b490 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
1b4a0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1b4b0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1b4c0 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74   less than .** t
1b4d0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1b4e0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1b4f0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1b500 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1b510 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
1b520 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53  tinct, SeekGt, S
1b530 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
1b540 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1b550 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Le P1 P2 P3 P4 *
1b560 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1b570 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1b580 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1b590 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1b5a0 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1b5b0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1b5c0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1b5d0 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1b5e0 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1b5f0 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1b600 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1b610 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1b620 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1b630 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1b640 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1b650 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1b660 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1b670 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1b680 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1b690 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
1b6a0 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
1b6b0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1b6c0 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1b6d0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1b6e0 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73   records .** les
1b6f0 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1b700 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1b710 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1b720 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1b730 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1b740 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1b750 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47   Distinct, SeekG
1b760 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1b770 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  t.*/.case OP_See
1b780 6b 4c 74 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLt:         /* 
1b790 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1b7a0 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20  e OP_SeekLe:    
1b7b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1b7c0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1b7d0 6b 47 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kGe:         /* 
1b7e0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1b7f0 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20  e OP_SeekGt: {  
1b800 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1b810 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a  3 */.  int res;.
1b820 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65    int oc;.  Vdbe
1b830 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e  Cursor *pC;.  Un
1b840 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
1b850 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1b860 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f  i64 iKey;      /
1b870 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61  * The rowid we a
1b880 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f  re to seek to */
1b890 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1b8a0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1b8b0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1b8c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b8d0 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70  2!=0 );.  pC = p
1b8e0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1b8f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1b900 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1b910 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
1b920 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
1b930 28 20 4f 50 5f 53 65 65 6b 4c 65 20 3d 3d 20 4f  ( OP_SeekLe == O
1b940 50 5f 53 65 65 6b 4c 74 2b 31 20 29 3b 0a 20 20  P_SeekLt+1 );.  
1b950 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1b960 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 32  e == OP_SeekLt+2
1b970 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1b980 5f 53 65 65 6b 47 74 20 3d 3d 20 4f 50 5f 53 65  _SeekGt == OP_Se
1b990 65 6b 4c 74 2b 33 20 29 3b 0a 20 20 61 73 73 65  ekLt+3 );.  asse
1b9a0 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
1b9b0 64 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  d );.  if( ALWAY
1b9c0 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  S(pC->pCursor!=0
1b9d0 29 20 29 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f  ) ){.    oc = pO
1b9e0 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70  p->opcode;.    p
1b9f0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1ba00 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61      if( pC->isTa
1ba10 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ble ){.      /* 
1ba20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20  The input value 
1ba30 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f  in P3 might be o
1ba40 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65  f any type: inte
1ba50 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e  ger, real, strin
1ba60 67 2c 0a 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62  g,.      ** blob
1ba70 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20  , or NULL.  But 
1ba80 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61  it needs to be a
1ba90 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65  n integer before
1baa0 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 20   we can do.     
1bab0 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f   ** the seek, so
1bac0 20 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20   covert it. */. 
1bad0 20 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65       pIn3 = &aMe
1bae0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
1baf0 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
1bb00 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20  finity(pIn3);.  
1bb10 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74      iKey = sqlit
1bb20 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
1bb30 49 6e 33 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  In3);.      pC->
1bb40 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1bb50 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ;..      /* If t
1bb60 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c  he P3 value coul
1bb70 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  d not be convert
1bb80 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
1bb90 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 20  er without.     
1bba0 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f   ** loss of info
1bbb0 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70  rmation, then sp
1bbc0 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67  ecial processing
1bbd0 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20   is required... 
1bbe0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  */.      if( (pI
1bbf0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1bc00 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
1bc10 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1bc20 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
1bc30 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
1bc40 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1bc50 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  ue cannot be con
1bc60 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20  verted into any 
1bc70 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72  kind of a number
1bc80 2c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74  ,.          ** t
1bc90 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20  hen the seek is 
1bca0 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f  not possible, so
1bcb0 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
1bcc0 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f           pc = pO
1bcd0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
1bce0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1bcf0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a      }.        /*
1bd00 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69   If we reach thi
1bd10 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68  s point, then th
1bd20 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20  e P3 value must 
1bd30 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20  be a floating.  
1bd40 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e        ** point n
1bd50 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  umber. */.      
1bd60 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d    assert( (pIn3-
1bd70 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
1bd80 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20  l)!=0 );..      
1bd90 20 20 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c    if( iKey==SMAL
1bda0 4c 45 53 54 5f 49 4e 54 36 34 20 26 26 20 28 70  LEST_INT64 && (p
1bdb0 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69  In3->r<(double)i
1bdc0 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30  Key || pIn3->r>0
1bdd0 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  ) ){.          /
1bde0 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69  * The P3 value i
1bdf0 73 20 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d  s too large in m
1be00 61 67 6e 69 74 75 64 65 20 74 6f 20 62 65 20 65  agnitude to be e
1be10 78 70 72 65 73 73 65 64 20 61 73 20 61 6e 0a 20  xpressed as an. 
1be20 20 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65           ** inte
1be30 67 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ger. */.        
1be40 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20    res = 1;.     
1be50 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72       if( pIn3->r
1be60 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
1be70 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65    if( oc>=OP_See
1be80 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74 28 20  kGe ){  assert( 
1be90 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c  oc==OP_SeekGe ||
1bea0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29   oc==OP_SeekGt )
1beb0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1bec0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1bed0 65 46 69 72 73 74 28 70 43 2d 3e 70 43 75 72 73  eFirst(pC->pCurs
1bee0 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
1bef0 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
1bf00 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1bf10 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1bf20 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
1bf30 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 65    }.          }e
1bf40 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
1bf50 20 69 66 28 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b   if( oc<=OP_Seek
1bf60 4c 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f  Le ){  assert( o
1bf70 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20  c==OP_SeekLt || 
1bf80 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b  oc==OP_SeekLe );
1bf90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
1bfa0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1bfb0 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Last(pC->pCursor
1bfc0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1bfd0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1bfe0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1bff0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1c000 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  or;.            
1c010 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  }.          }.  
1c020 20 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20          if( res 
1c030 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
1c040 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1c050 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
1c060 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1c070 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
1c080 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c  oc==OP_SeekLt ||
1c090 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29   oc==OP_SeekGe )
1c0a0 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55  {.          /* U
1c0b0 73 65 20 74 68 65 20 63 65 69 6c 69 6e 67 28 29  se the ceiling()
1c0c0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e   function to con
1c0d0 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a  vert real->int *
1c0e0 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  /.          if( 
1c0f0 70 49 6e 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c  pIn3->r > (doubl
1c100 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b  e)iKey ) iKey++;
1c110 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1c120 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
1c130 20 74 68 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e   the floor() fun
1c140 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74  ction to convert
1c150 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20   real->int */.  
1c160 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1c170 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c  oc==OP_SeekLe ||
1c180 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29   oc==OP_SeekGt )
1c190 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
1c1a0 70 49 6e 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c  pIn3->r < (doubl
1c1b0 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b  e)iKey ) iKey--;
1c1c0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1c1d0 20 7d 20 0a 20 20 20 20 20 20 72 63 20 3d 20 73   } .      rc = s
1c1e0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1c1f0 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1c200 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69  ursor, 0, (u64)i
1c210 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
1c220 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1c230 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1c240 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1c250 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1c260 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73   }.      if( res
1c270 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ==0 ){.        p
1c280 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1c290 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  = 1;.        pC-
1c2a0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65  >lastRowid = iKe
1c2b0 79 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  y;.      }.    }
1c2c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 46 69 65  else{.      nFie
1c2d0 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1c2e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1c2f0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1c300 54 33 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73  T32 );.      ass
1c310 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b  ert( nField>0 );
1c320 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  .      r.pKeyInf
1c330 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
1c340 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64  ;.      r.nField
1c350 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a   = (u16)nField;.
1c360 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  .      /* The ne
1c370 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20  xt line of code 
1c380 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c  computes as foll
1c390 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72  ows, only faster
1c3a0 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 69 66 28  :.      **   if(
1c3b0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c   oc==OP_SeekGt |
1c3c0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20  | oc==OP_SeekLe 
1c3d0 29 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  ){.      **     
1c3e0 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
1c3f0 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20  ED_INCRKEY;.    
1c400 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20    **   }else{.  
1c410 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61      **     r.fla
1c420 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 2a 2a  gs = 0;.      **
1c430 20 20 20 7d 0a 20 20 20 20 20 20 2a 2f 0a 20 20     }.      */.  
1c440 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 28 75      r.flags = (u
1c450 31 36 29 28 55 4e 50 41 43 4b 45 44 5f 49 4e 43  16)(UNPACKED_INC
1c460 52 4b 45 59 20 2a 20 28 31 20 26 20 28 6f 63 20  RKEY * (1 & (oc 
1c470 2d 20 4f 50 5f 53 65 65 6b 4c 74 29 29 29 3b 0a  - OP_SeekLt)));.
1c480 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63        assert( oc
1c490 21 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 72  !=OP_SeekGt || r
1c4a0 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44  .flags==UNPACKED
1c4b0 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20 20  _INCRKEY );.    
1c4c0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1c4d0 5f 53 65 65 6b 4c 65 20 7c 7c 20 72 2e 66 6c 61  _SeekLe || r.fla
1c4e0 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43  gs==UNPACKED_INC
1c4f0 52 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61 73  RKEY );.      as
1c500 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1c510 6b 47 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d  kGe || r.flags==
1c520 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
1c530 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 74  t( oc!=OP_SeekLt
1c540 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29   || r.flags==0 )
1c550 3b 0a 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20  ;..      r.aMem 
1c560 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1c570 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1c580 44 45 42 55 47 0a 20 20 20 20 20 20 7b 20 69 6e  DEBUG.      { in
1c590 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
1c5a0 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
1c5b0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1c5c0 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
1c5d0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20   }.#endif.      
1c5e0 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65  ExpandBlob(r.aMe
1c5f0 6d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  m);.      rc = s
1c600 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1c610 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1c620 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c  ursor, &r, 0, 0,
1c630 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
1c640 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1c650 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
1c660 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1c670 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
1c680 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1c690 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  id = 0;.    }.  
1c6a0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1c6b0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1c6c0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1c6d0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66  CACHE_STALE;.#if
1c6e0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1c6f0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72      sqlite3_sear
1c700 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
1c710 69 66 0a 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f  if.    if( oc>=O
1c720 50 5f 53 65 65 6b 47 65 20 29 7b 20 20 61 73 73  P_SeekGe ){  ass
1c730 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1c740 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Ge || oc==OP_See
1c750 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 69 66 28  kGt );.      if(
1c760 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d   res<0 || (res==
1c770 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
1c780 47 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  Gt) ){.        r
1c790 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1c7a0 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Next(pC->pCursor
1c7b0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1c7c0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1c7d0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1c7e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1c7f0 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1c800 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1c810 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1c820 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
1c830 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
1c840 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f     assert( oc==O
1c850 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d  P_SeekLt || oc==
1c860 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20  OP_SeekLe );.   
1c870 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20     if( res>0 || 
1c880 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1c890 50 5f 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20  P_SeekLt) ){.   
1c8a0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1c8b0 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
1c8c0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1c8d0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
1c8e0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1c8f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1c900 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1c910 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1c920 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
1c930 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 72 65  e{.        /* re
1c940 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74  s might be negat
1c950 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ive because the 
1c960 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20  table is empty. 
1c970 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20   Check to.      
1c980 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73    ** see if this
1c990 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20   is the case..  
1c9a0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
1c9b0 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74   res = sqlite3Bt
1c9c0 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73  reeEof(pC->pCurs
1c9d0 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
1c9e0 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
1c9f0 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
1ca00 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
1ca10 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1ca20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
1ca30 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
1ca40 70 70 65 6e 73 20 77 68 65 6e 20 61 74 74 65 6d  ppens when attem
1ca50 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68  pting to open th
1ca60 65 20 73 71 6c 69 74 65 33 5f 6d 61 73 74 65 72  e sqlite3_master
1ca70 20 74 61 62 6c 65 0a 20 20 20 20 2a 2a 20 66 6f   table.    ** fo
1ca80 72 20 72 65 61 64 20 61 63 63 65 73 73 20 72 65  r read access re
1ca90 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50  turns SQLITE_EMP
1caa0 54 59 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  TY. In this case
1cab0 20 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20 74   always.    ** t
1cac0 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 28 73 69  ake the jump (si
1cad0 6e 63 65 20 74 68 65 72 65 20 61 72 65 20 6e 6f  nce there are no
1cae0 20 72 65 63 6f 72 64 73 20 69 6e 20 74 68 65 20   records in the 
1caf0 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20  table)..    */. 
1cb00 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1cb10 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
1cb20 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1cb30 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a  Seek P1 P2 * * *
1cb40 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  .**.** P1 is an 
1cb50 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f  open table curso
1cb60 72 20 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f  r and P2 is a ro
1cb70 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72  wid integer.  Ar
1cb80 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20  range.** for P1 
1cb90 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20  to move so that 
1cba0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1cbb0 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20   rowid given by 
1cbc0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
1cbd0 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66  s actually a def
1cbe0 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74  erred seek.  Not
1cbf0 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61  hing actually ha
1cc00 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74  ppens until.** t
1cc10 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65  he cursor is use
1cc20 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f  d to read a reco
1cc30 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69  rd.  That way, i
1cc40 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63  f no reads.** oc
1cc50 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73  cur, no unnecess
1cc60 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e  ary I/O happens.
1cc70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
1cc80 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f  : {    /* in2 */
1cc90 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1cca0 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
1ccb0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1ccc0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1ccd0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1cce0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1ccf0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1cd00 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e   if( ALWAYS(pC->
1cd10 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20  pCursor!=0) ){. 
1cd20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1cd30 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 70 43  sTable );.    pC
1cd40 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
1cd50 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b     pIn2 = &aMem[
1cd60 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 70 43  pOp->p2];.    pC
1cd70 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
1cd80 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
1cd90 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20  alue(pIn2);.    
1cda0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1cdb0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65   = 0;.    pC->de
1cdc0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31  ferredMoveto = 1
1cdd0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1cde0 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .  ../* Opcode: 
1cdf0 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
1ce00 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  4 *.**.** If P4=
1ce10 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
1ce20 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1ce30 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1ce40 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
1ce50 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
1ce60 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
1ce70 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
1ce80 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
1ce90 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
1cea0 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72  ecord..**.** Cur
1ceb0 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1cec0 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1ced0 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1cee0 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1cef0 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66   P4.** is a pref
1cf00 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20  ix of any entry 
1cf10 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d  in P1 then a jum
1cf20 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
1cf30 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66  and.** P1 is lef
1cf40 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1cf50 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79  e matching entry
1cf60 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
1cf70 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50  NotFound P1 P2 P
1cf80 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  3 P4 *.**.** If 
1cf90 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
1cfa0 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
1cfb0 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1cfc0 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
1cfd0 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
1cfe0 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
1cff0 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
1d000 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
1d010 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
1d020 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
1d030 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1d040 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1d050 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1d060 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1d070 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f   and P4.** is no
1d080 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20  t the prefix of 
1d090 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
1d0a0 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
1d0b0 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ade to P2.  If P
1d0c0 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61  1 .** does conta
1d0d0 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73  in an entry whos
1d0e0 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73  e prefix matches
1d0f0 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72   the P3/P4 recor
1d100 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a  d then control.*
1d110 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  * falls through 
1d120 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
1d130 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69  ruction and P1 i
1d140 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
1d150 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69  at the.** matchi
1d160 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
1d170 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1d180 20 4e 6f 74 45 78 69 73 74 73 2c 20 49 73 55 6e   NotExists, IsUn
1d190 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ique.*/.case OP_
1d1a0 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20  NotFound:       
1d1b0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1d1c0 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b  case OP_Found: {
1d1d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1d1e0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c   in3 */.  int al
1d1f0 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 56  readyExists;.  V
1d200 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1d210 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72   int res;.  char
1d220 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63   *pFree;.  Unpac
1d230 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b  kedRecord *pIdxK
1d240 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  ey;.  UnpackedRe
1d250 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61  cord r;.  char a
1d260 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73  TempRec[ROUND8(s
1d270 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65  izeof(UnpackedRe
1d280 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28  cord)) + sizeof(
1d290 4d 65 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69  Mem)*3 + 7];..#i
1d2a0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1d2b0 0a 20 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64  .  sqlite3_found
1d2c0 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1d2d0 0a 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74  ..  alreadyExist
1d2e0 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  s = 0;.  assert(
1d2f0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1d300 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1d310 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1d320 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1d330 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70  NT32 );.  pC = p
1d340 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1d350 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1d360 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  0 );.  pIn3 = &a
1d370 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1d380 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70  if( ALWAYS(pC->p
1d390 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 0a 20  Cursor!=0) ){.. 
1d3a0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1d3b0 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20  sTable==0 );.   
1d3c0 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30   if( pOp->p4.i>0
1d3d0 20 29 7b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79   ){.      r.pKey
1d3e0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
1d3f0 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69  nfo;.      r.nFi
1d400 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
1d410 70 34 2e 69 3b 0a 20 20 20 20 20 20 72 2e 61 4d  p4.i;.      r.aM
1d420 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65  em = pIn3;.#ifde
1d430 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1d440 20 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f       { int i; fo
1d450 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
1d460 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
1d470 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
1d480 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
1d490 69 66 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  if.      r.flags
1d4a0 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46   = UNPACKED_PREF
1d4b0 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  IX_MATCH;.      
1d4c0 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20  pIdxKey = &r;.  
1d4d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
1d4e0 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  IdxKey = sqlite3
1d4f0 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65  VdbeAllocUnpacke
1d500 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20  dRecord(.       
1d510 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c     pC->pKeyInfo,
1d520 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f   aTempRec, sizeo
1d530 66 28 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46  f(aTempRec), &pF
1d540 72 65 65 0a 20 20 20 20 20 20 29 3b 20 0a 20 20  ree.      ); .  
1d550 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d      if( pIdxKey=
1d560 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1d570 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1d580 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1d590 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20  M_Blob );.      
1d5a0 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66  assert( (pIn3->f
1d5b0 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29  lags & MEM_Zero)
1d5c0 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a 65 72 6f 62  ==0 );  /* zerob
1d5d0 6c 6f 62 73 20 61 6c 72 65 61 64 79 20 65 78 70  lobs already exp
1d5e0 61 6e 64 65 64 20 2a 2f 0a 20 20 20 20 20 20 73  anded */.      s
1d5f0 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
1d600 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49  Unpack(pC->pKeyI
1d610 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49  nfo, pIn3->n, pI
1d620 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b  n3->z, pIdxKey);
1d630 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 2d 3e  .      pIdxKey->
1d640 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45  flags |= UNPACKE
1d650 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a  D_PREFIX_MATCH;.
1d660 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73      }.    rc = s
1d670 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1d680 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1d690 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20  ursor, pIdxKey, 
1d6a0 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
1d6b0 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d   if( pOp->p4.i==
1d6c0 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
1d6d0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 46 72  e3DbFree(db, pFr
1d6e0 65 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ee);.    }.    i
1d6f0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1d700 20 29 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   ){.      break;
1d710 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c 72 65 61  .    }.    alrea
1d720 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d  dyExists = (res=
1d730 3d 30 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  =0);.    pC->def
1d740 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1d750 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1d760 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1d770 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  LE;.  }.  if( pO
1d780 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f  p->opcode==OP_Fo
1d790 75 6e 64 20 29 7b 0a 20 20 20 20 69 66 28 20 61  und ){.    if( a
1d7a0 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70  lreadyExists ) p
1d7b0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1d7c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66  .  }else{.    if
1d7d0 28 20 21 61 6c 72 65 61 64 79 45 78 69 73 74 73  ( !alreadyExists
1d7e0 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20   ) pc = pOp->p2 
1d7f0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
1d800 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1d810 49 73 55 6e 69 71 75 65 20 50 31 20 50 32 20 50  IsUnique P1 P2 P
1d820 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72  3 P4 *.**.** Cur
1d830 73 6f 72 20 50 31 20 69 73 20 6f 70 65 6e 20 6f  sor P1 is open o
1d840 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  n an index b-tre
1d850 65 20 2d 20 74 68 61 74 20 69 73 20 74 6f 20 73  e - that is to s
1d860 61 79 2c 20 61 20 62 74 72 65 65 20 77 68 69 63  ay, a btree whic
1d870 68 0a 2a 2a 20 6e 6f 20 64 61 74 61 20 61 6e 64  h.** no data and
1d880 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 61   where the key a
1d890 72 65 20 72 65 63 6f 72 64 73 20 67 65 6e 65 72  re records gener
1d8a0 61 74 65 64 20 62 79 20 4f 50 5f 4d 61 6b 65 52  ated by OP_MakeR
1d8b0 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 74 68  ecord with.** th
1d8c0 65 20 6c 69 73 74 20 66 69 65 6c 64 20 62 65 69  e list field bei
1d8d0 6e 67 20 74 68 65 20 69 6e 74 65 67 65 72 20 52  ng the integer R
1d8e0 4f 57 49 44 20 6f 66 20 74 68 65 20 65 6e 74 72  OWID of the entr
1d8f0 79 20 74 68 61 74 20 74 68 65 20 69 6e 64 65 78  y that the index
1d900 0a 2a 2a 20 65 6e 74 72 79 20 72 65 66 65 72 73  .** entry refers
1d910 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50   to..**.** The P
1d920 33 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61  3 register conta
1d930 69 6e 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72  ins an integer r
1d940 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 43 61  ecord number. Ca
1d950 6c 6c 20 74 68 69 73 20 72 65 63 6f 72 64 20 0a  ll this record .
1d960 2a 2a 20 6e 75 6d 62 65 72 20 52 2e 20 52 65 67  ** number R. Reg
1d970 69 73 74 65 72 20 50 34 20 69 73 20 74 68 65 20  ister P4 is the 
1d980 66 69 72 73 74 20 69 6e 20 61 20 73 65 74 20 6f  first in a set o
1d990 66 20 4e 20 63 6f 6e 74 69 67 75 6f 75 73 20 72  f N contiguous r
1d9a0 65 67 69 73 74 65 72 73 0a 2a 2a 20 74 68 61 74  egisters.** that
1d9b0 20 6d 61 6b 65 20 75 70 20 61 6e 20 75 6e 70 61   make up an unpa
1d9c0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 20 74  cked index key t
1d9d0 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20  hat can be used 
1d9e0 77 69 74 68 20 63 75 72 73 6f 72 20 50 31 2e 0a  with cursor P1..
1d9f0 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
1da00 4e 20 63 61 6e 20 62 65 20 69 6e 66 65 72 72 65  N can be inferre
1da10 64 20 66 72 6f 6d 20 74 68 65 20 63 75 72 73 6f  d from the curso
1da20 72 2e 20 4e 20 69 6e 63 6c 75 64 65 73 20 74 68  r. N includes th
1da30 65 20 72 6f 77 69 64 0a 2a 2a 20 76 61 6c 75 65  e rowid.** value
1da40 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65   appended to the
1da50 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65   end of the inde
1da60 78 20 72 65 63 6f 72 64 2e 20 54 68 69 73 20 72  x record. This r
1da70 6f 77 69 64 20 76 61 6c 75 65 20 6d 61 79 0a 2a  owid value may.*
1da80 2a 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20  * or may not be 
1da90 74 68 65 20 73 61 6d 65 20 61 73 20 52 2e 0a 2a  the same as R..*
1daa0 2a 0a 2a 2a 20 49 66 20 61 6e 79 20 6f 66 20 74  *.** If any of t
1dab0 68 65 20 4e 20 72 65 67 69 73 74 65 72 73 20 62  he N registers b
1dac0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 72 65  eginning with re
1dad0 67 69 73 74 65 72 20 50 34 20 63 6f 6e 74 61 69  gister P4 contai
1dae0 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c  ns a NULL.** val
1daf0 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ue, jump immedia
1db00 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
1db10 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 69  * Otherwise, thi
1db20 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 68  s instruction ch
1db30 65 63 6b 73 20 69 66 20 63 75 72 73 6f 72 20 50  ecks if cursor P
1db40 31 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 6e  1 contains an en
1db50 74 72 79 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  try.** where the
1db60 20 66 69 72 73 74 20 28 4e 2d 31 29 20 66 69 65   first (N-1) fie
1db70 6c 64 73 20 6d 61 74 63 68 20 62 75 74 20 74 68  lds match but th
1db80 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61 74  e rowid value at
1db90 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f 66 20 74   the end.** of t
1dba0 68 65 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  he index entry i
1dbb0 73 20 6e 6f 74 20 52 2e 20 49 66 20 74 68 65 72  s not R. If ther
1dbc0 65 20 69 73 20 6e 6f 20 73 75 63 68 20 65 6e 74  e is no such ent
1dbd0 72 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a 75 6d 70  ry, control jump
1dbe0 73 0a 2a 2a 20 74 6f 20 69 6e 73 74 72 75 63 74  s.** to instruct
1dbf0 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ion P2. Otherwis
1dc00 65 2c 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  e, the rowid of 
1dc10 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20  the conflicting 
1dc20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20 69  index.** entry i
1dc30 73 20 63 6f 70 69 65 64 20 74 6f 20 72 65 67 69  s copied to regi
1dc40 73 74 65 72 20 50 33 20 61 6e 64 20 63 6f 6e 74  ster P3 and cont
1dc50 72 6f 6c 20 66 61 6c 6c 73 20 74 68 72 6f 75 67  rol falls throug
1dc60 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
1dc70 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
1dc80 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
1dc90 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74  tFound, NotExist
1dca0 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65  s, Found.*/.case
1dcb0 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a 20 7b 20   OP_IsUnique: { 
1dcc0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1dcd0 69 6e 33 20 2a 2f 0a 20 20 75 31 36 20 69 69 3b  in3 */.  u16 ii;
1dce0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1dcf0 43 78 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  Cx;.  BtCursor *
1dd00 70 43 72 73 72 3b 0a 20 20 75 31 36 20 6e 46 69  pCrsr;.  u16 nFi
1dd10 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61 4d 78 3b  eld;.  Mem *aMx;
1dd20 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1dd30 64 20 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  d r;            
1dd40 20 20 20 20 20 20 2f 2a 20 42 2d 54 72 65 65 20        /* B-Tree 
1dd50 69 6e 64 65 78 20 73 65 61 72 63 68 20 6b 65 79  index search key
1dd60 20 2a 2f 0a 20 20 69 36 34 20 52 3b 20 20 20 20   */.  i64 R;    
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd80 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69           /* Rowi
1dd90 64 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  d stored in regi
1dda0 73 74 65 72 20 50 33 20 2a 2f 0a 0a 20 20 70 49  ster P3 */..  pI
1ddb0 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1ddc0 70 33 5d 3b 0a 20 20 61 4d 78 20 3d 20 26 61 4d  p3];.  aMx = &aM
1ddd0 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20  em[pOp->p4.i];. 
1dde0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
1ddf0 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 70 61  the values of pa
1de00 72 61 6d 65 74 65 72 73 20 50 31 20 61 6e 64 20  rameters P1 and 
1de10 50 34 20 61 72 65 20 69 6e 20 72 61 6e 67 65 2e  P4 are in range.
1de20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
1de30 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1de40 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
1de50 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20   pOp->p4.i>0 && 
1de60 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d  pOp->p4.i<=p->nM
1de70 65 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  em );.  assert( 
1de80 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1de90 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1dea0 20 29 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74   );..  /* Find t
1deb0 68 65 20 69 6e 64 65 78 20 63 75 72 73 6f 72 2e  he index cursor.
1dec0 20 2a 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61   */.  pCx = p->a
1ded0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1dee0 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65   assert( pCx->de
1def0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
1df00 29 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65  );.  pCx->seekRe
1df10 73 75 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78 2d  sult = 0;.  pCx-
1df20 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1df30 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
1df40 72 73 72 20 3d 20 70 43 78 2d 3e 70 43 75 72 73  rsr = pCx->pCurs
1df50 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79  or;..  /* If any
1df60 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 61   of the values a
1df70 72 65 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74 68  re NULL, take th
1df80 65 20 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69  e jump. */.  nFi
1df90 65 6c 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49  eld = pCx->pKeyI
1dfa0 6e 66 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 66  nfo->nField;.  f
1dfb0 6f 72 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69 65  or(ii=0; ii<nFie
1dfc0 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 69  ld; ii++){.    i
1dfd0 66 28 20 61 4d 78 5b 69 69 5d 2e 66 6c 61 67 73  f( aMx[ii].flags
1dfe0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
1dff0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1e000 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 70 43 72  2 - 1;.      pCr
1e010 73 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 62 72  sr = 0;.      br
1e020 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
1e030 20 61 73 73 65 72 74 28 20 28 61 4d 78 5b 6e 46   assert( (aMx[nF
1e040 69 65 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ield].flags & ME
1e050 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20  M_Null)==0 );.. 
1e060 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b   if( pCrsr!=0 ){
1e070 0a 20 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74 65  .    /* Populate
1e080 20 74 68 65 20 69 6e 64 65 78 20 73 65 61 72 63   the index searc
1e090 68 20 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72 2e  h key. */.    r.
1e0a0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d 3e  pKeyInfo = pCx->
1e0b0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
1e0c0 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 20  nField = nField 
1e0d0 2b 20 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73  + 1;.    r.flags
1e0e0 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46   = UNPACKED_PREF
1e0f0 49 58 5f 53 45 41 52 43 48 3b 0a 20 20 20 20 72  IX_SEARCH;.    r
1e100 2e 61 4d 65 6d 20 3d 20 61 4d 78 3b 0a 23 69 66  .aMem = aMx;.#if
1e110 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1e120 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f  .    { int i; fo
1e130 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
1e140 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
1e150 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
1e160 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
1e170 69 66 0a 0a 20 20 20 20 2f 2a 20 45 78 74 72 61  if..    /* Extra
1e180 63 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ct the value of 
1e190 52 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  R from register 
1e1a0 50 33 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  P3. */.    sqlit
1e1b0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1e1c0 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 52  ify(pIn3);.    R
1e1d0 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20   = pIn3->u.i;.. 
1e1e0 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65     /* Search the
1e1f0 20 42 2d 54 72 65 65 20 69 6e 64 65 78 2e 20 49   B-Tree index. I
1e200 66 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 69 6e 67  f no conflicting
1e210 20 72 65 63 6f 72 64 20 69 73 20 66 6f 75 6e 64   record is found
1e220 2c 20 6a 75 6d 70 0a 20 20 20 20 2a 2a 20 74 6f  , jump.    ** to
1e230 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
1e240 63 6f 70 79 20 74 68 65 20 72 6f 77 69 64 20 6f  copy the rowid o
1e250 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e  f the conflictin
1e260 67 20 72 65 63 6f 72 64 20 74 6f 0a 20 20 20 20  g record to.    
1e270 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 20 61  ** register P3 a
1e280 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
1e290 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
1e2a0 72 75 63 74 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20  ruction.  */.   
1e2b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1e2c0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1e2d0 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
1e2e0 2c 20 26 70 43 78 2d 3e 73 65 65 6b 52 65 73 75  , &pCx->seekResu
1e2f0 6c 74 29 3b 0a 20 20 20 20 69 66 28 20 28 72 2e  lt);.    if( (r.
1e300 66 6c 61 67 73 20 26 20 55 4e 50 41 43 4b 45 44  flags & UNPACKED
1e310 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48 29 20  _PREFIX_SEARCH) 
1e320 7c 7c 20 72 2e 72 6f 77 69 64 3d 3d 52 20 29 7b  || r.rowid==R ){
1e330 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
1e340 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c  >p2 - 1;.    }el
1e350 73 65 7b 0a 20 20 20 20 20 20 70 49 6e 33 2d 3e  se{.      pIn3->
1e360 75 2e 69 20 3d 20 72 2e 72 6f 77 69 64 3b 0a 20  u.i = r.rowid;. 
1e370 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
1e380 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1e390 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20  NotExists P1 P2 
1e3a0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65  P3 * *.**.** Use
1e3b0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1e3c0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1e3d0 6e 20 69 6e 74 65 67 65 72 20 6b 65 79 2e 20 20  n integer key.  
1e3e0 49 66 20 61 20 72 65 63 6f 72 64 20 0a 2a 2a 20  If a record .** 
1e3f0 77 69 74 68 20 74 68 61 74 20 6b 65 79 20 64 6f  with that key do
1e400 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
1e410 74 61 62 6c 65 20 6f 66 20 50 31 2c 20 74 68 65  table of P1, the
1e420 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  n jump to P2. .*
1e430 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20  * If the record 
1e440 64 6f 65 73 20 65 78 69 73 74 2c 20 74 68 65 6e  does exist, then
1e450 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20   fall through.  
1e460 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
1e470 66 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20  ft .** pointing 
1e480 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 69 66  to the record if
1e490 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a   it exists..**.*
1e4a0 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65  * The difference
1e4b0 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 6f 70   between this op
1e4c0 65 72 61 74 69 6f 6e 20 61 6e 64 20 4e 6f 74 46  eration and NotF
1e4d0 6f 75 6e 64 20 69 73 20 74 68 61 74 20 74 68 69  ound is that thi
1e4e0 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 61  s.** operation a
1e4f0 73 73 75 6d 65 73 20 74 68 65 20 6b 65 79 20 69  ssumes the key i
1e500 73 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  s an integer and
1e510 20 74 68 61 74 20 50 31 20 69 73 20 61 20 74 61   that P1 is a ta
1e520 62 6c 65 20 77 68 65 72 65 61 73 0a 2a 2a 20 4e  ble whereas.** N
1e530 6f 74 46 6f 75 6e 64 20 61 73 73 75 6d 65 73 20  otFound assumes 
1e540 6b 65 79 20 69 73 20 61 20 62 6c 6f 62 20 63 6f  key is a blob co
1e550 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 4d  nstructed from M
1e560 61 6b 65 52 65 63 6f 72 64 20 61 6e 64 0a 2a 2a  akeRecord and.**
1e570 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e   P1 is an index.
1e580 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1e590 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1e5a0 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61  , IsUnique.*/.ca
1e5b0 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a  se OP_NotExists:
1e5c0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1e5d0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
1e5e0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
1e5f0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
1e600 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20   int res;.  u64 
1e610 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20  iKey;..  pIn3 = 
1e620 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1e630 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
1e640 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
1e650 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1e660 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1e670 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1e680 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1e690 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1e6a0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1e6b0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1e6c0 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ble );.  assert(
1e6d0 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1e6e0 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73  Reg==0 );.  pCrs
1e6f0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
1e700 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
1e710 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72  rsr!=0) ){.    r
1e720 65 73 20 3d 20 30 3b 0a 20 20 20 20 69 4b 65 79  es = 0;.    iKey
1e730 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
1e740 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1e750 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1e760 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79  d(pCrsr, 0, iKey
1e770 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1e780 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  pC->lastRowid = 
1e790 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 70  pIn3->u.i;.    p
1e7a0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1e7b0 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20  = res==0 ?1:0;. 
1e7c0 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
1e7d0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1e7e0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1e7f0 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 64  STALE;.    pC->d
1e800 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1e810 30 3b 0a 20 20 20 20 69 66 28 20 72 65 73 21 3d  0;.    if( res!=
1e820 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  0 ){.      pc = 
1e830 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1e840 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72     assert( pC->r
1e850 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29  owidIsValid==0 )
1e860 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1e870 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
1e880 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
1e890 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77  * This happens w
1e8a0 68 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20 74  hen an attempt t
1e8b0 6f 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63 75  o open a read cu
1e8c0 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20 20  rsor on the .   
1e8d0 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   ** sqlite_maste
1e8e0 72 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73 20  r table returns 
1e8f0 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20 20  SQLITE_EMPTY..  
1e900 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f    */.    pc = pO
1e910 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61  p->p2 - 1;.    a
1e920 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
1e930 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20  IsValid==0 );.  
1e940 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1e950 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
1e960 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1e970 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20   Sequence P1 P2 
1e980 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64  * * *.**.** Find
1e990 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61   the next availa
1e9a0 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  ble sequence num
1e9b0 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ber for cursor P
1e9c0 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  1..** Write the 
1e9d0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1e9e0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
1e9f0 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63  ..** The sequenc
1ea00 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20  e number on the 
1ea10 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d  cursor is increm
1ea20 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73  ented after this
1ea30 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
1ea40 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65    .*/.case OP_Se
1ea50 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  quence: {       
1ea60 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
1ea70 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
1ea80 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1ea90 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1eaa0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1eab0 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
1eac0 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  p1]!=0 );.  pOut
1ead0 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72  ->u.i = p->apCsr
1eae0 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f  [pOp->p1]->seqCo
1eaf0 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  unt++;.  break;.
1eb00 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  }.../* Opcode: N
1eb10 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ewRowid P1 P2 P3
1eb20 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61   * *.**.** Get a
1eb30 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
1eb40 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
1eb50 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
1eb60 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
1eb70 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
1eb80 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
1eb90 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
1eba0 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
1ebb0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
1ebc0 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
1ebd0 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
1ebe0 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
1ebf0 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
1ec00 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
1ec10 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1ec20 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
1ec30 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
1ec40 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
1ec50 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74  e of this VDBE t
1ec60 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68  hat holds .** th
1ec70 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
1ec80 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72  usly generated r
1ec90 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f  ecord number. No
1eca0 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1ecb0 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77  ers are.** allow
1ecc0 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  ed to be less th
1ecd0 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57  an this value. W
1ece0 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72  hen this value r
1ecf0 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d  eaches its maxim
1ed00 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54  um, .** an SQLIT
1ed10 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20  E_FULL error is 
1ed20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50  generated. The P
1ed30 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70  3 register is up
1ed40 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27  dated with the '
1ed50 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65  .** generated re
1ed60 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69  cord number. Thi
1ed70 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69  s P3 mechanism i
1ed80 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  s used to help i
1ed90 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
1eda0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65  AUTOINCREMENT fe
1edb0 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ature..*/.case O
1edc0 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20  P_NewRowid: {   
1edd0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1ede0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1edf0 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20  i64 v;          
1ee00 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
1ee10 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62  w rowid */.  Vdb
1ee20 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
1ee30 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66      /* Cursor of
1ee40 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68   table to get th
1ee50 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
1ee60 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
1ee70 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
1ee80 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42  t of an sqlite3B
1ee90 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
1eea0 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20  int cnt;        
1eeb0 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
1eec0 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e  r to limit the n
1eed0 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65  umber of searche
1eee0 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
1eef0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1ef00 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1ef10 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20  g largest rowid 
1ef20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  for AUTOINCREMEN
1ef30 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  T */.  VdbeFrame
1ef40 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a   *pFrame;     /*
1ef50 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56   Root frame of V
1ef60 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b  DBE */..  v = 0;
1ef70 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73  .  res = 0;.  as
1ef80 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1ef90 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1efa0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1efb0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1efc0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1efd0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56  !=0 );.  if( NEV
1efe0 45 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d  ER(pC->pCursor==
1eff0 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  0) ){.    /* The
1f000 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61   zero initializa
1f010 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c  tion above is al
1f020 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64  l that is needed
1f030 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
1f040 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77   /* The next row
1f050 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d  id or record num
1f060 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74  ber (different t
1f070 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d  erms for the sam
1f080 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20  e.    ** thing) 
1f090 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61  is obtained in a
1f0a0 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69   two-step algori
1f0b0 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  thm..    **.    
1f0c0 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65  ** First we atte
1f0d0 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
1f0e0 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
1f0f0 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f   rowid and add o
1f100 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61  ne.    ** to tha
1f110 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c  t.  But if the l
1f120 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
1f130 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79  rowid is already
1f140 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20   the maximum.   
1f150 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74   ** positive int
1f160 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f  eger, we have to
1f170 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
1f180 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20   the second.    
1f190 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63  ** probabilistic
1f1a0 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a   algorithm.    *
1f1b0 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63  *.    ** The sec
1f1c0 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ond algorithm is
1f1d0 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77   to select a row
1f1e0 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  id at random and
1f1f0 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69   see if.    ** i
1f200 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  t already exists
1f210 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
1f220 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  If it does not e
1f230 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20  xist, we have.  
1f240 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20    ** succeeded. 
1f250 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72   If the random r
1f260 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c  owid does exist,
1f270 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77   we select a new
1f280 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20   one.    ** and 
1f290 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f  try again, up to
1f2a0 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20   100 times..    
1f2b0 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
1f2c0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23  C->isTable );..#
1f2d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42  ifdef SQLITE_32B
1f2e0 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66  IT_ROWID.#   def
1f2f0 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78  ine MAX_ROWID 0x
1f300 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20  7fffffff.#else. 
1f310 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69     /* Some compi
1f320 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  lers complain ab
1f330 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66  out constants of
1f340 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66   the form 0x7fff
1f350 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20  ffffffffffff..  
1f360 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70    ** Others comp
1f370 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66  lain about 0x7ff
1f380 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c  ffffffffffffffLL
1f390 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1f3a0 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20   macro seems.   
1f3b0 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74   ** to provide t
1f3c0 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c  he constant whil
1f3d0 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d  e making all com
1f3e0 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20  pilers happy..  
1f3f0 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20    */.#   define 
1f400 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29  MAX_ROWID  (i64)
1f410 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66  ( (((u64)0x7ffff
1f420 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34  fff)<<32) | (u64
1f430 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65  )0xffffffff ).#e
1f440 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70  ndif..    if( !p
1f450 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
1f460 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73  d ){.      v = s
1f470 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 43 61  qlite3BtreeGetCa
1f480 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43  chedRowid(pC->pC
1f490 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 69 66  ursor);.      if
1f4a0 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ( v==0 ){.      
1f4b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1f4c0 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72  reeLast(pC->pCur
1f4d0 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1f4e0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1f4f0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1f500 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1f510 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1f520 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
1f530 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20  ( res ){.       
1f540 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49     v = 1;   /* I
1f550 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37  MP: R-61914-4807
1f560 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 65 6c  4 */.        }el
1f570 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73  se{.          as
1f580 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
1f590 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
1f5a0 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a  pC->pCursor) );.
1f5b0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
1f5c0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
1f5d0 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
1f5e0 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  &v);.          a
1f5f0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
1f600 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e  E_OK );   /* Can
1f610 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69  not fail followi
1f620 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20 2a  ng BtreeLast() *
1f630 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  /.          if( 
1f640 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a  v>=MAX_ROWID ){.
1f650 20 20 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e              pC->
1f660 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d  useRandomRowid =
1f670 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65   1;.          }e
1f680 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
1f690 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   v++;   /* IMP: 
1f6a0 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f  R-29538-34987 */
1f6b0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
1f6c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
1f6d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1f6e0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
1f6f0 54 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  T.      if( pOp-
1f700 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  >p3 ){.        /
1f710 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
1f720 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
1f730 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
1f740 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1f750 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p3>0 );.       
1f760 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
1f770 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
1f780 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
1f790 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
1f7a0 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
1f7b0 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
1f7c0 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
1f7d0 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
1f7e0 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
1f7f0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  */.          ass
1f800 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46  ert( pOp->p3<=pF
1f810 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  rame->nMem );.  
1f820 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
1f830 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
1f840 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d  ->p3];.        }
1f850 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1f860 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
1f870 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
1f880 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
1f890 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1f8a0 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
1f8b0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65  );.          pMe
1f8c0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
1f8d0 33 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 6d 65  3];.          me
1f8e0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
1f8f0 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  , pMem);.       
1f900 20 7d 0a 20 20 20 20 20 20 20 20 61 73 73 65 72   }.        asser
1f910 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d  t( memIsValid(pM
1f920 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 20 20  em) );..        
1f930 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
1f940 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20  Op->p3, pMem);. 
1f950 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
1f960 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1f970 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 61  pMem);.        a
1f980 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
1f990 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
1f9a0 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29  0 );  /* mem(P3)
1f9b0 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
1f9c0 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  r */.        if(
1f9d0 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f   pMem->u.i==MAX_
1f9e0 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65  ROWID || pC->use
1f9f0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
1fa00 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
1fa10 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20  LITE_FULL;   /* 
1fa20 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36 31 33  IMP: R-12275-613
1fa30 33 38 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  38 */.          
1fa40 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1fa50 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1fa60 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 76   }.        if( v
1fa70 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a  <pMem->u.i+1 ){.
1fa80 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d            v = pM
1fa90 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
1faa0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
1fab0 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Mem->u.i = v;.  
1fac0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
1fad0 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
1fae0 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70  SetCachedRowid(p
1faf0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 76 3c 4d 41  C->pCursor, v<MA
1fb00 58 5f 52 4f 57 49 44 20 3f 20 76 2b 31 20 3a 20  X_ROWID ? v+1 : 
1fb10 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  0);.    }.    if
1fb20 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  ( pC->useRandomR
1fb30 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a  owid ){.      /*
1fb40 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
1fb50 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38  OF: R-07677-4188
1fb60 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74  1 If the largest
1fb70 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20   ROWID is equal 
1fb80 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  to the.      ** 
1fb90 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65  largest possible
1fba0 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37   integer (922337
1fbb0 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74  2036854775807) t
1fbc0 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
1fbd0 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65  .      ** engine
1fbe0 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20   starts picking 
1fbf0 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61  positive candida
1fc00 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e  te ROWIDs at ran
1fc10 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20  dom until.      
1fc20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20  ** it finds one 
1fc30 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76  that is not prev
1fc40 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a  iously used. */.
1fc50 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1fc60 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20  p->p3==0 );  /* 
1fc70 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20  We cannot be in 
1fc80 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64  random rowid mod
1fc90 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20  e if this is.   
1fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcb0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20            ** an 
1fcc0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
1fcd0 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 2f 2a  ble. */.      /*
1fce0 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 61 74   on the first at
1fcf0 74 65 6d 70 74 2c 20 73 69 6d 70 6c 79 20 64 6f  tempt, simply do
1fd00 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20 70   one more than p
1fd10 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20  revious */.     
1fd20 20 76 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a   v = lastRowid;.
1fd30 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
1fd40 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e  ROWID>>1); /* en
1fd50 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20  sure doesn't go 
1fd60 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20  negative */.    
1fd70 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65    v++; /* ensure
1fd80 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20   non-zero */.   
1fd90 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20     cnt = 0;.    
1fda0 20 20 77 68 69 6c 65 28 20 20 20 28 28 72 63 20    while(   ((rc 
1fdb0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1fdc0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1fdd0 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
1fde0 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20  4)v,.           
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe10 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d        0, &res))=
1fe20 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20  =SQLITE_OK).    
1fe30 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d          && (res=
1fe40 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  =0).            
1fe50 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b  && (++cnt<100)){
1fe60 0a 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c  .        /* coll
1fe70 69 73 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74  ision - try anot
1fe80 68 65 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  her random rowid
1fe90 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
1fea0 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73  te3_randomness(s
1feb0 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20  izeof(v), &v);. 
1fec0 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35         if( cnt<5
1fed0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
1fee0 20 74 72 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e   try "small" ran
1fef0 64 6f 6d 20 72 6f 77 69 64 73 20 66 6f 72 20 74  dom rowids for t
1ff00 68 65 20 69 6e 69 74 69 61 6c 20 61 74 74 65 6d  he initial attem
1ff10 70 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  pts */.         
1ff20 20 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a   v &= 0xffffff;.
1ff30 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1ff40 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d           v &= (M
1ff50 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a  AX_ROWID>>1); /*
1ff60 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20   ensure doesn't 
1ff70 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20  go negative */. 
1ff80 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1ff90 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20   v++; /* ensure 
1ffa0 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20  non-zero */.    
1ffb0 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63    }.      if( rc
1ffc0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
1ffd0 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
1ffe0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
1fff0 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
20000 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
20010 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
20020 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
20030 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
20040 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20  ert( v>0 );  /* 
20050 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37  EV: R-40812-0357
20060 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 */.    }.    p
20070 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
20080 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  = 0;.    pC->def
20090 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
200a0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
200b0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
200c0 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
200d0 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
200e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
200f0 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
20100 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74  P4 P5.**.** Writ
20110 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20  e an entry into 
20120 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72  the table of cur
20130 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65  sor P1.  A new e
20140 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74  ntry is.** creat
20150 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74  ed if it doesn't
20160 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f   already exist o
20170 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61  r the data for a
20180 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e  n existing.** en
20190 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74  try is overwritt
201a0 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73  en.  The data is
201b0 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42   the value MEM_B
201c0 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lob stored in re
201d0 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  gister.** number
201e0 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20   P2. The key is 
201f0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
20200 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d  er P3. The key m
20210 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f  ust.** be a MEM_
20220 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  Int..**.** If th
20230 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
20240 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
20250 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
20260 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
20270 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
20280 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
20290 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
202a0 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f  LASTROWID flag o
202b0 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20  f P5 is set,.** 
202c0 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74  then rowid is st
202d0 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75  ored for subsequ
202e0 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68  ent return by th
202f0 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73  e.** sqlite3_las
20300 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
20310 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72   function (other
20320 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64  wise it is unmod
20330 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ified)..**.** If
20340 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
20350 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f  EEKRESULT flag o
20360 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
20370 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
20380 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65  .** the last see
20390 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f  k operation (OP_
203a0 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20 61  NotExists) was a
203b0 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74   success, then t
203c0 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
203d0 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70   will not attemp
203e0 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70  t to find the ap
203f0 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65  propriate row be
20400 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68  fore doing.** th
20410 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c  e insert but wil
20420 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72  l instead overwr
20430 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74  ite the row that
20440 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
20450 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  * currently poin
20460 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d  ting to.  Presum
20470 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20  ably, the prior 
20480 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
20490 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61  ode.** has alrea
204a0 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  dy positioned th
204b0 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74  e cursor correct
204c0 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ly.  This is an 
204d0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20  optimization.** 
204e0 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66  that boosts perf
204f0 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64  ormance by avoid
20500 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65  ing redundant se
20510 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  eks..**.** If th
20520 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
20530 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  E flag is set, t
20540 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
20550 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a  is part of an.**
20560 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
20570 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69  n.  Otherwise (i
20580 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c  f the flag is cl
20590 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f  ear) then this o
205a0 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74  pcode.** is part
205b0 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70   of an INSERT op
205c0 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69  eration.  The di
205d0 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79  fference is only
205e0 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a   important to.**
205f0 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
20600 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ..**.** Paramete
20610 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74  r P4 may point t
20620 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  o a string conta
20630 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d  ining the table-
20640 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20  name, or.** may 
20650 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
20660 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
20670 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
20680 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55   .** (sqlite3.xU
20690 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
206a0 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77  s invoked follow
206b0 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c  ing a successful
206c0 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28   insert..**.** (
206d0 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66  WARNING/TODO: If
206e0 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
206f0 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
20700 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20   dynamically.** 
20710 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20  allocated, then 
20720 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20  ownership of P2 
20730 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74  is transferred t
20740 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72  o the pseudo-cur
20750 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73  sor.** and regis
20760 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65  ter P2 becomes e
20770 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68  phemeral.  If th
20780 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e  e cursor is chan
20790 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75  ged, the.** valu
207a0 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  e of register P2
207b0 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67   will then chang
207c0 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  e.  Make sure th
207d0 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63  is does not.** c
207e0 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d  ause any problem
207f0 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  s.).**.** This i
20800 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
20810 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e  works on tables.
20820 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
20830 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
20840 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f  for indices is O
20850 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a  P_IdxInsert..*/.
20860 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
20870 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34  tInt P1 P2 P3 P4
20880 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
20890 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
208a0 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65  e OP_Insert exce
208b0 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  pt that the key 
208c0 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  is the.** intege
208d0 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20  r value P3, not 
208e0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
208f0 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20   integer stored 
20900 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
20910 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  */.case OP_Inser
20920 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  t: .case OP_Inse
20930 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a  rtInt: {.  Mem *
20940 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20  pData;       /* 
20950 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
20960 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65   data for the re
20970 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
20980 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b  ted */.  Mem *pK
20990 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45  ey;        /* ME
209a0 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b  M cell holding k
209b0 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ey  for the reco
209c0 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79  rd */.  i64 iKey
209d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
209e0 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f   integer ROWID o
209f0 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65  r key for the re
20a00 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
20a10 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ted */.  VdbeCur
20a20 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75  sor *pC;   /* Cu
20a30 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e  rsor to table in
20a40 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20  to which insert 
20a50 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  is written */.  
20a60 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  int nZero;      
20a70 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
20a80 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70  ero-bytes to app
20a90 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65  end */.  int see
20aa0 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65  kResult;   /* Re
20ab0 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65  sult of prior se
20ac0 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53  ek or 0 if no US
20ad0 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
20ae0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
20af0 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62   *zDb;  /* datab
20b00 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ase name - used 
20b10 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  by the update ho
20b20 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ok */.  const ch
20b30 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62  ar *zTbl; /* Tab
20b40 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62  le name - used b
20b50 79 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f 6f  y the opdate hoo
20b60 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20  k */.  int op;  
20b70 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f           /* Opco
20b80 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f  de for update ho
20b90 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ok: SQLITE_UPDAT
20ba0 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45  E or SQLITE_INSE
20bb0 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d  RT */..  pData =
20bc0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
20bd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
20be0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
20bf0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
20c00 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
20c10 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20  lid(pData) );.  
20c20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
20c30 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
20c40 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
20c50 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
20c60 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
20c70 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
20c80 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
20c90 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
20ca0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
20cb0 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61  ACE(pOp->p2, pDa
20cc0 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d  ta);..  if( pOp-
20cd0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
20ce0 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d  rt ){.    pKey =
20cf0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
20d00 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
20d10 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  y->flags & MEM_I
20d20 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  nt );.    assert
20d30 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65  ( memIsValid(pKe
20d40 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  y) );.    REGIST
20d50 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
20d60 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65  , pKey);.    iKe
20d70 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20  y = pKey->u.i;. 
20d80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
20d90 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
20da0 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b  =OP_InsertInt );
20db0 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d  .    iKey = pOp-
20dc0 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  >p3;.  }..  if( 
20dd0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
20de0 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
20df0 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
20e00 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
20e10 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
20e20 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
20e30 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20  Rowid = iKey;.  
20e40 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
20e50 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
20e60 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b     pData->z = 0;
20e70 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20  .    pData->n = 
20e80 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
20e90 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66  assert( pData->f
20ea0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
20eb0 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d  |MEM_Str) );.  }
20ec0 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  .  seekResult = 
20ed0 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
20ee0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
20ef0 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
20f00 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70  lt : 0);.  if( p
20f10 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
20f20 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a  M_Zero ){.    nZ
20f30 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e  ero = pData->u.n
20f40 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Zero;.  }else{. 
20f50 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20     nZero = 0;.  
20f60 7d 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  }.  sqlite3Btree
20f70 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70  SetCachedRowid(p
20f80 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a  C->pCursor, 0);.
20f90 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
20fa0 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43  reeInsert(pC->pC
20fb0 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a  ursor, 0, iKey,.
20fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fd0 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61 2d            pData-
20fe0 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a  >z, pData->n, nZ
20ff0 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ero,.           
21000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
21010 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
21020 41 50 50 45 4e 44 2c 20 73 65 65 6b 52 65 73 75  APPEND, seekResu
21030 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 72 6f  lt.  );.  pC->ro
21040 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
21050 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
21060 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
21070 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
21080 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a  CHE_STALE;..  /*
21090 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
210a0 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
210b0 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63  red. */.  if( rc
210c0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64  ==SQLITE_OK && d
210d0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
210e0 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
210f0 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  ){.    zDb = db-
21100 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
21110 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20  ame;.    zTbl = 
21120 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f  pOp->p4.z;.    o
21130 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  p = ((pOp->p5 & 
21140 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
21150 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
21160 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54   : SQLITE_INSERT
21170 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
21180 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
21190 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
211a0 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
211b0 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a  eArg, op, zDb, z
211c0 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20  Tbl, iKey);.    
211d0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
211e0 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  =0 );.  }.  brea
211f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
21200 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20   Delete P1 P2 * 
21210 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  P4 *.**.** Delet
21220 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
21230 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
21240 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
21250 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
21260 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   The cursor will
21270 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
21280 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20  g at either the 
21290 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
212a0 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
212b0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
212c0 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
212d0 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
212e0 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
212f0 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
21300 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
21310 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63  e a no-op.  Henc
21320 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65  e it is OK to de
21330 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64  lete.** a record
21340 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
21350 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a  Next loop..**.**
21360 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
21370 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
21380 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  2 is set, then t
21390 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
213a0 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
213b0 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
213c0 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20   not)..**.** P1 
213d0 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75  must not be pseu
213e0 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61  do-table.  It ha
213f0 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74  s to be a real t
21400 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c  able with.** mul
21410 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a  tiple rows..**.*
21420 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
21430 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ULL, then it is 
21440 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
21450 74 61 62 6c 65 20 74 68 61 74 20 50 31 20 69 73  table that P1 is
21460 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e  .** pointing to.
21470 20 20 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f    The update hoo
21480 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65  k will be invoke
21490 64 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e  d, if it exists.
214a0 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
214b0 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50   NULL then the P
214c0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61  1 cursor must ha
214d0 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e  ve been position
214e0 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e  ed.** using OP_N
214f0 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f  otFound prior to
21500 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f   invoking this o
21510 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
21520 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36  P_Delete: {.  i6
21530 34 20 69 4b 65 79 3b 0a 20 20 56 64 62 65 43 75  4 iKey;.  VdbeCu
21540 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 69 4b 65  rsor *pC;..  iKe
21550 79 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  y = 0;.  assert(
21560 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
21570 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
21580 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
21590 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
215a0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
215b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
215c0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f  pCursor!=0 );  /
215d0 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72  * Only valid for
215e0 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f   real tables, no
215f0 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f   pseudotables */
21600 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70  ..  /* If the up
21610 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62  date-hook will b
21620 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69  e invoked, set i
21630 4b 65 79 20 74 6f 20 74 68 65 20 72 6f 77 69 64  Key to the rowid
21640 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 72 6f 77   of the.  ** row
21650 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 2e 0a   being deleted..
21660 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78    */.  if( db->x
21670 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
21680 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
21690 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
216a0 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73  sTable );.    as
216b0 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
216c0 73 56 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61  sValid );  /* la
216d0 73 74 52 6f 77 69 64 20 73 65 74 20 62 79 20 70  stRowid set by p
216e0 72 65 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f  revious OP_NotFo
216f0 75 6e 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20  und */.    iKey 
21700 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = pC->lastRowid;
21710 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  .  }..  /* The O
21720 50 5f 44 65 6c 65 74 65 20 6f 70 63 6f 64 65 20  P_Delete opcode 
21730 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61  always follows a
21740 6e 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  n OP_NotExists o
21750 72 20 4f 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a  r OP_Last or.  *
21760 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74  * OP_Column on t
21770 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 77 69  he same table wi
21780 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 76  thout any interv
21790 65 6e 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73  ening operations
217a0 20 74 68 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74   that.  ** might
217b0 20 6d 6f 76 65 20 6f 72 20 69 6e 76 61 6c 69 64   move or invalid
217c0 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ate the cursor. 
217d0 20 48 65 6e 63 65 20 63 75 72 73 6f 72 20 70 43   Hence cursor pC
217e0 20 69 73 20 61 6c 77 61 79 73 20 70 6f 69 6e 74   is always point
217f0 69 6e 67 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20  ing.  ** to the 
21800 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65  row to be delete
21810 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
21820 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
21830 6f 28 29 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20  o() operation.  
21840 2a 2a 20 62 65 6c 6f 77 20 69 73 20 61 6c 77 61  ** below is alwa
21850 79 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63  ys a no-op and c
21860 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 20 57 65 20  annot fail.  We 
21870 77 69 6c 6c 20 72 75 6e 20 69 74 20 61 6e 79 68  will run it anyh
21880 6f 77 2c 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a  ow, though,.  **
21890 20 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73   to guard agains
218a0 74 20 66 75 74 75 72 65 20 63 68 61 6e 67 65 73  t future changes
218b0 20 74 6f 20 74 68 65 20 63 6f 64 65 20 67 65 6e   to the code gen
218c0 65 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20  erator..  **/.  
218d0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
218e0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
218f0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
21900 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
21910 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
21920 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
21930 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
21940 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 73 71  _to_error;..  sq
21950 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
21960 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75  hedRowid(pC->pCu
21970 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d  rsor, 0);.  rc =
21980 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
21990 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  ete(pC->pCursor)
219a0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
219b0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
219c0 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
219d0 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
219e0 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
219f0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
21a00 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61  _OK && db->xUpda
21a10 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
21a20 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 63  p->p4.z ){.    c
21a30 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
21a40 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
21a50 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63 6f 6e  ].zName;.    con
21a60 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20  st char *zTbl = 
21a70 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 64  pOp->p4.z;.    d
21a80 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
21a90 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
21aa0 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  g, SQLITE_DELETE
21ab0 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65  , zDb, zTbl, iKe
21ac0 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  y);.    assert( 
21ad0 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
21ae0 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  }.  if( pOp->p2 
21af0 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
21b00 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
21b10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f  .  break;.}./* O
21b20 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e  pcode: ResetCoun
21b30 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  t * * * * *.**.*
21b40 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * The value of t
21b50 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
21b60 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74  r is copied to t
21b70 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
21b80 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75  le.** change cou
21b90 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64 20 62  nter (returned b
21ba0 79 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c  y subsequent cal
21bb0 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68  ls to sqlite3_ch
21bc0 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65  anges())..** The
21bd0 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e  n the VMs intern
21be0 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  al change counte
21bf0 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a  r resets to 0..*
21c00 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  * This is used b
21c10 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  y trigger progra
21c20 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ms..*/.case OP_R
21c30 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73  esetCount: {.  s
21c40 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
21c50 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61  nges(db, p->nCha
21c60 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e  nge);.  p->nChan
21c70 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  ge = 0;.  break;
21c80 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
21c90 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20  orterCompare P1 
21ca0 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 50 31 20 69  P2 P3.**.** P1 i
21cb0 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f  s a sorter curso
21cc0 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  r. This instruct
21cd0 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 74 68 65  ion compares the
21ce0 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20   record blob in 
21cf0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 20  .** register P3 
21d00 77 69 74 68 20 74 68 65 20 65 6e 74 72 79 20 74  with the entry t
21d10 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 63  hat the sorter c
21d20 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20  ursor currently 
21d30 70 6f 69 6e 74 73 20 74 6f 2e 0a 2a 2a 20 49 66  points to..** If
21d40 2c 20 65 78 63 6c 75 64 69 6e 67 20 74 68 65 20  , excluding the 
21d50 72 6f 77 69 64 20 66 69 65 6c 64 73 20 61 74 20  rowid fields at 
21d60 74 68 65 20 65 6e 64 2c 20 74 68 65 20 74 77 6f  the end, the two
21d70 20 72 65 63 6f 72 64 73 20 61 72 65 20 61 20 6d   records are a m
21d80 61 74 63 68 2c 0a 2a 2a 20 66 61 6c 6c 20 74 68  atch,.** fall th
21d90 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
21da0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 4f  t instruction. O
21db0 74 68 65 72 77 69 73 65 2c 20 6a 75 6d 70 20 74  therwise, jump t
21dc0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
21dd0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
21de0 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  terCompare: {.  
21df0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
21e00 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43    int res;..  pC
21e10 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
21e20 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
21e30 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
21e40 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
21e50 4f 70 2d 3e 70 33 5d 3b 0a 20 20 72 63 20 3d 20  Op->p3];.  rc = 
21e60 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
21e70 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e  rCompare(pC, pIn
21e80 33 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  3, &res);.  if( 
21e90 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
21ea0 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
21eb0 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f   break;.};../* O
21ec0 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74  pcode: SorterDat
21ed0 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
21ee0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
21ef0 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
21f00 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61  urrent sorter da
21f10 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75  ta for sorter cu
21f20 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  rsor P1..*/.case
21f30 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20   OP_SorterData: 
21f40 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
21f50 70 43 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  pC;.#ifndef SQLI
21f60 54 45 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f 53 4f  TE_OMIT_MERGE_SO
21f70 52 54 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  RT.  pOut = &aMe
21f80 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43  m[pOp->p2];.  pC
21f90 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
21fa0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
21fb0 70 43 2d 3e 69 73 53 6f 72 74 65 72 20 29 3b 0a  pC->isSorter );.
21fc0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
21fd0 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70  beSorterRowkey(p
21fe0 43 2c 20 70 4f 75 74 29 3b 0a 23 65 6c 73 65 0a  C, pOut);.#else.
21ff0 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
22000 4f 50 5f 52 6f 77 4b 65 79 3b 0a 20 20 70 63 2d  OP_RowKey;.  pc-
22010 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61  -;.#endif.  brea
22020 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22030 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a   RowData P1 P2 *
22040 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
22050 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
22060 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
22070 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72 73  ow data for curs
22080 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
22090 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
220a0 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
220b0 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73  .  .** It is jus
220c0 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  t copied onto th
220d0 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78  e P2 register ex
220e0 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
220f0 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
22100 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
22110 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
22120 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
22130 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
22140 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
22150 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
22160 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
22170 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
22180 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  /./* Opcode: Row
22190 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Key P1 P2 * * *.
221a0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
221b0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
221c0 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65   complete row ke
221d0 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  y for cursor P1.
221e0 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20  .** There is no 
221f0 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
22200 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a  f the data.  .**
22210 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69   The key is copi
22220 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 33 20 72  ed onto the P3 r
22230 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20  egister exactly 
22240 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75  as .** it is fou
22250 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nd in the databa
22260 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
22270 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
22280 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
22290 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
222a0 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
222b0 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
222c0 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
222d0 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
222e0 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65   OP_RowKey:.case
222f0 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20   OP_RowData: {. 
22300 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
22310 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
22320 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69  sr;.  u32 n;.  i
22330 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20  64 n64;..  pOut 
22340 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
22350 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
22360 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
22370 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52    /* Note that R
22380 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74  owKey and RowDat
22390 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61  a are really exa
223a0 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e  ctly the same in
223b0 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61  struction */.  a
223c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
223d0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
223e0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
223f0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22400 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
22410 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 30 20 29  C->isSorter==0 )
22420 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22430 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e  isTable || pOp->
22440 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61  opcode!=OP_RowDa
22450 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
22460 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70  pC->isIndex || p
22470 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52  Op->opcode==OP_R
22480 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65  owData );.  asse
22490 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
224a0 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52  ssert( pC->nullR
224b0 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ow==0 );.  asser
224c0 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
224d0 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73  leReg==0 );.  as
224e0 73 65 72 74 28 20 21 70 43 2d 3e 69 73 53 6f 72  sert( !pC->isSor
224f0 74 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ter );.  assert(
22500 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
22510 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
22520 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
22530 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
22540 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
22550 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68  rsr) );..  /* Th
22560 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20  e OP_RowKey and 
22570 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64  OP_RowData opcod
22580 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  es always follow
22590 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72   OP_NotExists or
225a0 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f  .  ** OP_Rewind/
225b0 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20  Op_Next with no 
225c0 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74  intervening inst
225d0 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ructions that mi
225e0 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20  ght invalidate. 
225f0 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20   ** the cursor. 
22600 20 48 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f   Hence the follo
22610 77 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65  wing sqlite3Vdbe
22620 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
22630 61 6c 6c 20 69 73 20 61 6c 77 61 79 73 0a 20 20  all is always.  
22640 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63  ** a no-op and c
22650 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 20 20  an never fail.  
22660 42 75 74 20 77 65 20 6c 65 61 76 65 20 69 74 20  But we leave it 
22670 69 6e 20 70 6c 61 63 65 20 61 73 20 61 20 73 61  in place as a sa
22680 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  fety..  */.  ass
22690 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
226a0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
226b0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
226c0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
226d0 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
226e0 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
226f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
22700 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70  _error;..  if( p
22710 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20  C->isIndex ){.  
22720 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69    assert( !pC->i
22730 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56  sTable );.    VV
22740 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c  A_ONLY(rc =) sql
22750 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
22760 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20  (pCrsr, &n64);. 
22770 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
22780 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f  QLITE_OK );    /
22790 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f  * True because o
227a0 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  f CursorMoveto()
227b0 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20   call above */. 
227c0 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61     if( n64>db->a
227d0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
227e0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
227f0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
22800 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20  ;.    }.    n = 
22810 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73  (u32)n64;.  }els
22820 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  e{.    VVA_ONLY(
22830 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
22840 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
22850 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72  , &n);.    asser
22860 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
22870 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69   );    /* DataSi
22880 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c  ze() cannot fail
22890 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75   */.    if( n>(u
228a0 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
228b0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
228c0 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
228d0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
228e0 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
228f0 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
22900 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20  t, n, 0) ){.    
22910 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
22920 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a  .  pOut->n = n;.
22930 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
22940 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29  (pOut, MEM_Blob)
22950 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e  ;.  if( pC->isIn
22960 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  dex ){.    rc = 
22970 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28  sqlite3BtreeKey(
22980 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
22990 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  t->z);.  }else{.
229a0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
229b0 42 74 72 65 65 44 61 74 61 28 70 43 72 73 72 2c  BtreeData(pCrsr,
229c0 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
229d0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  .  }.  pOut->enc
229e0 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20   = SQLITE_UTF8; 
229f0 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20   /* In case the 
22a00 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61 73  blob is ever cas
22a10 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55  t to text */.  U
22a20 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
22a30 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
22a40 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22a50 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a   Rowid P1 P2 * *
22a60 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69   *.**.** Store i
22a70 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
22a80 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
22a90 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
22aa0 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
22ab0 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
22ac0 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
22ad0 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65  *.** P1 can be e
22ae0 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72  ither an ordinar
22af0 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72  y table or a vir
22b00 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
22b10 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  re used to.** be
22b20 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56   a separate OP_V
22b30 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72  Rowid opcode for
22b40 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61   use with virtua
22b50 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68  l tables, but th
22b60 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65  is.** one opcode
22b70 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62   now works for b
22b80 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e  oth table types.
22b90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
22ba0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
22bb0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
22bc0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62  release */.  Vdb
22bd0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
22be0 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f  64 v;.  sqlite3_
22bf0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
22c00 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
22c10 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
22c20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22c30 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22c40 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
22c50 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
22c60 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
22c70 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
22c80 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
22c90 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 69  bleReg==0 );.  i
22ca0 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
22cb0 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
22cc0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
22cd0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
22ce0 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65   if( pC->deferre
22cf0 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76  dMoveto ){.    v
22d00 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72   = pC->movetoTar
22d10 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  get;.#ifndef SQL
22d20 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
22d30 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66  TABLE.  }else if
22d40 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
22d50 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d  r ){.    pVtab =
22d60 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
22d70 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f  ->pVtab;.    pMo
22d80 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
22d90 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72  odule;.    asser
22da0 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77  t( pModule->xRow
22db0 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  id );.    rc = p
22dc0 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70  Module->xRowid(p
22dd0 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  C->pVtabCursor, 
22de0 26 76 29 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56  &v);.    importV
22df0 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74  tabErrMsg(p, pVt
22e00 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ab);.#endif /* S
22e10 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
22e20 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c  ALTABLE */.  }el
22e30 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
22e40 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
22e50 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
22e60 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
22e70 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
22e80 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
22e90 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
22ea0 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69 64 49    if( pC->rowidI
22eb0 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20  sValid ){.      
22ec0 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69  v = pC->lastRowi
22ed0 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  d;.    }else{.  
22ee0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22ef0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
22f00 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
22f10 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
22f20 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f  =SQLITE_OK );  /
22f30 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61  * Always so beca
22f40 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
22f50 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20  eto() above */. 
22f60 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d     }.  }.  pOut-
22f70 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
22f80 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22f90 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20   NullRow P1 * * 
22fa0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
22fb0 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
22fc0 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79  a null row.  Any
22fd0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61   OP_Column opera
22fe0 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63  tions.** that oc
22ff0 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75  cur while the cu
23000 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e  rsor is on the n
23010 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77  ull row will alw
23020 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e  ays.** write a N
23030 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
23040 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62  NullRow: {.  Vdb
23050 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
23060 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23070 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23080 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
23090 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
230a0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
230b0 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e  pC!=0 );.  pC->n
230c0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
230d0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
230e0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   0;.  assert( pC
230f0 2d 3e 70 43 75 72 73 6f 72 20 7c 7c 20 70 43 2d  ->pCursor || pC-
23100 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
23110 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f    if( pC->pCurso
23120 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
23130 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72  BtreeClearCursor
23140 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
23150 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
23160 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50  * Opcode: Last P
23170 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
23180 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
23190 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
231a0 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73  lumn or Next ins
231b0 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
231c0 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
231d0 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  o the last entry
231e0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
231f0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
23200 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
23210 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
23220 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65  ty and P2>0, the
23230 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
23240 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
23250 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68  P2 is 0 or if th
23260 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
23270 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
23280 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
23290 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
232a0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
232b0 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20  case OP_Last: { 
232c0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
232d0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
232e0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
232f0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
23300 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
23310 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
23320 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
23330 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
23340 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
23350 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
23360 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
23370 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  sor;.  res = 0;.
23380 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72    if( ALWAYS(pCr
23390 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 63  sr!=0) ){.    rc
233a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
233b0 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ast(pCrsr, &res)
233c0 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ;.  }.  pC->null
233d0 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
233e0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
233f0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72  eto = 0;.  pC->r
23400 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
23410 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
23420 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
23430 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e  ;.  if( pOp->p2>
23440 30 20 26 26 20 72 65 73 20 29 7b 0a 20 20 20 20  0 && res ){.    
23450 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
23460 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
23470 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  .../* Opcode: So
23480 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
23490 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
234a0 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68   does exactly th
234b0 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20  e same thing as 
234c0 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74  OP_Rewind except
234d0 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72   that.** it incr
234e0 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75  ements an undocu
234f0 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61  mented global va
23500 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20  riable used for 
23510 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53  testing..**.** S
23520 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70  orting is accomp
23530 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e  lished by writin
23540 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61  g records into a
23550 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a   sorting index,.
23560 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e  ** then rewindin
23570 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64  g that index and
23580 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b   playing it back
23590 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20   from beginning 
235a0 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75  to.** end.  We u
235b0 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f  se the OP_Sort o
235c0 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66  pcode instead of
235d0 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f   OP_Rewind to do
235e0 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e   the.** rewindin
235f0 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c  g so that the gl
23600 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69  obal variable wi
23610 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65  ll be incremente
23620 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73  d and.** regress
23630 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65  ion tests can de
23640 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
23650 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d  or not the optim
23660 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65  izer is.** corre
23670 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20  ctly optimizing 
23680 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61  out sorts..*/.ca
23690 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  se OP_SorterSort
236a0 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
236b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
236c0 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 20 20  IT_MERGE_SORT.  
236d0 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
236e0 5f 53 6f 72 74 3b 0a 23 65 6e 64 69 66 0a 63 61  _Sort;.#endif.ca
236f0 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20  se OP_Sort: {   
23700 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
23710 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
23720 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72  ST.  sqlite3_sor
23730 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c  t_count++;.  sql
23740 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
23750 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d  t--;.#endif.  p-
23760 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
23770 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54  _STMTSTATUS_SORT
23780 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  -1]++;.  /* Fall
23790 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
237a0 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20  _Rewind */.}./* 
237b0 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50  Opcode: Rewind P
237c0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
237d0 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
237e0 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
237f0 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73  lumn or Next ins
23800 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
23810 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
23820 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72  o the first entr
23830 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
23840 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
23850 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
23860 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d  e or index is em
23870 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68  pty and P2>0, th
23880 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
23890 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
238a0 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74   P2 is 0 or if t
238b0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
238c0 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
238d0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
238e0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
238f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
23900 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a  .case OP_Rewind:
23910 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
23920 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
23930 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
23940 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
23950 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
23960 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
23970 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
23980 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
23990 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
239a0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
239b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
239c0 73 53 6f 72 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f  sSorter==(pOp->o
239d0 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
239e0 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d  Sort) );.  res =
239f0 20 31 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74   1;.  if( isSort
23a00 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63  er(pC) ){.    rc
23a10 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
23a20 72 74 65 72 52 65 77 69 6e 64 28 64 62 2c 20 70  rterRewind(db, p
23a30 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73  C, &res);.  }els
23a40 65 7b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70  e{.    pCrsr = p
23a50 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20  C->pCursor;.    
23a60 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
23a70 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
23a80 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73  3BtreeFirst(pCrs
23a90 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43  r, &res);.    pC
23aa0 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65 73 3d  ->atFirst = res=
23ab0 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d  =0 ?1:0;.    pC-
23ac0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
23ad0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
23ae0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
23af0 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e  _STALE;.    pC->
23b00 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
23b10 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ;.  }.  pC->null
23b20 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
23b30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
23b40 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d  >0 && pOp->p2<p-
23b50 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72 65  >nOp );.  if( re
23b60 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
23b70 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
23b80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
23b90 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32  code: Next P1 P2
23ba0 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41   * P4 P5.**.** A
23bb0 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
23bc0 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
23bd0 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
23be0 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
23bf0 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
23c00 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
23c10 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
23c20 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
23c30 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
23c40 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
23c50 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
23c60 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
23c70 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
23c80 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
23c90 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
23ca0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
23cb0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
23cc0 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
23cd0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
23ce0 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 34  -table..**.** P4
23cf0 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
23d00 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
23d10 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
23d20 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
23d30 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
23d40 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  t()..**.** If P5
23d50 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
23d60 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
23d70 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
23d80 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
23d90 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
23da0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
23db0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
23dc0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
23dd0 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  Prev.*/./* Opcod
23de0 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 2a 20  e: Prev P1 P2 * 
23df0 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20  * P5.**.** Back 
23e00 75 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  up cursor P1 so 
23e10 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
23e20 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b  o the previous k
23e30 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
23e40 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
23e50 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
23e60 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20   is no previous 
23e70 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
23e80 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
23e90 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
23ea0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
23eb0 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
23ec0 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73  ursor backup was
23ed0 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
23ee0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
23ef0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
23f00 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
23f10 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
23f20 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
23f30 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
23f40 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20  P4 is always of 
23f50 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e  type P4_ADVANCE.
23f60 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f   The function po
23f70 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a  inter points to.
23f80 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  ** sqlite3BtreeP
23f90 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a  revious()..**.**
23fa0 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69   If P5 is positi
23fb0 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20  ve and the jump 
23fc0 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65  is taken, then e
23fd0 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20  vent counter.** 
23fe0 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74  number P5-1 in t
23ff0 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
24000 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  ement is increme
24010 6e 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nted..*/.case OP
24020 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 20 20 20  _SorterNext:    
24030 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65  /* jump */.#ifde
24040 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45  f SQLITE_OMIT_ME
24050 52 47 45 5f 53 4f 52 54 0a 20 20 70 4f 70 2d 3e  RGE_SORT.  pOp->
24060 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 4e 65 78 74  opcode = OP_Next
24070 3b 0a 23 65 6e 64 69 66 0a 63 61 73 65 20 4f 50  ;.#endif.case OP
24080 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
24090 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
240a0 4f 50 5f 4e 65 78 74 3a 20 7b 20 20 20 20 20 20  OP_Next: {      
240b0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
240c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
240d0 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 43 48 45   int res;..  CHE
240e0 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
240f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
24100 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
24110 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
24120 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24130 35 3c 3d 41 72 72 61 79 53 69 7a 65 28 70 2d 3e  5<=ArraySize(p->
24140 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70  aCounter) );.  p
24150 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
24160 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d  ->p1];.  if( pC=
24170 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  =0 ){.    break;
24180 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20    /* See ticket 
24190 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 61  #2273 */.  }.  a
241a0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72  ssert( pC->isSor
241b0 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  ter==(pOp->opcod
241c0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74  e==OP_SorterNext
241d0 29 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f 72  ) );.  if( isSor
241e0 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 61  ter(pC) ){.    a
241f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
24200 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 4e 65 78  de==OP_SorterNex
24210 74 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  t );.    rc = sq
24220 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e  lite3VdbeSorterN
24230 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65 73  ext(db, pC, &res
24240 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
24250 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 61 73 73  res = 1;.    ass
24260 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
24270 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
24280 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
24290 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 61 73 73  ursor );.    ass
242a0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
242b0 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70  !=OP_Next || pOp
242c0 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
242d0 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20  qlite3BtreeNext 
242e0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
242f0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
24300 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  rev || pOp->p4.x
24310 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
24320 42 74 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b  BtreePrevious );
24330 0a 20 20 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70  .    rc = pOp->p
24340 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 70  4.xAdvance(pC->p
24350 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
24360 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   }.  pC->nullRow
24370 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43   = (u8)res;.  pC
24380 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
24390 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
243a0 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
243b0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
243c0 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  1;.    if( pOp->
243d0 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65 72  p5 ) p->aCounter
243e0 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23  [pOp->p5-1]++;.#
243f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
24400 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65  T.    sqlite3_se
24410 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
24420 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e 72  ndif.  }.  pC->r
24430 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
24440 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
24450 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72  Opcode: IdxInser
24460 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  t P1 P2 P3 * P5.
24470 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
24480 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69  2 holds an SQL i
24490 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
244a0 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
244b0 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
244c0 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
244d0 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
244e0 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
244f0 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
24500 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
24510 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61  l..**.** P3 is a
24520 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69   flag that provi
24530 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68  des a hint to th
24540 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74  e b-tree layer t
24550 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65  hat this.** inse
24560 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  rt is likely to 
24570 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a  be an append..**
24580 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
24590 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
245a0 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68  for indices.  Th
245b0 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
245c0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
245d0 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73  tables is OP_Ins
245e0 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ert..*/.case OP_
245f0 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20 20  SorterInsert:   
24600 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 23 69      /* in2 */.#i
24610 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
24620 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 20 20 70 4f  _MERGE_SORT.  pO
24630 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 49  p->opcode = OP_I
24640 64 78 49 6e 73 65 72 74 3b 0a 23 65 6e 64 69 66  dxInsert;.#endif
24650 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65  .case OP_IdxInse
24660 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  rt: {        /* 
24670 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
24680 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
24690 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
246a0 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20  t nKey;.  const 
246b0 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61  char *zKey;..  a
246c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
246d0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
246e0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
246f0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
24700 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
24710 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
24720 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d  ( pC->isSorter==
24730 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
24740 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29  _SorterInsert) )
24750 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
24760 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
24770 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73  ert( pIn2->flags
24780 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
24790 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
247a0 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41  rsor;.  if( ALWA
247b0 59 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a  YS(pCrsr!=0) ){.
247c0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
247d0 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
247e0 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
247f0 62 28 70 49 6e 32 29 3b 0a 20 20 20 20 69 66 28  b(pIn2);.    if(
24800 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
24810 7b 0a 20 20 20 20 20 20 69 66 28 20 69 73 53 6f  {.      if( isSo
24820 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
24830 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
24840 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28  VdbeSorterWrite(
24850 64 62 2c 20 70 43 2c 20 70 49 6e 32 29 3b 0a 20  db, pC, pIn2);. 
24860 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
24870 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d      nKey = pIn2-
24880 3e 6e 3b 0a 20 20 20 20 20 20 20 20 7a 4b 65 79  >n;.        zKey
24890 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20   = pIn2->z;.    
248a0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
248b0 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 72 73  BtreeInsert(pCrs
248c0 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22  r, zKey, nKey, "
248d0 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33  ", 0, 0, pOp->p3
248e0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  , .            (
248f0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
24900 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29  G_USESEEKRESULT)
24910 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c   ? pC->seekResul
24920 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20 20  t : 0).         
24930 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73     );.        as
24940 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
24950 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
24960 20 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65         pC->cache
24970 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
24980 54 41 4c 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20  TALE;.      }.  
24990 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
249a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
249b0 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50  dxDelete P1 P2 P
249c0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3 * *.**.** The 
249d0 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65  content of P3 re
249e0 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
249f0 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20   at register P2 
24a00 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63  form.** an unpac
24a10 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54  ked index key. T
24a20 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76  his opcode remov
24a30 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72  es that entry fr
24a40 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78  om the .** index
24a50 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
24a60 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
24a70 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20  _IdxDelete: {.  
24a80 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
24a90 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
24aa0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
24ab0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
24ac0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
24ad0 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p3>0 );.  asse
24ae0 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  rt( pOp->p2>0 &&
24af0 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33   pOp->p2+pOp->p3
24b00 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20  <=p->nMem+1 );. 
24b10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24b20 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
24b30 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
24b40 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
24b50 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
24b60 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
24b70 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
24b80 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
24b90 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72  rsr!=0) ){.    r
24ba0 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
24bb0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
24bc0 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
24bd0 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61  p->p3;.    r.fla
24be0 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d  gs = 0;.    r.aM
24bf0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
24c00 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p2];.#ifdef SQLI
24c10 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69  TE_DEBUG.    { i
24c20 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
24c30 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
24c40 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
24c50 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
24c60 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72  ; }.#endif.    r
24c70 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24c80 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
24c90 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
24ca0 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72  &res);.    if( r
24cb0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
24cc0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
24cd0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
24ce0 65 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a  eDelete(pCrsr);.
24cf0 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
24d00 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
24d10 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70  veto==0 );.    p
24d20 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
24d30 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
24d40 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
24d50 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69   Opcode: IdxRowi
24d60 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
24d70 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
24d80 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
24d90 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
24da0 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e  he last entry in
24db0 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a   the record at.*
24dc0 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * the end of the
24dd0 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74   index key point
24de0 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20  ed to by cursor 
24df0 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65  P1.  This intege
24e00 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74  r should be.** t
24e10 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
24e20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77  table entry to w
24e30 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20  hich this index 
24e40 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a  entry points..**
24e50 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f  .** See also: Ro
24e60 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e  wid, MakeRecord.
24e70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52  .*/.case OP_IdxR
24e80 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
24e90 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
24ea0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43  release */.  BtC
24eb0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
24ec0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
24ed0 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20    i64 rowid;..  
24ee0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
24ef0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
24f00 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
24f10 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
24f20 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
24f30 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
24f40 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
24f50 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
24f60 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20  MEM_Null;.  if( 
24f70 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
24f80 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
24f90 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
24fa0 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66  veto(pC);.    if
24fb0 28 20 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f  ( NEVER(rc) ) go
24fc0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
24fd0 65 72 72 6f 72 3b 0a 20 20 20 20 61 73 73 65 72  error;.    asser
24fe0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
24ff0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
25000 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
25010 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66  ble==0 );.    if
25020 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  ( !pC->nullRow )
25030 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
25040 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64  ite3VdbeIdxRowid
25050 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77  (db, pCrsr, &row
25060 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  id);.      if( r
25070 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
25080 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
25090 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
250a0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
250b0 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64  Out->u.i = rowid
250c0 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ;.      pOut->fl
250d0 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
250e0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
250f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
25100 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50  IdxGE P1 P2 P3 P
25110 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  4 P5.**.** The P
25120 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
25130 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
25140 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
25150 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
25160 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
25170 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  e ROWID.  Compar
25180 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
25190 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
251a0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
251b0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
251c0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
251d0 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74  g the ROWID on t
251e0 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
251f0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
25200 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61  ex entry is grea
25210 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
25220 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
25230 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20  ue.** then jump 
25240 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73  to P2.  Otherwis
25250 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
25260 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
25270 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
25280 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20   P5 is non-zero 
25290 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  then the key val
252a0 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64 20  ue is increased 
252b0 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a  by an epsilon .*
252c0 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63  * prior to the c
252d0 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73  omparison.  This
252e0 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65   make the opcode
252f0 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54   work like IdxGT
25300 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20   except.** that 
25310 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20  if the key from 
25320 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61  register P3 is a
25330 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b   prefix of the k
25340 65 79 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72  ey in the cursor
25350 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  ,.** the result 
25360 69 73 20 66 61 6c 73 65 20 77 68 65 72 65 61 73  is false whereas
25370 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75   it would be tru
25380 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f  e with IdxGT..*/
25390 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
253a0 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
253b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
253c0 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
253d0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
253e0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
253f0 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
25400 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f  hat omits the RO
25410 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  WID.  Compare th
25420 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
25430 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a  inst the index .
25440 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ** that P1 is cu
25450 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
25460 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
25470 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50  e ROWID on the P
25480 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49  1 index..**.** I
25490 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
254a0 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61  ntry is less tha
254b0 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  n the key value 
254c0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
254d0 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61  .** Otherwise fa
254e0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
254f0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
25500 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  on..**.** If P5 
25510 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e  is non-zero then
25520 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69   the key value i
25530 73 20 69 6e 63 72 65 61 73 65 64 20 62 79 20 61  s increased by a
25540 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20  n epsilon prior 
25550 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70 61  .** to the compa
25560 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b  rison.  This mak
25570 65 73 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f  es the opcode wo
25580 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a  rk like IdxLE..*
25590 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a  /.case OP_IdxLT:
255a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
255b0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  p */.case OP_Idx
255c0 47 45 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  GE: {        /* 
255d0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
255e0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
255f0 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
25600 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
25610 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
25620 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
25630 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
25640 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
25650 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
25660 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
25670 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a  C->isOrdered );.
25680 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d    if( ALWAYS(pC-
25690 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a  >pCursor!=0) ){.
256a0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
256b0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
256c0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
256d0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
256e0 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20  Op->p5==1 );.   
256f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
25700 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
25710 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  ;.    r.pKeyInfo
25720 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
25730 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
25740 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
25750 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
25760 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  ){.      r.flags
25770 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52   = UNPACKED_INCR
25780 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f 50  KEY | UNPACKED_P
25790 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20  REFIX_MATCH;.   
257a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e   }else{.      r.
257b0 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44  flags = UNPACKED
257c0 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20  _PREFIX_MATCH;. 
257d0 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20     }.    r.aMem 
257e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
257f0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
25800 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20  DEBUG.    { int 
25810 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
25820 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
25830 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
25840 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
25850 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d  .#endif.    rc =
25860 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b   sqlite3VdbeIdxK
25870 65 79 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72  eyCompare(pC, &r
25880 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
25890 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
258a0 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 20 20  _IdxLT ){.      
258b0 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20  res = -res;.    
258c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
258d0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
258e0 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20 20  ==OP_IdxGE );.  
258f0 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d      res++;.    }
25900 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 29  .    if( res>0 )
25910 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
25920 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d  ->p2 - 1 ;.    }
25930 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
25940 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74  ./* Opcode: Dest
25950 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  roy P1 P2 P3 * *
25960 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e  .**.** Delete an
25970 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
25980 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
25990 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
259a0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
259b0 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  ** file is given
259c0 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P1..**.** Th
259d0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65  e table being de
259e0 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68  stroyed is in th
259f0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
25a00 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20  file if P3==0.  
25a10 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e  If.** P3==1 then
25a20 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
25a30 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
25a40 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
25a50 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
25a60 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
25a70 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
25a80 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
25a90 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
25aa0 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
25ab0 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65  M is enabled the
25ac0 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  n it is possible
25ad0 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f   that another ro
25ae0 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74  ot page.** might
25af0 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74   be moved into t
25b00 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64  he newly deleted
25b10 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72   root page in or
25b20 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a  der to keep all.
25b30 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f  ** root pages co
25b40 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20  ntiguous at the 
25b50 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
25b60 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
25b70 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20  former.** value 
25b80 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  of the root page
25b90 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74   that moved - it
25ba0 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74  s value before t
25bb0 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64  he move occurred
25bc0 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20   -.** is stored 
25bd0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
25be0 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20   If no page .** 
25bf0 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71  movement was req
25c00 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74  uired (because t
25c10 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
25c20 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61  ropped was alrea
25c30 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20  dy .** the last 
25c40 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  one in the datab
25c50 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f  ase) then a zero
25c60 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
25c70 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66  gister P2..** If
25c80 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64   AUTOVACUUM is d
25c90 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a  isabled then a z
25ca0 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
25cb0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
25cc0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c  .** See also: Cl
25cd0 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ear.*/.case OP_D
25ce0 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a  estroy: {     /*
25cf0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
25d00 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64   */.  int iMoved
25d10 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20  ;.  int iCnt;.  
25d20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69  Vdbe *pVdbe;.  i
25d30 6e 74 20 69 44 62 3b 0a 23 69 66 6e 64 65 66 20  nt iDb;.#ifndef 
25d40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
25d50 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20  UALTABLE.  iCnt 
25d60 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65  = 0;.  for(pVdbe
25d70 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62  =db->pVdbe; pVdb
25d80 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62 65  e; pVdbe = pVdbe
25d90 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66  ->pNext){.    if
25da0 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d  ( pVdbe->magic==
25db0 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26  VDBE_MAGIC_RUN &
25dc0 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d  & pVdbe->inVtabM
25dd0 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65  ethod<2 && pVdbe
25de0 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20  ->pc>=0 ){.     
25df0 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20   iCnt++;.    }. 
25e00 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20   }.#else.  iCnt 
25e10 3d 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  = db->activeVdbe
25e20 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f  Cnt;.#endif.  pO
25e30 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
25e40 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74  Null;.  if( iCnt
25e50 3e 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  >1 ){.    rc = S
25e60 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20  QLITE_LOCKED;.  
25e70 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
25e80 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d   = OE_Abort;.  }
25e90 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20  else{.    iDb = 
25ea0 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73  pOp->p3;.    ass
25eb0 65 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a  ert( iCnt==1 );.
25ec0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e      assert( (p->
25ed0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
25ee0 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29  DbMask)1)<<iDb))
25ef0 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
25f00 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70  sqlite3BtreeDrop
25f10 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44  Table(db->aDb[iD
25f20 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  b].pBt, pOp->p1,
25f30 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70   &iMoved);.    p
25f40 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
25f50 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
25f60 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69  u.i = iMoved;.#i
25f70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25f80 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20  T_AUTOVACUUM.   
25f90 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
25fa0 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20  OK && iMoved!=0 
25fb0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
25fc0 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62  RootPageMoved(db
25fd0 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70  , iDb, iMoved, p
25fe0 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f  Op->p1);.      /
25ff0 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79  * All OP_Destroy
26000 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75   operations occu
26010 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74  r on the same bt
26020 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ree */.      ass
26030 65 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61  ert( resetSchema
26040 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65  OnFault==0 || re
26050 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
26060 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20  ==iDb+1 );.     
26070 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
26080 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20  ult = iDb+1;.   
26090 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
260a0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
260b0 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32  ode: Clear P1 P2
260c0 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P3.**.** Delete
260d0 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66   all contents of
260e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
260f0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
26100 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  se root page.** 
26110 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
26120 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
26130 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b   P1.  But, unlik
26140 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f  e Destroy, do no
26150 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20  t.** remove the 
26160 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66  table or index f
26170 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
26180 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   file..**.** The
26190 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
261a0 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ar is in the mai
261b0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
261c0 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P2==0.  If.**
261d0 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P2==1 then the 
261e0 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
261f0 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
26200 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
26210 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
26220 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
26230 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
26240 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
26250 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
26260 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69  f the P3 value i
26270 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
26280 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72   the table refer
26290 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61  red to must be a
262a0 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c  n.** intkey tabl
262b0 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c  e (an SQL table,
262c0 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20   not an index). 
262d0 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
262e0 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20   row change .** 
262f0 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  count is increme
26300 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
26310 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
26320 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
26330 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33  eared. .** If P3
26340 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
26350 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
26360 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20  value stored in 
26370 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a  register P3 is.*
26380 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74  * also increment
26390 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
263a0 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
263b0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
263c0 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  red..**.** See a
263d0 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a  lso: Destroy.*/.
263e0 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b  case OP_Clear: {
263f0 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a  .  int nChange;.
26400 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b   .  nChange = 0;
26410 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
26420 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
26430 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70  bMask)1)<<pOp->p
26440 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  2))!=0 );.  rc =
26450 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
26460 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64  arTable(.      d
26470 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
26480 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70  pBt, pOp->p1, (p
26490 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67  Op->p3 ? &nChang
264a0 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66  e : 0).  );.  if
264b0 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
264c0 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e   p->nChange += n
264d0 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20  Change;.    if( 
264e0 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
264f0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
26500 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
26510 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d  >p3]) );.      m
26520 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
26530 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
26540 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70  ]);.      aMem[p
26550 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e  Op->p3].u.i += n
26560 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20  Change;.    }.  
26570 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
26580 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54   Opcode: CreateT
26590 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  able P1 P2 * * *
265a0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
265b0 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74  a new table in t
265c0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
265d0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
265e0 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
265f0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
26600 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
26610 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
26620 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
26630 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
26640 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
26650 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
26660 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
26670 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  r P2.**.** The d
26680 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
26690 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e  n a table and an
266a0 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20   index is this: 
266b0 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a   A table must.**
266c0 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69   have a 4-byte i
266d0 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63  nteger key and c
266e0 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72  an have arbitrar
266f0 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65  y data.  An inde
26700 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69  x.** has an arbi
26710 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f  trary key but no
26720 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   data..**.** See
26730 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64   also: CreateInd
26740 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ex.*/./* Opcode:
26750 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20   CreateIndex P1 
26760 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
26770 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e  llocate a new in
26780 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  dex in the main 
26790 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
267a0 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
267b0 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
267c0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
267d0 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
267e0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
267f0 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
26800 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
26810 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
26820 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
26830 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
26840 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  .** See document
26850 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61  ation on OP_Crea
26860 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69  teTable for addi
26870 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
26880 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  on..*/.case OP_C
26890 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20  reateIndex:     
268a0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
268b0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73  rerelease */.cas
268c0 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  e OP_CreateTable
268d0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
268e0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
268f0 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20  */.  int pgno;. 
26900 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62   int flags;.  Db
26910 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d   *pDb;..  pgno =
26920 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
26930 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
26940 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
26950 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
26960 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
26970 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29  ask)1)<<pOp->p1)
26980 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  )!=0 );.  pDb = 
26990 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
269a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
269b0 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66  ->pBt!=0 );.  if
269c0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
269d0 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b  P_CreateTable ){
269e0 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20  .    /* flags = 
269f0 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f  BTREE_INTKEY; */
26a00 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52  .    flags = BTR
26a10 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c  EE_INTKEY;.  }el
26a20 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20  se{.    flags = 
26a30 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20  BTREE_BLOBKEY;. 
26a40 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
26a50 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
26a60 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e  e(pDb->pBt, &pgn
26a70 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75  o, flags);.  pOu
26a80 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20  t->u.i = pgno;. 
26a90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
26aa0 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d  code: ParseSchem
26ab0 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  a P1 * * P4 *.**
26ac0 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72  .** Read and par
26ad0 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66  se all entries f
26ae0 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  rom the SQLITE_M
26af0 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64  ASTER table of d
26b00 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68  atabase P1.** th
26b10 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48 45  at match the WHE
26b20 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a  RE clause P4. .*
26b30 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
26b40 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72   invokes the par
26b50 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  ser to create a 
26b60 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68  new virtual mach
26b70 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e  ine,.** then run
26b80 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61  s the new virtua
26b90 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69  l machine.  It i
26ba0 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72  s thus a re-entr
26bb0 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  ant opcode..*/.c
26bc0 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65  ase OP_ParseSche
26bd0 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b  ma: {.  int iDb;
26be0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
26bf0 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a  Master;.  char *
26c00 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61  zSql;.  InitData
26c10 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a   initData;..  /*
26c20 20 41 6e 79 20 70 72 65 70 61 72 65 64 20 73 74   Any prepared st
26c30 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76  atement that inv
26c40 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65  okes this opcode
26c50 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78   will hold mutex
26c60 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79  es.  ** on every
26c70 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69 73   btree.  This is
26c80 20 61 20 70 72 65 72 65 71 75 69 73 69 74 65 20   a prerequisite 
26c90 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20  for invoking .  
26ca0 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  ** sqlite3InitCa
26cb0 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23  llback()..  */.#
26cc0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
26cd0 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20  UG.  for(iDb=0; 
26ce0 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62  iDb<db->nDb; iDb
26cf0 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
26d00 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74   iDb==1 || sqlit
26d10 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65  e3BtreeHoldsMute
26d20 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  x(db->aDb[iDb].p
26d30 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  Bt) );.  }.#endi
26d40 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  f..  iDb = pOp->
26d50 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p1;.  assert( iD
26d60 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
26d70 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
26d80 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64   DbHasProperty(d
26d90 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d  b, iDb, DB_Schem
26da0 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a  aLoaded) );.  /*
26db0 20 55 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f   Used to be a co
26dc0 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20  nditional */ {. 
26dd0 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48     zMaster = SCH
26de0 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a  EMA_TABLE(iDb);.
26df0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20      initData.db 
26e00 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61  = db;.    initDa
26e10 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  ta.iDb = pOp->p1
26e20 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70  ;.    initData.p
26e30 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45  zErrMsg = &p->zE
26e40 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20  rrMsg;.    zSql 
26e50 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
26e60 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  (db,.       "SEL
26e70 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61  ECT name, rootpa
26e80 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71  ge, sql FROM '%q
26e90 27 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52  '.%s WHERE %s OR
26ea0 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20  DER BY rowid",. 
26eb0 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44        db->aDb[iD
26ec0 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65  b].zName, zMaste
26ed0 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  r, pOp->p4.z);. 
26ee0 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29     if( zSql==0 )
26ef0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
26f00 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d  ITE_NOMEM;.    }
26f10 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
26f20 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73  rt( db->init.bus
26f30 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62  y==0 );.      db
26f40 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b  ->init.busy = 1;
26f50 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e  .      initData.
26f60 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
26f70 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64        assert( !d
26f80 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
26f90 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
26fa0 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a  lite3_exec(db, z
26fb0 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74  Sql, sqlite3Init
26fc0 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44  Callback, &initD
26fd0 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  ata, 0);.      i
26fe0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
26ff0 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61   ) rc = initData
27000 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  .rc;.      sqlit
27010 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71  e3DbFree(db, zSq
27020 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e  l);.      db->in
27030 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20  it.busy = 0;.   
27040 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
27050 29 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e  ) sqlite3ResetIn
27060 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
27070 20 2d 31 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d   -1);.  if( rc==
27080 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
27090 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
270a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a  .  }.  break;  .
270b0 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
270c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
270d0 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  YZE)./* Opcode: 
270e0 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20  LoadAnalysis P1 
270f0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65  * * * *.**.** Re
27100 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  ad the sqlite_st
27110 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61  at1 table for da
27120 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f  tabase P1 and lo
27130 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  ad the content.*
27140 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20  * of that table 
27150 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61  into the interna
27160 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62  l index hash tab
27170 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  le.  This will c
27180 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c  ause.** the anal
27190 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20  ysis to be used 
271a0 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61  when preparing a
271b0 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75  ll subsequent qu
271c0 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eries..*/.case O
271d0 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20  P_LoadAnalysis: 
271e0 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
271f0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
27200 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72  1<db->nDb );.  r
27210 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  c = sqlite3Analy
27220 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d  sisLoad(db, pOp-
27230 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20  >p1);.  break;  
27240 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  .}.#endif /* !de
27250 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
27260 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f  T_ANALYZE) */../
27270 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61  * Opcode: DropTa
27280 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ble P1 * * P4 *.
27290 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
272a0 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
272b0 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
272c0 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
272d0 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65  ibe.** the table
272e0 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
272f0 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
27300 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
27310 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72  a table.** is dr
27320 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
27330 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
27340 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
27350 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
27360 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
27370 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
27380 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
27390 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73  DropTable: {.  s
273a0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
273b0 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70  eleteTable(db, p
273c0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
273d0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
273e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49  /* Opcode: DropI
273f0 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a  ndex P1 * * P4 *
27400 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
27410 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
27420 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
27430 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
27440 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65  ribe.** the inde
27450 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  x named P4 in da
27460 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
27470 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
27480 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20   an index.** is 
27490 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
274a0 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
274b0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
274c0 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
274d0 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
274e0 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
274f0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
27500 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20  P_DropIndex: {. 
27510 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
27520 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c  dDeleteIndex(db,
27530 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
27540 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
27550 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
27560 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20  pTrigger P1 * * 
27570 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
27580 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
27590 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
275a0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
275b0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
275c0 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34  trigger named P4
275d0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
275e0 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
275f0 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72   after a trigger
27600 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
27610 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
27620 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
27630 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
27640 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
27650 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
27660 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
27670 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69  .case OP_DropTri
27680 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65  gger: {.  sqlite
27690 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
276a0 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d  Trigger(db, pOp-
276b0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
276c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
276d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
276e0 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
276f0 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  K./* Opcode: Int
27700 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50  egrityCk P1 P2 P
27710 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20  3 * P5.**.** Do 
27720 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74  an analysis of t
27730 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
27740 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f  n database.  Sto
27750 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  re in.** registe
27760 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66  r P1 the text of
27770 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
27780 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79  e describing any
27790 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66   problems..** If
277a0 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65   no problems are
277b0 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20   found, store a 
277c0 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72  NULL in register
277d0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   P1..**.** The r
277e0 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
277f0 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ins the maximum 
27800 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65  number of allowe
27810 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20  d errors..** At 
27820 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72  most reg(P3) err
27830 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f  ors will be repo
27840 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rted..** In othe
27850 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61  r words, the ana
27860 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73  lysis stops as s
27870 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65  oon as reg(P1) e
27880 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65  rrors are .** se
27890 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20  en.  Reg(P1) is 
278a0 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
278b0 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   number of error
278c0 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a  s remaining..**.
278d0 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
278e0 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20   numbers of all 
278f0 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61  tables in the da
27900 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67  tabase are integ
27910 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  er.** stored in 
27920 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b  reg(P1), reg(P1+
27930 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e  1), reg(P1+2), .
27940 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20 50  ...  There are P
27950 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61  2 tables.** tota
27960 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  l..**.** If P5 i
27970 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20  s not zero, the 
27980 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e  check is done on
27990 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
279a0 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c  atabase.** file,
279b0 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61   not the main da
279c0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
279d0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
279e0 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
279f0 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74  ent the integrit
27a00 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a  y_check pragma..
27a10 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
27a20 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20  rityCk: {.  int 
27a30 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e  nRoot;      /* N
27a40 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
27a50 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62  to check.  (Numb
27a60 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73  er of root pages
27a70 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f  .) */.  int *aRo
27a80 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ot;     /* Array
27a90 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d   of rootpage num
27aa0 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20  bers for tables 
27ab0 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f  to be checked */
27ac0 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20  .  int j;       
27ad0 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
27ae0 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  er */.  int nErr
27af0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
27b00 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f  r of errors repo
27b10 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rted */.  char *
27b20 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78  z;        /* Tex
27b30 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72  t of the error r
27b40 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eport */.  Mem *
27b50 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65  pnErr;     /* Re
27b60 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74  gister keeping t
27b70 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72  rack of errors r
27b80 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20  emaining */.  . 
27b90 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32   nRoot = pOp->p2
27ba0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f  ;.  assert( nRoo
27bb0 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d  t>0 );.  aRoot =
27bc0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
27bd0 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69  Raw(db, sizeof(i
27be0 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b  nt)*(nRoot+1) );
27bf0 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20  .  if( aRoot==0 
27c00 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
27c10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
27c20 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
27c30 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72  ->nMem );.  pnEr
27c40 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  r = &aMem[pOp->p
27c50 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
27c60 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
27c70 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
27c80 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
27c90 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
27ca0 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
27cb0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
27cc0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
27cd0 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b  j=0; j<nRoot; j+
27ce0 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d  +){.    aRoot[j]
27cf0 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56   = (int)sqlite3V
27d00 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e  dbeIntValue(&pIn
27d10 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f  1[j]);.  }.  aRo
27d20 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73  ot[j] = 0;.  ass
27d30 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d  ert( pOp->p5<db-
27d40 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
27d50 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
27d60 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
27d70 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b  <pOp->p5))!=0 );
27d80 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
27d90 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
27da0 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
27db0 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e  5].pBt, aRoot, n
27dc0 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Root,.          
27dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27de0 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72         (int)pnEr
27df0 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a  r->u.i, &nErr);.
27e00 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
27e10 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e  db, aRoot);.  pn
27e20 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
27e30 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
27e40 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
27e50 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29  .  if( nErr==0 )
27e60 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d  {.    assert( z=
27e70 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  =0 );.  }else if
27e80 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ( z==0 ){.    go
27e90 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c  to no_mem;.  }el
27ea0 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
27eb0 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
27ec0 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
27ed0 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
27ee0 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
27ef0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
27f00 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
27f10 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
27f20 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
27f30 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
27f40 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
27f50 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
27f60 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
27f70 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
27f80 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
27f90 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
27fa0 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
27fb0 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
27fc0 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
27fd0 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
27fe0 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
27ff0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
28000 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
28010 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
28020 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
28030 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
28040 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
28050 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
28060 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
28070 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
28080 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
28090 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
280a0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
280b0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
280c0 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
280d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
280e0 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
280f0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
28100 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
28110 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
28120 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
28130 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
28140 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
28150 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
28160 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28170 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
28180 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   P3 * *.**.** Ex
28190 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
281a0 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f  st value from bo
281b0 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61  olean index P1 a
281c0 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
281d0 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
281e0 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62  er P3.  Or, if b
281f0 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
28200 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70  is initially emp
28210 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20  ty, leave P3.** 
28220 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75  unchanged and ju
28230 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
28240 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
28250 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20  _RowSetRead: {  
28260 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
28270 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  1, out3 */.  i64
28280 20 76 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46 4f   val;.  CHECK_FO
28290 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  R_INTERRUPT;.  p
282a0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
282b0 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
282c0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
282d0 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c  owSet)==0 .   ||
282e0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
282f0 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  xt(pIn1->u.pRowS
28300 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29  et, &val)==0.  )
28310 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f  {.    /* The boo
28320 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d  lean index is em
28330 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  pty */.    sqlit
28340 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
28350 28 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d  (pIn1);.    pc =
28360 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
28370 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20  }else{.    /* A 
28380 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64  value was pulled
28390 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20   from the index 
283a0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
283b0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
283c0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
283d0 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  l);.  }.  break;
283e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
283f0 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20  owSetTest P1 P2 
28400 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69  P3 P4.**.** Regi
28410 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d  ster P3 is assum
28420 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d  ed to hold a 64-
28430 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
28440 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50  e. If register P
28450 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20  1.** contains a 
28460 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e  RowSet object an
28470 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62  d that RowSet ob
28480 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  ject contains.**
28490 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20   the value held 
284a0 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72  in P3, jump to r
284b0 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65  egister P2. Othe
284c0 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68  rwise, insert th
284d0 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20  e.** integer in 
284e0 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53  P3 into the RowS
284f0 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  et and continue 
28500 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78  on to the.** nex
28510 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  t opcode..**.** 
28520 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  The RowSet objec
28530 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66  t is optimized f
28540 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72  or the case wher
28550 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74  e successive set
28560 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  s.** of integers
28570 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74  , where each set
28580 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70   contains no dup
28590 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65  licates. Each se
285a0 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69  t.** of values i
285b0 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
285c0 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75  a unique P4 valu
285d0 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74  e. The first set
285e0 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34  .** must have P4
285f0 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73  ==0, the final s
28600 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75  et P4=-1.  P4 mu
28610 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20  st be either -1 
28620 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69  or.** non-negati
28630 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67  ve.  For non-neg
28640 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20  ative values of 
28650 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65  P4 only the lowe
28660 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20  r 4.** bits are 
28670 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a  significant..**.
28680 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f  ** This allows o
28690 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61  ptimizations: (a
286a0 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65  ) when P4==0 the
286b0 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
286c0 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77   test.** the row
286d0 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50  set object for P
286e0 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72  3, as it is guar
286f0 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f  anteed not to co
28700 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29  ntain it,.** (b)
28710 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65   when P4==-1 the
28720 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
28730 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75   insert the valu
28740 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a  e, as it will.**
28750 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64   never be tested
28760 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68   for, and (c) wh
28770 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  en a value that 
28780 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  is part of set X
28790 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c   is.** inserted,
287a0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
287b0 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73  d to search to s
287c0 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76  ee if the same v
287d0 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76  alue was.** prev
287e0 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20  iously inserted 
287f0 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  as part of set X
28800 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73   (only if it was
28810 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69   previously.** i
28820 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
28830 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65  of some other se
28840 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  t)..*/.case OP_R
28850 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20  owSetTest: {    
28860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28870 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69   /* jump, in1, i
28880 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74  n3 */.  int iSet
28890 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a  ;.  int exists;.
288a0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
288b0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
288c0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
288d0 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d  ];.  iSet = pOp-
288e0 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  >p4.i;.  assert(
288f0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn3->flags&MEM
28900 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  _Int );..  /* If
28910 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69   there is anythi
28920 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  ng other than a 
28930 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e  rowset object in
28940 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c   memory cell P1,
28950 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20  .  ** delete it 
28960 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  now and initiali
28970 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d  ze P1 with an em
28980 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a  pty rowset.  */.
28990 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
289a0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
289b0 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
289c0 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
289d0 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
289e0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
289f0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
28a00 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
28a10 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
28a20 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
28a30 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
28a40 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65   iSet==-1 || iSe
28a50 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53  t>=0 );.  if( iS
28a60 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73  et ){.    exists
28a70 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74   = sqlite3RowSet
28a80 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Test(pIn1->u.pRo
28a90 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20  wSet, .         
28aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ab0 20 20 20 20 20 20 28 75 38 29 28 69 53 65 74 3e        (u8)(iSet>
28ac0 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78 66 20  =0 ? iSet & 0xf 
28ad0 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20  : 0xff),.       
28ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28af0 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e          pIn3->u.
28b00 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73  i);.    if( exis
28b10 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ts ){.      pc =
28b20 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
28b30 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
28b40 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
28b50 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
28b60 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
28b70 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
28b80 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20  In3->u.i);.  }. 
28b90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
28ba0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
28bb0 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f  TRIGGER../* Opco
28bc0 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50  de: Program P1 P
28bd0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
28be0 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67  Execute the trig
28bf0 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73  ger program pass
28c00 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50  ed as P4 (type P
28c10 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a  4_SUBPROGRAM). .
28c20 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e  **.** P1 contain
28c30 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
28c40 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
28c50 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
28c60 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20  he first memory 
28c70 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61  .** cell in an a
28c80 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75  rray of values u
28c90 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73  sed as arguments
28ca0 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67   to the sub-prog
28cb0 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74  ram. P2 .** cont
28cc0 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
28cd0 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74   to jump to if t
28ce0 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  he sub-program t
28cf0 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20  hrows an IGNORE 
28d00 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73  .** exception us
28d10 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20  ing the RAISE() 
28d20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74  function. Regist
28d30 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
28d40 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f  he address .** o
28d50 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  f a memory cell 
28d60 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72  in this (the par
28d70 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20  ent) VM that is 
28d80 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65  used to allocate
28d90 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
28da0 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
28db0 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74  sub-vdbe at runt
28dc0 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ime..**.** P4 is
28dd0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
28de0 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20  e VM containing 
28df0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
28e00 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ram..*/.case OP_
28e10 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20  Program: {      
28e20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
28e30 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
28e40 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
28e50 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73   of memory regis
28e60 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f  ters for sub-pro
28e70 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  gram */.  int nB
28e80 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
28e90 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75    /* Bytes of ru
28ea0 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75  ntime space requ
28eb0 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f  ired for sub-pro
28ec0 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  gram */.  Mem *p
28ed0 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Rt;             
28ee0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
28ef0 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d   allocate runtim
28f00 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d  e space */.  Mem
28f10 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
28f20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
28f30 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
28f40 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a  memory cells */.
28f50 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20    Mem *pEnd;    
28f60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
28f70 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  t memory cell in
28f80 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20   new array */.  
28f90 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
28fa0 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76  e;      /* New v
28fb0 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65  dbe frame to exe
28fc0 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62  cute in */.  Sub
28fd0 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
28fe0 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67  m;   /* Sub-prog
28ff0 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a  ram to execute *
29000 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20  /.  void *t;    
29010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
29020 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67  oken identifying
29030 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70   trigger */..  p
29040 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70  Program = pOp->p
29050 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52  4.pProgram;.  pR
29060 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
29070 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50  3];.  assert( pP
29080 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b  rogram->nOp>0 );
29090 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  .  .  /* If the 
290a0 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  p5 flag is clear
290b0 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
290c0 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
290d0 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a  riggers is .  **
290e0 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61   disabled for ba
290f0 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62  ckwards compatib
29100 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74  ility (p5 is set
29110 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f   if this sub-pro
29120 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61  gram.  ** is rea
29130 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e  lly a trigger, n
29140 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  ot a foreign key
29150 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65   action, and the
29160 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61   flag set.  ** a
29170 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68  nd cleared by th
29180 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73  e "PRAGMA recurs
29190 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f  ive_triggers" co
291a0 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e  mmand is clear).
291b0 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69  .  ** .  ** It i
291c0 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  s recursive invo
291d0 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
291e0 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c  rs, at the SQL l
291f0 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20  evel, that is . 
29200 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e   ** disabled. In
29210 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69   some cases a si
29220 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79  ngle trigger may
29230 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74   generate more t
29240 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75  han one .  ** Su
29250 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65  bProgram (if the
29260 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20   trigger may be 
29270 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f  executed with mo
29280 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66  re than one diff
29290 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43  erent .  ** ON C
292a0 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
292b0 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73  m). SubProgram s
292c0 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69  tructures associ
292d0 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a  ated with a.  **
292e0 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
292f0 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d  all have the sam
29300 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
29310 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e  SubProgram.token
29320 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e   .  ** variable.
29330 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
29340 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50  p5 ){.    t = pP
29350 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20  rogram->token;. 
29360 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
29370 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20  >pFrame; pFrame 
29380 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e  && pFrame->token
29390 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  !=t; pFrame=pFra
293a0 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
293b0 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62    if( pFrame ) b
293c0 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
293d0 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e   p->nFrame>=db->
293e0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
293f0 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54  MIT_TRIGGER_DEPT
29400 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  H] ){.    rc = S
29410 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
29420 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
29430 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
29440 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76  b, "too many lev
29450 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72  els of trigger r
29460 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20  ecursion");.    
29470 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
29480 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73   Register pRt is
29490 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
294a0 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
294b0 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73  ed to save the s
294c0 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65  tate.  ** of the
294d0 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d   current program
294e0 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79  , and the memory
294f0 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e   required at run
29500 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a  time to execute.
29510 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72    ** the trigger
29520 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69   program. If thi
29530 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65  s trigger has be
29540 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c  en fired before,
29550 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20   then pRt .  ** 
29560 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  is already alloc
29570 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ated. Otherwise,
29580 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74   it must be init
29590 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69  ialized.  */.  i
295a0 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d  f( (pRt->flags&M
295b0 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a  EM_Frame)==0 ){.
295c0 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61      /* SubProgra
295d0 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f  m.nMem is set to
295e0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
295f0 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
29600 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   by the .    ** 
29610 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69  program stored i
29620 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70  n SubProgram.aOp
29630 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65  . As well as the
29640 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20  se, one memory. 
29650 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65     ** cell is re
29660 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20  quired for each 
29670 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
29680 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20  he program. Set 
29690 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72  local.    ** var
296a0 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20  iable nMem (and 
296b0 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65  later, VdbeFrame
296c0 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74  .nChildMem) to t
296d0 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  his value..    *
296e0 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72  /.    nMem = pPr
296f0 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50  ogram->nMem + pP
29700 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
29710 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38    nByte = ROUND8
29720 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d  (sizeof(VdbeFram
29730 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)).            
29740 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f    + nMem * sizeo
29750 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20  f(Mem).         
29760 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
29770 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56  >nCsr * sizeof(V
29780 64 62 65 43 75 72 73 6f 72 20 2a 29 0a 20 20 20  dbeCursor *).   
29790 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
297a0 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73  ogram->nOnce * s
297b0 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20 20 20 70  izeof(u8);.    p
297c0 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
297d0 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
297e0 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
297f0 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
29800 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
29810 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
29820 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
29830 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
29840 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a  gs = MEM_Frame;.
29850 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d      pRt->u.pFram
29860 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20  e = pFrame;..   
29870 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a   pFrame->v = p;.
29880 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
29890 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20  ldMem = nMem;.  
298a0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
298b0 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Csr = pProgram->
298c0 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  nCsr;.    pFrame
298d0 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70  ->pc = pc;.    p
298e0 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d  Frame->aMem = p-
298f0 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >aMem;.    pFram
29900 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65  e->nMem = p->nMe
29910 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  m;.    pFrame->a
29920 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b  pCsr = p->apCsr;
29930 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75  .    pFrame->nCu
29940 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f  rsor = p->nCurso
29950 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  r;.    pFrame->a
29960 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
29970 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70   pFrame->nOp = p
29980 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->nOp;.    pFram
29990 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67  e->token = pProg
299a0 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
299b0 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61  pFrame->aOnceFla
299c0 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  g = p->aOnceFlag
299d0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
299e0 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e  nceFlag = p->nOn
299f0 63 65 46 6c 61 67 3b 0a 0a 20 20 20 20 70 45 6e  ceFlag;..    pEn
29a00 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  d = &VdbeFrameMe
29a10 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65  m(pFrame)[pFrame
29a20 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20  ->nChildMem];.  
29a30 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46    for(pMem=VdbeF
29a40 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
29a50 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65   pMem!=pEnd; pMe
29a60 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d  m++){.      pMem
29a70 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
29a80 76 61 6c 69 64 3b 0a 20 20 20 20 20 20 70 4d 65  valid;.      pMe
29a90 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  m->db = db;.    
29aa0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  }.  }else{.    p
29ab0 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70  Frame = pRt->u.p
29ac0 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72  Frame;.    asser
29ad0 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65  t( pProgram->nMe
29ae0 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  m+pProgram->nCsr
29af0 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
29b00 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Mem );.    asser
29b10 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  t( pProgram->nCs
29b20 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
29b30 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65  dCsr );.    asse
29b40 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e  rt( pc==pFrame->
29b50 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e  pc );.  }..  p->
29b60 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61  nFrame++;.  pFra
29b70 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d  me->pParent = p-
29b80 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d  >pFrame;.  pFram
29b90 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  e->lastRowid = l
29ba0 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61  astRowid;.  pFra
29bb0 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d  me->nChange = p-
29bc0 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e  >nChange;.  p->n
29bd0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d  Change = 0;.  p-
29be0 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
29bf0 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d  ;.  p->aMem = aM
29c00 65 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d  em = &VdbeFrameM
29c10 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a  em(pFrame)[-1];.
29c20 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61    p->nMem = pFra
29c30 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20  me->nChildMem;. 
29c40 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75   p->nCursor = (u
29c50 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  16)pFrame->nChil
29c60 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72  dCsr;.  p->apCsr
29c70 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a   = (VdbeCursor *
29c80 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b  *)&aMem[p->nMem+
29c90 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61  1];.  p->aOp = a
29ca0 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61  Op = pProgram->a
29cb0 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70  Op;.  p->nOp = p
29cc0 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20  Program->nOp;.  
29cd0 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28  p->aOnceFlag = (
29ce0 75 38 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70  u8 *)&p->apCsr[p
29cf0 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d  ->nCursor];.  p-
29d00 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50 72  >nOnceFlag = pPr
29d10 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20  ogram->nOnce;.  
29d20 70 63 20 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73 65  pc = -1;.  memse
29d30 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20  t(p->aOnceFlag, 
29d40 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29  0, p->nOnceFlag)
29d50 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
29d60 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20  * Opcode: Param 
29d70 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
29d80 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
29d90 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65   only ever prese
29da0 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61  nt in sub-progra
29db0 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68  ms called via th
29dc0 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d  e .** OP_Program
29dd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f   instruction. Co
29de0 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65  py a value curre
29df0 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ntly stored in a
29e00 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
29e10 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
29e20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74  (parent) frame t
29e30 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65  o cell P2 in the
29e40 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20   current frames 
29e50 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63  .** address spac
29e60 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  e. This is used 
29e70 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
29e80 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68  ams to access th
29e90 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20  e new.* .** and 
29ea0 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a  old.* values..**
29eb0 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20  .** The address 
29ec0 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74  of the cell in t
29ed0 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20  he parent frame 
29ee0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
29ef0 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76   adding.** the v
29f00 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
29f10 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76  rgument to the v
29f20 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
29f30 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a  rgument to the.*
29f40 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  * calling OP_Pro
29f50 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
29f60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
29f70 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  am: {           
29f80 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
29f90 73 65 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  se */.  VdbeFram
29fa0 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d  e *pFrame;.  Mem
29fb0 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20   *pIn;.  pFrame 
29fc0 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70  = p->pFrame;.  p
29fd0 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  In = &pFrame->aM
29fe0 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72  em[pOp->p1 + pFr
29ff0 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d  ame->aOp[pFrame-
2a000 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73  >pc].p1];   .  s
2a010 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
2a020 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
2a030 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  In, MEM_Ephem);.
2a040 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64    break;.}..#end
2a050 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
2a060 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2a070 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  R */..#ifndef SQ
2a080 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2a090 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a  N_KEY./* Opcode:
2a0a0 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32   FkCounter P1 P2
2a0b0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63   * * *.**.** Inc
2a0c0 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72  rement a "constr
2a0d0 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79  aint counter" by
2a0e0 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e   P2 (P2 may be n
2a0f0 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74  egative or posit
2a100 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69  ive)..** If P1 i
2a110 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20  s non-zero, the 
2a120 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
2a130 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  int counter is i
2a140 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28  ncremented .** (
2a150 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
2a160 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2a170 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  ). Otherwise, if
2a180 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
2a190 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63   .** statement c
2a1a0 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d  ounter is increm
2a1b0 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65  ented (immediate
2a1c0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2a1d0 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61  straints)..*/.ca
2a1e0 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a  se OP_FkCounter:
2a1f0 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31   {.  if( pOp->p1
2a200 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
2a210 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70  erredCons += pOp
2a220 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->p2;.  }else{. 
2a230 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61     p->nFkConstra
2a240 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  int += pOp->p2;.
2a250 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2a260 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a  /* Opcode: FkIfZ
2a270 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
2a280 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2a290 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f 72  e tests if a for
2a2a0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2a2b0 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63  int-counter is c
2a2c0 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a  urrently zero..*
2a2d0 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f  * If so, jump to
2a2e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
2a2f0 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
2a300 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2a310 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63  next .** instruc
2a320 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
2a330 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
2a340 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hen the jump is 
2a350 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74  taken if the dat
2a360 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
2a370 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a  -counter.** is z
2a380 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61  ero (the one tha
2a390 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65  t counts deferre
2a3a0 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  d constraint vio
2a3b0 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20  lations). If P1 
2a3c0 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20  is.** zero, the 
2a3d0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
2a3e0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63   the statement c
2a3f0 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
2a400 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d  r is zero.** (im
2a410 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
2a420 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  key constraint v
2a430 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63  iolations)..*/.c
2a440 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a  ase OP_FkIfZero:
2a450 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75   {         /* ju
2a460 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  mp */.  if( pOp-
2a470 3e 70 31 20 29 7b 0a 20 20 20 20 69 66 28 20 64  >p1 ){.    if( d
2a480 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
2a490 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  ==0 ) pc = pOp->
2a4a0 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  p2-1;.  }else{. 
2a4b0 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e     if( p->nFkCon
2a4c0 73 74 72 61 69 6e 74 3d 3d 30 20 29 20 70 63 20  straint==0 ) pc 
2a4d0 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
2a4e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2a4f0 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
2a500 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2a510 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65  N_KEY */..#ifnde
2a520 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
2a530 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f  TOINCREMENT./* O
2a540 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31  pcode: MemMax P1
2a550 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2a560 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P1 is a register
2a570 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
2a580 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74  me of this VM (t
2a590 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73  he root frame is
2a5a0 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72  .** different fr
2a5b0 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  om the current f
2a5c0 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73  rame if this ins
2a5d0 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e  truction is bein
2a5e0 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69  g executed.** wi
2a5f0 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72  thin a sub-progr
2a600 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c  am). Set the val
2a610 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2a620 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d  1 to the maximum
2a630 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72   of .** its curr
2a640 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68  ent value and th
2a650 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
2a660 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
2a670 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  is instruction t
2a680 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
2a690 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
2a6a0 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c  l is not initial
2a6b0 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ly.** an integer
2a6c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d  ..*/.case OP_Mem
2a6d0 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Max: {        /*
2a6e0 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70   in2 */.  Mem *p
2a6f0 49 6e 31 3b 0a 20 20 56 64 62 65 46 72 61 6d 65  In1;.  VdbeFrame
2a700 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20   *pFrame;.  if( 
2a710 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
2a720 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
2a730 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
2a740 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
2a750 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
2a760 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72  .    pIn1 = &pFr
2a770 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
2a780 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
2a790 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2a7a0 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73  p->p1];.  }.  as
2a7b0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2a7c0 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69  (pIn1) );.  sqli
2a7d0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
2a7e0 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
2a7f0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
2a800 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
2a810 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
2a820 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn2);.  if( pIn
2a830 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69  1->u.i<pIn2->u.i
2a840 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
2a850 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
2a860 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2a870 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2a880 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
2a890 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
2a8a0 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20  IfPos P1 P2 * * 
2a8b0 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  *.**.** If the v
2a8c0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2a8d0 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
2a8e0 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ter, jump to P2.
2a8f0 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
2a900 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
2a910 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
2a920 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2a930 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
2a940 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2a950 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2a960 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
2a970 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
2a980 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
2a990 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2a9a0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2a9b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2a9c0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2a9d0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2a9e0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2a9f0 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  >0 ){.     pc = 
2aa00 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2aa10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2aa20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31  Opcode: IfNeg P1
2aa30 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2aa40 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
2aa50 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c  register P1 is l
2aa60 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a  ess than zero, j
2aa70 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a  ump to P2. .**.*
2aa80 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
2aa90 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
2aaa0 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
2aab0 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
2aac0 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
2aad0 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
2aae0 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
2aaf0 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
2ab00 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
2ab10 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20  P_IfNeg: {      
2ab20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2ab30 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2ab40 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2ab50 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2ab60 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
2ab70 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b  ( pIn1->u.i<0 ){
2ab80 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
2ab90 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
2aba0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2abb0 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20  e: IfZero P1 P2 
2abc0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  P3 * *.**.** The
2abd0 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   register P1 mus
2abe0 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2abf0 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72  eger.  Add liter
2ac00 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20  al P3 to the.** 
2ac10 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
2ac20 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72 65  r P1.  If the re
2ac30 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20  sult is exactly 
2ac40 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  0, jump to P2. .
2ac50 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
2ac60 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
2ac70 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
2ac80 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
2ac90 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
2aca0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2acb0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
2acc0 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
2acd0 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
2ace0 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20  se OP_IfZero: { 
2acf0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2ad00 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2ad10 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2ad20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2ad30 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2ad40 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
2ad50 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70  pOp->p3;.  if( p
2ad60 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20  In1->u.i==0 ){. 
2ad70 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2ad80 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2ad90 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2ada0 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33   AggStep * P2 P3
2adb0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65   P4 P5.**.** Exe
2adc0 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
2add0 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
2ade0 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
2adf0 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
2ae00 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
2ae10 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2ae20 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20   the FuncDef.** 
2ae30 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
2ae40 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
2ae50 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69  ction.  Use regi
2ae60 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68  ster.** P3 as th
2ae70 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  e accumulator..*
2ae80 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
2ae90 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
2aea0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
2aeb0 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
2aec0 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20  essors..*/.case 
2aed0 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20  OP_AggStep: {.  
2aee0 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
2aef0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d    Mem *pMem;.  M
2af00 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69  em *pRec;.  sqli
2af10 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
2af20 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
2af30 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d   **apVal;..  n =
2af40 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
2af50 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52  rt( n>=0 );.  pR
2af60 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ec = &aMem[pOp->
2af70 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70  p2];.  apVal = p
2af80 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
2af90 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
2afa0 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   );.  for(i=0; i
2afb0 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29  <n; i++, pRec++)
2afc0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
2afd0 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29  mIsValid(pRec) )
2afe0 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d  ;.    apVal[i] =
2aff0 20 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62   pRec;.    memAb
2b000 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
2b010 52 65 63 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Rec);.    sqlite
2b020 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
2b030 65 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63  e(pRec);.  }.  c
2b040 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  tx.pFunc = pOp->
2b050 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65  p4.pFunc;.  asse
2b060 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
2b070 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
2b080 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20  m );.  ctx.pMem 
2b090 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  = pMem = &aMem[p
2b0a0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d  Op->p3];.  pMem-
2b0b0 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c  >n++;.  ctx.s.fl
2b0c0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
2b0d0 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20    ctx.s.z = 0;. 
2b0e0 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d   ctx.s.zMalloc =
2b0f0 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c   0;.  ctx.s.xDel
2b100 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62   = 0;.  ctx.s.db
2b110 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45   = db;.  ctx.isE
2b120 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e  rror = 0;.  ctx.
2b130 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74 78  pColl = 0;.  ctx
2b140 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  .skipFlag = 0;. 
2b150 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
2b160 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  flags & SQLITE_F
2b170 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a  UNC_NEEDCOLL ){.
2b180 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
2b190 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  p->aOp );.    as
2b1a0 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
2b1b0 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
2b1c0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2b1d0 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
2b1e0 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
2b1f0 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f    ctx.pColl = pO
2b200 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a  p[-1].p4.pColl;.
2b210 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63    }.  (ctx.pFunc
2b220 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e  ->xStep)(&ctx, n
2b230 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50  , apVal); /* IMP
2b240 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
2b250 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45  */.  if( ctx.isE
2b260 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rror ){.    sqli
2b270 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2b280 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
2b290 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
2b2a0 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b  e_text(&ctx.s));
2b2b0 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73  .    rc = ctx.is
2b2c0 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28  Error;.  }.  if(
2b2d0 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 29 7b   ctx.skipFlag ){
2b2e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2b2f0 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
2b300 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69  CollSeq );.    i
2b310 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20   = pOp[-1].p1;. 
2b320 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69 74     if( i ) sqlit
2b330 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2b340 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a  4(&aMem[i], 1);.
2b350 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33 56 64    }..  sqlite3Vd
2b360 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74  beMemRelease(&ct
2b370 78 2e 73 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  x.s);..  break;.
2b380 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
2b390 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50  gFinal P1 P2 * P
2b3a0 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  4 *.**.** Execut
2b3b0 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20  e the finalizer 
2b3c0 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
2b3d0 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69  aggregate.  P1 i
2b3e0 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20  s.** the memory 
2b3f0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73  location that is
2b400 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
2b410 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61   for the aggrega
2b420 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  te..**.** P2 is 
2b430 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
2b440 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
2b450 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
2b460 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
2b470 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2b480 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
2b490 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
2b4a0 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
2b4b0 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
2b4c0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
2b4d0 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
2b4e0 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
2b4f0 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
2b500 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
2b510 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
2b520 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
2b530 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
2b540 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
2b550 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63  the degenerate c
2b560 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65  ase where.** the
2b570 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77   step function w
2b580 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  as not previousl
2b590 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73  y called..*/.cas
2b5a0 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b  e OP_AggFinal: {
2b5b0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
2b5c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2b5d0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
2b5e0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20  >nMem );.  pMem 
2b5f0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2b600 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
2b610 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d  m->flags & ~(MEM
2b620 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d  _Null|MEM_Agg))=
2b630 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
2b640 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c  ite3VdbeMemFinal
2b650 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70  ize(pMem, pOp->p
2b660 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20  4.pFunc);.  if( 
2b670 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
2b680 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2b690 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2b6a0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
2b6b0 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d  text(pMem));.  }
2b6c0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2b6d0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65  angeEncoding(pMe
2b6e0 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  m, encoding);.  
2b6f0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2b700 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28  IZE(pMem);.  if(
2b710 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
2b720 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20  ooBig(pMem) ){. 
2b730 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2b740 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2b750 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2b760 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f  OMIT_WAL./* Opco
2b770 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50  de: Checkpoint P
2b780 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2b790 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74  * Checkpoint dat
2b7a0 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69  abase P1. This i
2b7b0 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20  s a no-op if P1 
2b7c0 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
2b7d0 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e   in.** WAL mode.
2b7e0 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73   Parameter P2 is
2b7f0 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43   one of SQLITE_C
2b800 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56  HECKPOINT_PASSIV
2b810 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45  E, FULL.** or RE
2b820 53 54 41 52 54 2e 20 20 57 72 69 74 65 20 31 20  START.  Write 1 
2b830 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  or 0 into mem[P3
2b840 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f  ] if the checkpo
2b850 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53  int returns.** S
2b860 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f  QLITE_BUSY or no
2b870 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  t, respectively.
2b880 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62    Write the numb
2b890 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
2b8a0 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20  he.** WAL after 
2b8b0 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69  the checkpoint i
2b8c0 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  nto mem[P3+1] an
2b8d0 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
2b8e0 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  pages.** in the 
2b8f0 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65  WAL that have be
2b900 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
2b910 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
2b920 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  oint.** complete
2b930 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d  s into mem[P3+2]
2b940 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e  .  However on an
2b950 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31   error, mem[P3+1
2b960 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b  ] and.** mem[P3+
2b970 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  2] are initializ
2b980 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73  ed to -1..*/.cas
2b990 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a  e OP_Checkpoint:
2b9a0 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20   {.  int i;     
2b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9c0 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
2b9d0 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52  nter */.  int aR
2b9e0 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  es[3];          
2b9f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
2ba00 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ults */.  Mem *p
2ba10 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
2ba20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
2ba30 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
2ba40 2a 2f 0a 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20  */..  aRes[0] = 
2ba50 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61  0;.  aRes[1] = a
2ba60 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61  Res[2] = -1;.  a
2ba70 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d  ssert( pOp->p2==
2ba80 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2ba90 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20 20  T_PASSIVE.      
2baa0 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
2bab0 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46  ITE_CHECKPOINT_F
2bac0 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ULL.       || pO
2bad0 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
2bae0 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54  ECKPOINT_RESTART
2baf0 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .  );.  rc = sql
2bb00 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64  ite3Checkpoint(d
2bb10 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2bb20 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26  >p2, &aRes[1], &
2bb30 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20  aRes[2]);.  if( 
2bb40 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
2bb50 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
2bb60 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b  TE_OK;.    aRes[
2bb70 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f  0] = 1;.  }.  fo
2bb80 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61  r(i=0, pMem = &a
2bb90 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c  Mem[pOp->p3]; i<
2bba0 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b  3; i++, pMem++){
2bbb0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2bbc0 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d  MemSetInt64(pMem
2bbd0 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b  , (i64)aRes[i]);
2bbe0 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b  .  }    .  break
2bbf0 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23  ;.};  .#endif..#
2bc00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2bc10 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63  IT_PRAGMA./* Opc
2bc20 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65  ode: JournalMode
2bc30 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
2bc40 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20  *.** Change the 
2bc50 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
2bc60 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50  database P1 to P
2bc70 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e  3. P3 must be on
2bc80 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45  e of the.** PAGE
2bc90 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58  R_JOURNALMODE_XX
2bca0 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61  X values. If cha
2bcb0 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68  nging between th
2bcc0 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61  e various rollba
2bcd0 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c  ck.** modes (del
2bce0 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70  ete, truncate, p
2bcf0 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20  ersist, off and 
2bd00 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73  memory), this is
2bd10 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65   a simple.** ope
2bd20 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73  ration. No IO is
2bd30 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a   required..**.**
2bd40 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74   If changing int
2bd50 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20  o or out of WAL 
2bd60 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75  mode the procedu
2bd70 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c  re is more compl
2bd80 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72  icated..**.** Wr
2bd90 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  ite a string con
2bda0 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61  taining the fina
2bdb0 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74  l journal-mode t
2bdc0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
2bdd0 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61  /.case OP_Journa
2bde0 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f  lMode: {    /* o
2bdf0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
2be00 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
2be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20      /* Btree to 
2be30 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d  change journal m
2be40 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65  ode of */.  Page
2be50 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20  r *pPager;      
2be60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
2be70 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  ager associated 
2be80 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e  with pBt */.  in
2be90 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20  t eNew;         
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2beb0 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   New journal mod
2bec0 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b  e */.  int eOld;
2bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bee0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c         /* The ol
2bef0 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  d journal mode *
2bf00 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
2bf10 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20  zFilename;      
2bf20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64      /* Name of d
2bf30 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72  atabase file for
2bf40 20 70 50 61 67 65 72 20 2a 2f 0a 0a 20 20 65 4e   pPager */..  eN
2bf50 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ew = pOp->p3;.  
2bf60 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41  assert( eNew==PA
2bf70 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2bf80 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c  DELETE .       |
2bf90 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2bfa0 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41  URNALMODE_TRUNCA
2bfb0 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
2bfc0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2bfd0 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20  LMODE_PERSIST . 
2bfe0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2bff0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2c000 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65  _OFF.       || e
2c010 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2c020 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20  ALMODE_MEMORY.  
2c030 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2c040 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2c050 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  WAL.       || eN
2c060 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2c070 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b  LMODE_QUERY.  );
2c080 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2c090 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2c0a0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20 70  <db->nDb );..  p
2c0b0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
2c0c0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61  ->p1].pBt;.  pPa
2c0d0 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
2c0e0 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20  eePager(pBt);.  
2c0f0 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61  eOld = sqlite3Pa
2c100 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerGetJournalMod
2c110 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28  e(pPager);.  if(
2c120 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2c130 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29  RNALMODE_QUERY )
2c140 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
2c150 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65  if( !sqlite3Page
2c160 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e  rOkToChangeJourn
2c170 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29  alMode(pPager) )
2c180 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23   eNew = eOld;..#
2c190 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c1a0 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61  IT_WAL.  zFilena
2c1b0 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  me = sqlite3Page
2c1c0 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72  rFilename(pPager
2c1d0 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  );..  /* Do not 
2c1e0 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69  allow a transiti
2c1f0 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  on to journal_mo
2c200 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74  de=WAL for a dat
2c210 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65  abase.  ** in te
2c220 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20  mporary storage 
2c230 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f  or if the VFS do
2c240 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73  es not support s
2c250 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20  hared memory .  
2c260 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  */.  if( eNew==P
2c270 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2c280 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69  _WAL.   && (sqli
2c290 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c  te3Strlen30(zFil
2c2a0 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20  ename)==0       
2c2b0 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65      /* Temp file
2c2c0 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73   */.       || !s
2c2d0 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75  qlite3PagerWalSu
2c2e0 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29  pported(pPager))
2c2f0 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d     /* No shared-
2c300 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a  memory support *
2c310 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20  /.  ){.    eNew 
2c320 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69  = eOld;.  }..  i
2c330 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a  f( (eNew!=eOld).
2c340 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47     && (eOld==PAG
2c350 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2c360 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45  AL || eNew==PAGE
2c370 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2c380 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20  L).  ){.    if( 
2c390 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  !db->autoCommit 
2c3a0 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  || db->activeVdb
2c3b0 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 20 20  eCnt>1 ){.      
2c3c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2c3d0 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  R;.      sqlite3
2c3e0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2c3f0 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20  rrMsg, db, .    
2c400 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68        "cannot ch
2c410 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65  ange %s wal mode
2c420 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
2c430 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20  ransaction",.   
2c440 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41         (eNew==PA
2c450 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2c460 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22  WAL ? "into" : "
2c470 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29  out of").      )
2c480 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
2c490 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20     }else{. .    
2c4a0 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45    if( eOld==PAGE
2c4b0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2c4c0 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  L ){.        /* 
2c4d0 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d  If leaving WAL m
2c4e0 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c  ode, close the l
2c4f0 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63  og file. If succ
2c500 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c  essful, the call
2c510 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50  .        ** to P
2c520 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63  agerCloseWal() c
2c530 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64  heckpoints and d
2c540 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65  eletes the write
2c550 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20  -ahead-log .    
2c560 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20      ** file. An 
2c570 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d  EXCLUSIVE lock m
2c580 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64  ay still be held
2c590 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
2c5a0 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a   file .        *
2c5b0 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73  * after a succes
2c5c0 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20  sful return. .  
2c5d0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
2c5e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67   rc = sqlite3Pag
2c5f0 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65  erCloseWal(pPage
2c600 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  r);.        if( 
2c610 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2c620 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
2c630 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
2c640 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
2c650 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ew);.        }. 
2c660 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65       }else if( e
2c670 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2c680 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b  ALMODE_MEMORY ){
2c690 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e  .        /* Cann
2c6a0 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69  ot transition di
2c6b0 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f  rectly from MEMO
2c6c0 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20  RY to WAL.  Use 
2c6d0 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20  mode OFF.       
2c6e0 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d   ** as an interm
2c6f0 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20  ediate */.      
2c700 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
2c710 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2c720 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ger, PAGER_JOURN
2c730 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20  ALMODE_OFF);.   
2c740 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
2c750 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74   Open a transact
2c760 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ion on the datab
2c770 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64  ase file. Regard
2c780 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72  less of the jour
2c790 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64  nal.      ** mod
2c7a0 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  e, this transact
2c7b0 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20  ion always uses 
2c7c0 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
2c7d0 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  al..      */.   
2c7e0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
2c7f0 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
2c800 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  (pBt)==0 );.    
2c810 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2c820 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
2c830 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2c840 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20  SetVersion(pBt, 
2c850 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
2c860 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32  RNALMODE_WAL ? 2
2c870 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a   : 1));.      }.
2c880 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
2c890 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54   /* ifndef SQLIT
2c8a0 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20  E_OMIT_WAL */.. 
2c8b0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65   if( rc ){.    e
2c8c0 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a  New = eOld;.  }.
2c8d0 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    eNew = sqlite3
2c8e0 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
2c8f0 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
2c900 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  );..  pOut = &aM
2c910 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
2c920 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2c930 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
2c940 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
2c950 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71  ->z = (char *)sq
2c960 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
2c970 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f  name(eNew);.  pO
2c980 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53  ut->n = sqlite3S
2c990 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29  trlen30(pOut->z)
2c9a0 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
2c9b0 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73  SQLITE_UTF8;.  s
2c9c0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2c9d0 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
2c9e0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
2c9f0 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.};.#endif /* 
2ca00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
2ca10 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  MA */..#if !defi
2ca20 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2ca30 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
2ca40 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2ca50 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
2ca60 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20  e: Vacuum * * * 
2ca70 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d  * *.**.** Vacuum
2ca80 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
2ca90 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f  base.  This opco
2caa0 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74  de will cause ot
2cab0 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d  her virtual.** m
2cac0 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72  achines to be cr
2cad0 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20  eated and run.  
2cae0 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61  It may not be ca
2caf0 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
2cb00 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f  .** a transactio
2cb10 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  n..*/.case OP_Va
2cb20 63 75 75 6d 3a 20 7b 0a 20 20 72 63 20 3d 20 73  cuum: {.  rc = s
2cb30 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
2cb40 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29  &p->zErrMsg, db)
2cb50 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2cb60 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
2cb70 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
2cb80 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
2cb90 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
2cba0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2cbb0 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
2cbc0 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
2cbd0 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
2cbe0 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
2cbf0 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
2cc00 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
2cc10 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
2cc20 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2cc30 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
2cc40 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
2cc50 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2cc60 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2cc70 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
2cc80 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2cc90 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
2cca0 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
2ccb0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2ccc0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2ccd0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
2cce0 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
2ccf0 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31  Mask)1)<<pOp->p1
2cd00 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ))!=0 );.  pBt =
2cd10 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
2cd20 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71  ].pBt;.  rc = sq
2cd30 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61  lite3BtreeIncrVa
2cd40 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28  cuum(pBt);.  if(
2cd50 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc==SQLITE_DONE
2cd60 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
2cd70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63  ->p2 - 1;.    rc
2cd80 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2cd90 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2cda0 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
2cdb0 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20  Expire P1 * * * 
2cdc0 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72  *.**.** Cause pr
2cdd0 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d  ecompiled statem
2cde0 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65  ents to become e
2cdf0 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72  xpired. An expir
2ce00 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20  ed statement.** 
2ce10 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72  fails with an er
2ce20 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49  ror code of SQLI
2ce30 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20  TE_SCHEMA if it 
2ce40 69 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64  is ever executed
2ce50 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65   .** (via sqlite
2ce60 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a  3_step())..** .*
2ce70 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68  * If P1 is 0, th
2ce80 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65  en all SQL state
2ce90 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70  ments become exp
2cea0 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e  ired. If P1 is n
2ceb0 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e  on-zero,.** then
2cec0 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e   only the curren
2ced0 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74  tly executing st
2cee0 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63  atement is affec
2cef0 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  ted. .*/.case OP
2cf00 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28  _Expire: {.  if(
2cf10 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20   !pOp->p1 ){.   
2cf20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
2cf30 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
2cf40 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (db);.  }else{. 
2cf50 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
2cf60 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2cf70 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
2cf80 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2cf90 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  CHE./* Opcode: T
2cfa0 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50  ableLock P1 P2 P
2cfb0 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74  3 P4 *.**.** Obt
2cfc0 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20  ain a lock on a 
2cfd0 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
2cfe0 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
2cff0 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  on is only used 
2d000 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72  when.** the shar
2d010 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65  ed-cache feature
2d020 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a   is enabled. .**
2d030 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
2d040 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
2d050 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  ase in sqlite3.a
2d060 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61  Db[] of the data
2d070 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68  base.** on which
2d080 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71   the lock is acq
2d090 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f  uired.  A readlo
2d0a0 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  ck is obtained i
2d0b0 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20  f P3==0 or.** a 
2d0c0 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33  write lock if P3
2d0d0 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f  ==1..**.** P2 co
2d0e0 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d  ntains the root-
2d0f0 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
2d100 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a  e to lock..**.**
2d110 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70   P4 contains a p
2d120 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61  ointer to the na
2d130 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
2d140 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68  being locked. Th
2d150 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73  is is only.** us
2d160 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
2d170 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
2d180 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e  if the lock cann
2d190 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a  ot be obtained..
2d1a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65  */.case OP_Table
2d1b0 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57  Lock: {.  u8 isW
2d1c0 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70  riteLock = (u8)p
2d1d0 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73  Op->p3;.  if( is
2d1e0 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d  WriteLock || 0==
2d1f0 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54  (db->flags&SQLIT
2d200 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
2d210 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31  d) ){.    int p1
2d220 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20   = pOp->p1; .   
2d230 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26   assert( p1>=0 &
2d240 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  & p1<db->nDb );.
2d250 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e      assert( (p->
2d260 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
2d270 44 62 4d 61 73 6b 29 31 29 3c 3c 70 31 29 29 21  DbMask)1)<<p1))!
2d280 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
2d290 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30  ( isWriteLock==0
2d2a0 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d   || isWriteLock=
2d2b0 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =1 );.    rc = s
2d2c0 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54  qlite3BtreeLockT
2d2d0 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d  able(db->aDb[p1]
2d2e0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69  .pBt, pOp->p2, i
2d2f0 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20  sWriteLock);.   
2d300 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d   if( (rc&0xFF)==
2d310 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b  SQLITE_LOCKED ){
2d320 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
2d330 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  r *z = pOp->p4.z
2d340 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
2d350 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2d360 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62  rMsg, db, "datab
2d370 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
2d380 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20  ked: %s", z);.  
2d390 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
2d3a0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2d3b0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2d3c0 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
2d3d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2d3e0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2d3f0 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
2d400 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2d410 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
2d420 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
2d430 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
2d440 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
2d450 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
2d460 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
2d470 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
2d480 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
2d490 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
2d4a0 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
2d4b0 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
2d4c0 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
2d4d0 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
2d4e0 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
2d4f0 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
2d500 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20  s, the error.** 
2d510 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74  code will be set
2d520 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
2d530 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
2d540 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65  egin: {.  VTable
2d550 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62   *pVTab;.  pVTab
2d560 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
2d570 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2d580 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56  VtabBegin(db, pV
2d590 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61  Tab);.  if( pVTa
2d5a0 62 20 29 20 69 6d 70 6f 72 74 56 74 61 62 45 72  b ) importVtabEr
2d5b0 72 4d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70  rMsg(p, pVTab->p
2d5c0 56 74 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Vtab);.  break;.
2d5d0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2d5e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2d5f0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2d600 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2d610 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2d620 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20  ode: VCreate P1 
2d630 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
2d640 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  4 is the name of
2d650 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2d660 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2d670 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74   Call the xCreat
2d680 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20  e method.** for 
2d690 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
2d6a0 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20  ase OP_VCreate: 
2d6b0 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  {.  rc = sqlite3
2d6c0 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64  VtabCallCreate(d
2d6d0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2d6e0 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d  >p4.z, &p->zErrM
2d6f0 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  sg);.  break;.}.
2d700 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2d710 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2d720 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2d730 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2d740 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2d750 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a  e: VDestroy P1 *
2d760 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2d770 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
2d780 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2d790 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2d7a0 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72   Call the xDestr
2d7b0 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20  oy method.** of 
2d7c0 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
2d7d0 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a  ase OP_VDestroy:
2d7e0 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65   {.  p->inVtabMe
2d7f0 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d  thod = 2;.  rc =
2d800 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2d810 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d  Destroy(db, pOp-
2d820 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
2d830 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2d840 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  od = 0;.  break;
2d850 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2d860 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2d870 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2d880 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2d890 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2d8a0 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a  code: VOpen P1 *
2d8b0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2d8c0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2d8d0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2d8e0 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
2d8f0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
2d900 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  re..** P1 is a c
2d910 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54  ursor number.  T
2d920 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73  his opcode opens
2d930 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65   a cursor to the
2d940 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
2d950 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  e and stores tha
2d960 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a  t cursor in P1..
2d970 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e  */.case OP_VOpen
2d980 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2d990 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65   *pCur;.  sqlite
2d9a0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
2d9b0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
2d9c0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2d9d0 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
2d9e0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
2d9f0 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74   pCur = 0;.  pVt
2da00 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20  abCursor = 0;.  
2da10 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
2da20 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
2da30 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
2da40 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
2da50 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
2da60 73 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d  sert(pVtab && pM
2da70 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70  odule);.  rc = p
2da80 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56  Module->xOpen(pV
2da90 74 61 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f  tab, &pVtabCurso
2daa0 72 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62  r);.  importVtab
2dab0 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29  ErrMsg(p, pVtab)
2dac0 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  ;.  if( SQLITE_O
2dad0 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20  K==rc ){.    /* 
2dae0 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74  Initialize sqlit
2daf0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62  e3_vtab_cursor b
2db00 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20  ase class */.   
2db10 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
2db20 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20  tab = pVtab;..  
2db30 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73 65 20    /* Initialise 
2db40 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65  vdbe cursor obje
2db50 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d  ct */.    pCur =
2db60 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
2db70 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d  p, pOp->p1, 0, -
2db80 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70  1, 0);.    if( p
2db90 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75  Cur ){.      pCu
2dba0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d  r->pVtabCursor =
2dbb0 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20   pVtabCursor;.  
2dbc0 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c      pCur->pModul
2dbd0 65 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  e = pVtabCursor-
2dbe0 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  >pVtab->pModule;
2dbf0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2dc00 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
2dc10 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d  ed = 1;.      pM
2dc20 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56  odule->xClose(pV
2dc30 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  tabCursor);.    
2dc40 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
2dc50 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2dc60 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2dc70 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2dc80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2dc90 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2dca0 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50  de: VFilter P1 P
2dcb0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
2dcc0 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
2dcd0 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
2dce0 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
2dcf0 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
2dd00 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
2dd10 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
2dd20 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
2dd30 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
2dd40 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
2dd50 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
2dd60 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
2dd70 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
2dd80 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
2dd90 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
2dda0 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
2ddb0 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
2ddc0 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
2ddd0 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
2dde0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2ddf0 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
2de00 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
2de10 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
2de20 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
2de30 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
2de40 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
2de50 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
2de60 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2de70 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
2de80 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
2de90 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
2dea0 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
2deb0 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
2dec0 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
2ded0 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
2dee0 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
2def0 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
2df00 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
2df10 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
2df20 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
2df30 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
2df40 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
2df50 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
2df60 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
2df70 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
2df80 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
2df90 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
2dfa0 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
2dfb0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
2dfc0 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
2dfd0 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
2dfe0 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
2dff0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2e000 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2e010 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
2e020 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
2e030 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2e040 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
2e050 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2e060 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75  *pVtab;.  VdbeCu
2e070 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e  rsor *pCur;.  in
2e080 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a  t res;.  int i;.
2e090 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a    Mem **apArg;..
2e0a0 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d    pQuery = &aMem
2e0b0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72  [pOp->p3];.  pAr
2e0c0 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b  gc = &pQuery[1];
2e0d0 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
2e0e0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2e0f0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2e100 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52  d(pQuery) );.  R
2e110 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
2e120 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
2e130 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
2e140 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
2e150 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70   pVtabCursor = p
2e160 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2e170 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61  ;.  pVtab = pVta
2e180 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
2e190 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
2e1a0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
2e1b0 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
2e1c0 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
2e1d0 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
2e1e0 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
2e1f0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
2e200 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
2e210 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
2e220 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41    nArg = (int)pA
2e230 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
2e240 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79  ry = (int)pQuery
2e250 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ->u.i;..  /* Inv
2e260 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20  oke the xFilter 
2e270 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20  method */.  {.  
2e280 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61    res = 0;.    a
2e290 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
2e2a0 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20  .    for(i = 0; 
2e2b0 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
2e2c0 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26      apArg[i] = &
2e2d0 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20  pArgc[i+1];.    
2e2e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2e2f0 53 74 6f 72 65 54 79 70 65 28 61 70 41 72 67 5b  StoreType(apArg[
2e300 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  i]);.    }..    
2e310 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2e320 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  = 1;.    rc = pM
2e330 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70  odule->xFilter(p
2e340 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65  VtabCursor, iQue
2e350 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e  ry, pOp->p4.z, n
2e360 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20  Arg, apArg);.   
2e370 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2e380 20 3d 20 30 3b 0a 20 20 20 20 69 6d 70 6f 72 74   = 0;.    import
2e390 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56  VtabErrMsg(p, pV
2e3a0 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63  tab);.    if( rc
2e3b0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2e3c0 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75       res = pModu
2e3d0 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75  le->xEof(pVtabCu
2e3e0 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  rsor);.    }..  
2e3f0 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
2e400 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2e410 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  - 1;.    }.  }. 
2e420 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
2e430 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a   0;..  break;.}.
2e440 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2e450 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2e460 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2e470 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2e480 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2e490 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32  e: VColumn P1 P2
2e4a0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74   P3 * *.**.** St
2e4b0 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ore the value of
2e4c0 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
2e4d0 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20  n of.** the row 
2e4e0 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74  of the virtual-t
2e4f0 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a  able that the .*
2e500 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70  * P1 cursor is p
2e510 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20  ointing to into 
2e520 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
2e530 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a  case OP_VColumn:
2e540 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
2e550 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
2e560 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
2e570 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
2e580 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74   *pDest;.  sqlit
2e590 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74  e3_context sCont
2e5a0 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73  ext;..  VdbeCurs
2e5b0 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70  or *pCur = p->ap
2e5c0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2e5d0 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
2e5e0 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  tabCursor );.  a
2e5f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2e600 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
2e610 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20  nMem );.  pDest 
2e620 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2e630 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
2e640 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
2e650 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
2e660 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Row ){.    sqlit
2e670 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
2e680 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65  (pDest);.    bre
2e690 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
2e6a0 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
2e6b0 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
2e6c0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
2e6d0 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
2e6e0 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  ( pModule->xColu
2e6f0 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26  mn );.  memset(&
2e700 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a  sContext, 0, siz
2e710 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a  eof(sContext));.
2e720 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74  .  /* The output
2e730 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64   cell may alread
2e740 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20  y have a buffer 
2e750 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a  allocated. Move.
2e760 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74    ** the current
2e770 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f   contents to sCo
2e780 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61  ntext.s so in ca
2e790 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63  se the user-func
2e7a0 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75  tion .  ** can u
2e7b0 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20 61  se the already a
2e7c0 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20  llocated buffer 
2e7d0 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63  instead of alloc
2e7e0 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65  ating a .  ** ne
2e7f0 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71  w one..  */.  sq
2e800 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
2e810 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44  (&sContext.s, pD
2e820 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  est);.  MemSetTy
2e830 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74  peFlag(&sContext
2e840 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  .s, MEM_Null);..
2e850 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
2e860 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56  xColumn(pCur->pV
2e870 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e  tabCursor, &sCon
2e880 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  text, pOp->p2);.
2e890 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d    importVtabErrM
2e8a0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
2e8b0 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  if( sContext.isE
2e8c0 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d  rror ){.    rc =
2e8d0 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
2e8e0 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70  r;.  }..  /* Cop
2e8f0 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  y the result of 
2e900 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
2e910 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 2e  the P3 register.
2e920 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73   We.  ** do this
2e930 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
2e940 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
2e950 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
2e960 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20  to ensure any.  
2e970 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63  ** dynamic alloc
2e980 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78  ation in sContex
2e990 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63  t.s (a Mem struc
2e9a0 74 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e  t) is  released.
2e9b0 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
2e9c0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2e9d0 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65  g(&sContext.s, e
2e9e0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69  ncoding);.  sqli
2e9f0 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
2ea00 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e  Dest, &sContext.
2ea10 73 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  s);.  REGISTER_T
2ea20 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
2ea30 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  est);.  UPDATE_M
2ea40 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
2ea50 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  t);..  if( sqlit
2ea60 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
2ea70 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f  pDest) ){.    go
2ea80 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
2ea90 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2eaa0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2eab0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2eac0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ead0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2eae0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e  LE./* Opcode: VN
2eaf0 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ext P1 P2 * * *.
2eb00 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69  **.** Advance vi
2eb10 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74  rtual table P1 t
2eb20 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69  o the next row i
2eb30 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  n its result set
2eb40 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20   and.** jump to 
2eb50 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
2eb60 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74   Or, if the virt
2eb70 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65  ual table has re
2eb80 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64  ached.** the end
2eb90 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73   of its result s
2eba0 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  et, then fall th
2ebb0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2ebc0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2ebd0 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a  /.case OP_VNext:
2ebe0 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
2ebf0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2ec00 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
2ec10 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
2ec20 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65  Module;.  int re
2ec30 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  s;.  VdbeCursor 
2ec40 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20  *pCur;..  res = 
2ec50 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  0;.  pCur = p->a
2ec60 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2ec70 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
2ec80 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
2ec90 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
2eca0 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  w ){.    break;.
2ecb0 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
2ecc0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  ur->pVtabCursor-
2ecd0 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
2ece0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
2ecf0 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
2ed00 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a  odule->xNext );.
2ed10 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
2ed20 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20   xNext() method 
2ed30 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54  of the module. T
2ed40 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66  here is no way f
2ed50 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65  or the.  ** unde
2ed60 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74  rlying implement
2ed70 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20  ation to return 
2ed80 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20  an error if one 
2ed90 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20  occurs during.  
2eda0 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74  ** xNext(). Inst
2edb0 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72  ead, if an error
2edc0 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73   occurs, true is
2edd0 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63   returned (indic
2ede0 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a  ating that .  **
2edf0 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62   data is availab
2ee00 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f  le) and the erro
2ee10 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  r code returned 
2ee20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a  when xColumn or.
2ee30 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20    ** some other 
2ee40 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69  method is next i
2ee50 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61  nvoked on the sa
2ee60 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ve virtual table
2ee70 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
2ee80 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2ee90 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  = 1;.  rc = pMod
2eea0 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d  ule->xNext(pCur-
2eeb0 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
2eec0 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2eed0 20 3d 20 30 3b 0a 20 20 69 6d 70 6f 72 74 56 74   = 0;.  importVt
2eee0 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
2eef0 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  b);.  if( rc==SQ
2ef00 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
2ef10 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
2ef20 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  of(pCur->pVtabCu
2ef30 72 73 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66  rsor);.  }..  if
2ef40 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a  ( !res ){.    /*
2ef50 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74   If there is dat
2ef60 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  a, jump to P2 */
2ef70 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
2ef80 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2ef90 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2efa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2efb0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2efc0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2efd0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2efe0 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
2eff0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2f000 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2f010 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2f020 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2f030 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2f040 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
2f050 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
2f060 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
2f070 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  g xRename method
2f080 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  . The value.** i
2f090 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
2f0a0 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a   passed as the z
2f0b0 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  Name argument to
2f0c0 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74   the xRename met
2f0d0 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  hod..*/.case OP_
2f0e0 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c  VRename: {.  sql
2f0f0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2f100 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a  ;.  Mem *pName;.
2f110 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
2f120 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
2f130 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d  .  pName = &aMem
2f140 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2f150 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64  ert( pVtab->pMod
2f160 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a  ule->xRename );.
2f170 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2f180 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20  alid(pName) );. 
2f190 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
2f1a0 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b  pOp->p1, pName);
2f1b0 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65  .  assert( pName
2f1c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
2f1d0 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  r );.  testcase(
2f1e0 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
2f1f0 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65  ITE_UTF8 );.  te
2f200 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
2f210 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
2f220 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  BE );.  testcase
2f230 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
2f240 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a  LITE_UTF16LE );.
2f250 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2f260 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2f270 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55  (pName, SQLITE_U
2f280 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  TF8);.  if( rc==
2f290 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2f2a0 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f   rc = pVtab->pMo
2f2b0 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56  dule->xRename(pV
2f2c0 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a  tab, pName->z);.
2f2d0 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72      importVtabEr
2f2e0 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rMsg(p, pVtab);.
2f2f0 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
2f300 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   0;.  }.  break;
2f310 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
2f320 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2f330 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2f340 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50  pcode: VUpdate P
2f350 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
2f360 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2f370 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2f380 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2f390 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2f3a0 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
2f3b0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
2f3c0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
2f3d0 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  g xUpdate method
2f3e0 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61  . P2 values.** a
2f3f0 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65  re contiguous me
2f400 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74  mory cells start
2f410 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73  ing at P3 to pas
2f420 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65  s to the xUpdate
2f430 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e   .** invocation.
2f440 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   The value in re
2f450 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29  gister (P3+P2-1)
2f460 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2f470 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65  the .** p2th ele
2f480 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76  ment of the argv
2f490 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f   array passed to
2f4a0 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20   xUpdate..**.** 
2f4b0 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  The xUpdate meth
2f4c0 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c  od will do a DEL
2f4d0 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54  ETE or an INSERT
2f4e0 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65   or both..** The
2f4f0 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74   argv[0] element
2f500 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f   (which correspo
2f510 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65  nds to memory ce
2f520 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65  ll P3).** is the
2f530 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20   rowid of a row 
2f540 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61  to delete.  If a
2f550 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74  rgv[0] is NULL t
2f560 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74  hen no .** delet
2f570 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65  ion occurs.  The
2f580 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74   argv[1] element
2f590 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
2f5a0 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
2f5b0 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e  .  This can be N
2f5c0 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20  ULL to have the 
2f5d0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65  virtual table se
2f5e0 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a  lect the new .**
2f5f0 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c   rowid for itsel
2f600 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65  f.  The subseque
2f610 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74  nt elements in t
2f620 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a  he array are .**
2f630 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63   the values of c
2f640 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65  olumns in the ne
2f650 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  w row..**.** If 
2f660 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e  P2==1 then no in
2f670 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65  sert is performe
2f680 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74  d.  argv[0] is t
2f690 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61  he rowid of.** a
2f6a0 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a   row to delete..
2f6b0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f  **.** P1 is a bo
2f6c0 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69  olean flag. If i
2f6d0 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65  t is set to true
2f6e0 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65   and the xUpdate
2f6f0 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63   call.** is succ
2f700 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65  essful, then the
2f710 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
2f720 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  by sqlite3_last_
2f730 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a  insert_rowid() .
2f740 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  ** is set to the
2f750 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
2f760 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20  wid for the row 
2f770 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a  just inserted..*
2f780 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74  /.case OP_VUpdat
2f790 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
2f7a0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71  tab *pVtab;.  sq
2f7b0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2f7c0 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72  odule;.  int nAr
2f7d0 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71  g;.  int i;.  sq
2f7e0 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64  lite_int64 rowid
2f7f0 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b  ;.  Mem **apArg;
2f800 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61  .  Mem *pX;..  a
2f810 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d  ssert( pOp->p2==
2f820 31 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d  1        || pOp-
2f830 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c  >p5==OE_Fail   |
2f840 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f  | pOp->p5==OE_Ro
2f850 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20 7c  llback .       |
2f860 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62  | pOp->p5==OE_Ab
2f870 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ort || pOp->p5==
2f880 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70  OE_Ignore || pOp
2f890 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65  ->p5==OE_Replace
2f8a0 0a 20 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20  .  );.  pVtab = 
2f8b0 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
2f8c0 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2f8d0 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  = (sqlite3_modul
2f8e0 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e *)pVtab->pModu
2f8f0 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70  le;.  nArg = pOp
2f900 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
2f910 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2f920 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c  VTAB );.  if( AL
2f930 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55  WAYS(pModule->xU
2f940 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38  pdate) ){.    u8
2f950 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20   vtabOnConflict 
2f960 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66  = db->vtabOnConf
2f970 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20  lict;.    apArg 
2f980 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20  = p->apArg;.    
2f990 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  pX = &aMem[pOp->
2f9a0 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  p3];.    for(i=0
2f9b0 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
2f9c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
2f9d0 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a  mIsValid(pX) );.
2f9e0 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
2f9f0 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20  Change(p, pX);. 
2fa00 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2fa10 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 58 29  MemStoreType(pX)
2fa20 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d  ;.      apArg[i]
2fa30 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b   = pX;.      pX+
2fa40 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d  +;.    }.    db-
2fa50 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20  >vtabOnConflict 
2fa60 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72  = pOp->p5;.    r
2fa70 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  c = pModule->xUp
2fa80 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67  date(pVtab, nArg
2fa90 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29  , apArg, &rowid)
2faa0 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e  ;.    db->vtabOn
2fab0 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f  Conflict = vtabO
2fac0 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 69  nConflict;.    i
2fad0 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2fae0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69  p, pVtab);.    i
2faf0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2fb00 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20   && pOp->p1 ){. 
2fb10 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72       assert( nAr
2fb20 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20  g>1 && apArg[0] 
2fb30 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c  && (apArg[0]->fl
2fb40 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b  ags&MEM_Null) );
2fb50 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52  .      db->lastR
2fb60 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
2fb70 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a   = rowid;.    }.
2fb80 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2fb90 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26  TE_CONSTRAINT &&
2fba0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
2fbb0 62 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20  bConstraint ){. 
2fbc0 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
2fbd0 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20  ==OE_Ignore ){. 
2fbe0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
2fbf0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c  TE_OK;.      }el
2fc00 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65  se{.        p->e
2fc10 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70  rrorAction = ((p
2fc20 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61  Op->p5==OE_Repla
2fc30 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a  ce) ? OE_Abort :
2fc40 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20   pOp->p5);.     
2fc50 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
2fc60 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b      p->nChange++
2fc70 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
2fc80 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2fc90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2fca0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2fcb0 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d  fndef  SQLITE_OM
2fcc0 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
2fcd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65  ./* Opcode: Page
2fce0 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  count P1 P2 * * 
2fcf0 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
2fd00 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72  e current number
2fd10 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74   of pages in dat
2fd20 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f  abase P1 to memo
2fd30 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63  ry cell P2..*/.c
2fd40 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74  ase OP_Pagecount
2fd50 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
2fd60 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
2fd70 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  e */.  pOut->u.i
2fd80 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
2fd90 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b  astPage(db->aDb[
2fda0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20  pOp->p1].pBt);. 
2fdb0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2fdc0 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49  ...#ifndef  SQLI
2fdd0 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
2fde0 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  AGMAS./* Opcode:
2fdf0 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32 20   MaxPgcnt P1 P2 
2fe00 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79  P3 * *.**.** Try
2fe10 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69   to set the maxi
2fe20 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66  mum page count f
2fe30 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 74  or database P1 t
2fe40 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50  o the value in P
2fe50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74  3..** Do not let
2fe60 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
2fe70 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c  e count fall bel
2fe80 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  ow the current p
2fe90 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a  age count and.**
2fea0 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74   do not change t
2feb0 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
2fec0 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50  count value if P
2fed0 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  3==0..**.** Stor
2fee0 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  e the maximum pa
2fef0 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74  ge count after t
2ff00 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67  he change in reg
2ff10 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
2ff20 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b  e OP_MaxPgcnt: {
2ff30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
2ff40 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
2ff50 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
2ff60 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65   newMax;.  Btree
2ff70 20 2a 70 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20   *pBt;..  pBt = 
2ff80 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2ff90 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d  .pBt;.  newMax =
2ffa0 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   0;.  if( pOp->p
2ffb0 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20  3 ){.    newMax 
2ffc0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
2ffd0 73 74 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20  stPage(pBt);.   
2ffe0 20 69 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75   if( newMax < (u
2fff0 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20  nsigned)pOp->p3 
30000 29 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69  ) newMax = (unsi
30010 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20  gned)pOp->p3;.  
30020 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
30030 73 71 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50  sqlite3BtreeMaxP
30040 61 67 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65  ageCount(pBt, ne
30050 77 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  wMax);.  break;.
30060 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  }.#endif...#ifnd
30070 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
30080 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  RACE./* Opcode: 
30090 54 72 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a  Trace * * * P4 *
300a0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
300b0 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
300c0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
300d0 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
300e0 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
300f0 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
30100 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
30110 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
30120 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63  e callback..*/.c
30130 61 73 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a  ase OP_Trace: {.
30140 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a    char *zTrace;.
30150 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66    char *z;..  if
30160 28 20 64 62 2d 3e 78 54 72 61 63 65 20 26 26 20  ( db->xTrace && 
30170 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e  (zTrace = (pOp->
30180 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a  p4.z ? pOp->p4.z
30190 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 20   : p->zSql))!=0 
301a0 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  ){.    z = sqlit
301b0 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28  e3VdbeExpandSql(
301c0 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  p, zTrace);.    
301d0 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70  db->xTrace(db->p
301e0 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20  TraceArg, z);.  
301f0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
30200 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64  db, z);.  }.#ifd
30210 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
30220 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73    if( (db->flags
30230 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61   & SQLITE_SqlTra
30240 63 65 29 21 3d 30 0a 20 20 20 26 26 20 28 7a 54  ce)!=0.   && (zT
30250 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e  race = (pOp->p4.
30260 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20  z ? pOp->p4.z : 
30270 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29  p->zSql))!=0.  )
30280 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 65 62  {.    sqlite3Deb
30290 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72  ugPrintf("SQL-tr
302a0 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61  ace: %s\n", zTra
302b0 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  ce);.  }.#endif 
302c0 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
302d0 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  */.  break;.}.#e
302e0 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ndif.../* Opcode
302f0 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a  : Noop * * * * *
30300 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e  .**.** Do nothin
30310 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63  g.  This instruc
30320 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73  tion is often us
30330 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a  eful as a jump.*
30340 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a  * destination..*
30350 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69  /./*.** The magi
30360 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65  c Explain opcode
30370 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74   are only insert
30380 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d  ed when explain=
30390 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20  =2 (which.** is 
303a0 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20  to say when the 
303b0 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
303c0 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65  AN syntax is use
303d0 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  d.).** This opco
303e0 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72  de records infor
303f0 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  mation from the 
30400 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69  optimizer.  It i
30410 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d  s the.** the sam
30420 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54  e as a no-op.  T
30430 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72  his opcodesnever
30440 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65   appears in a re
30450 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a  al VM program..*
30460 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20  /.default: {    
30470 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73        /* This is
30480 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20   really OP_Noop 
30490 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a  and OP_Explain *
304a0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
304b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70  >opcode==OP_Noop
304c0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
304d0 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20  =OP_Explain );. 
304e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a   break;.}../****
304f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30510 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30520 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30530 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65  *********.** The
30540 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77   cases of the sw
30550 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61  itch statement a
30560 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73  bove this line s
30570 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64  hould all be ind
30580 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70  ented.** by 6 sp
30590 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c  aces.  But the l
305a0 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65  eft-most 6 space
305b0 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f  s have been remo
305c0 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74  ved to improve t
305d0 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74  he.** readabilit
305e0 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f  y.  From this po
305f0 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65  int on down, the
30600 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
30610 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a  ion rules are.**
30620 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a   restored..*****
30630 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30640 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30650 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30660 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30670 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a  ********/.    }.
30680 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
30690 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20  FILE.    {.     
306a0 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d 20 73   u64 elapsed = s
306b0 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 20 2d  qlite3Hwtime() -
306c0 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f   start;.      pO
306d0 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6c 61  p->cycles += ela
306e0 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f 70 2d  psed;.      pOp-
306f0 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a 20 20  >cnt++;.#if 0.  
30700 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
30710 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20 22 2c  dout, "%10llu ",
30720 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20 20 20   elapsed);.     
30730 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
30740 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 6f 72  intOp(stdout, or
30750 69 67 50 63 2c 20 26 61 4f 70 5b 6f 72 69 67 50  igPc, &aOp[origP
30760 63 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  c]);.#endif.    
30770 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
30780 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
30790 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67  ode adds nothing
307a0 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66   to the actual f
307b0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20  unctionality.   
307c0 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72   ** of the progr
307d0 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  am.  It is only 
307e0 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67  here for testing
307f0 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a   and debugging..
30800 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74      ** On the ot
30810 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65  her hand, it doe
30820 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65  s burn CPU cycle
30830 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72  s every time thr
30840 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20  ough.    ** the 
30850 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20  evaluator loop. 
30860 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65   So we can leave
30870 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45   it out when NDE
30880 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
30890 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e      */.#ifndef N
308a0 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74  DEBUG.    assert
308b0 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70  ( pc>=-1 && pc<p
308c0 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66  ->nOp );..#ifdef
308d0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
308e0 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20 29    if( p->trace )
308f0 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  {.      if( rc!=
30900 30 20 29 20 66 70 72 69 6e 74 66 28 70 2d 3e 74  0 ) fprintf(p->t
30910 72 61 63 65 2c 22 72 63 3d 25 64 5c 6e 22 2c 72  race,"rc=%d\n",r
30920 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f  c);.      if( pO
30930 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50  p->opflags & (OP
30940 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45  FLG_OUT2_PRERELE
30950 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20  ASE|OPFLG_OUT2) 
30960 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
30970 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63  terTrace(p->trac
30980 65 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  e, pOp->p2, &aMe
30990 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
309a0 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
309b0 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
309c0 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20  FLG_OUT3 ){.    
309d0 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
309e0 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d  e(p->trace, pOp-
309f0 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
30a00 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
30a10 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53    }.#endif  /* S
30a20 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23  QLITE_DEBUG */.#
30a30 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47  endif  /* NDEBUG
30a40 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20   */.  }  /* The 
30a50 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b  end of the for(;
30a60 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70  ;) loop the loop
30a70 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65  s through opcode
30a80 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65  s */..  /* If we
30a90 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
30aa0 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  t, it means that
30ab0 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69   execution is fi
30ac0 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a  nished with.  **
30ad0 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d   an error of som
30ae0 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62  e kind..  */.vdb
30af0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20  e_error_halt:.  
30b00 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20  assert( rc );.  
30b10 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74 65  p->rc = rc;.  te
30b20 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47  stcase( sqlite3G
30b30 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67  lobalConfig.xLog
30b40 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  !=0 );.  sqlite3
30b50 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65 6d  _log(rc, "statem
30b60 65 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25 64  ent aborts at %d
30b70 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20 20  : [%s] %s", .   
30b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b90 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e  pc, p->zSql, p->
30ba0 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69  zErrMsg);.  sqli
30bb0 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
30bc0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
30bd0 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64  _IOERR_NOMEM ) d
30be0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
30bf0 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  = 1;.  rc = SQLI
30c00 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  TE_ERROR;.  if( 
30c10 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
30c20 6c 74 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  lt>0 ){.    sqli
30c30 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
30c40 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74  Schema(db, reset
30c50 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29  SchemaOnFault-1)
30c60 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73  ;.  }..  /* This
30c70 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
30c80 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f   out of this pro
30c90 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65  cedure.  We have
30ca0 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65   to.  ** release
30cb0 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
30cc0 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65  btrees that were
30cd0 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65   acquired at the
30ce0 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64  .  ** top. */.vd
30cf0 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d  be_return:.  db-
30d00 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
30d10 74 52 6f 77 69 64 3b 0a 20 20 73 71 6c 69 74 65  tRowid;.  sqlite
30d20 33 56 64 62 65 4c 65 61 76 65 28 70 29 3b 0a 20  3VdbeLeave(p);. 
30d30 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f   return rc;..  /
30d40 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
30d50 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  f a string or bl
30d60 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53  ob larger than S
30d70 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
30d80 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74  .  ** is encount
30d90 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62  ered..  */.too_b
30da0 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53 65 74  ig:.  sqlite3Set
30db0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
30dc0 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e 67 20  sg, db, "string 
30dd0 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22  or blob too big"
30de0 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
30df0 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20  _TOOBIG;.  goto 
30e00 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
30e10 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
30e20 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28  ere if a malloc(
30e30 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f  ) fails..  */.no
30e40 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c  _mem:.  db->mall
30e50 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
30e60 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
30e70 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
30e80 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
30e90 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54  ");.  rc = SQLIT
30ea0 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20  E_NOMEM;.  goto 
30eb0 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
30ec0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
30ed0 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65  ere for any othe
30ee0 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20  r kind of fatal 
30ef0 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22  error.  The "rc"
30f00 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73   variable.  ** s
30f10 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65  hould hold the e
30f20 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a  rror number..  *
30f30 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  /.abort_due_to_e
30f40 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20  rror:.  assert( 
30f50 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b  p->zErrMsg==0 );
30f60 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
30f70 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53  cFailed ) rc = S
30f80 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69  QLITE_NOMEM;.  i
30f90 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f  f( rc!=SQLITE_IO
30fa0 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ERR_NOMEM ){.   
30fb0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
30fc0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
30fd0 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
30fe0 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d  ErrStr(rc));.  }
30ff0 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
31000 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
31010 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 74  ump to here if t
31020 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  he sqlite3_inter
31030 72 75 70 74 28 29 20 41 50 49 20 73 65 74 73 20  rupt() API sets 
31040 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20 20  the interrupt.  
31050 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62  ** flag..  */.ab
31060 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
31070 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28 20  rupt:.  assert( 
31080 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
31090 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 53  pted );.  rc = S
310a0 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
310b0 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  .  p->rc = rc;. 
310c0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
310d0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
310e0 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
310f0 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 67  ErrStr(rc));.  g
31100 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
31110 61 6c 74 3b 0a 7d 0a                             alt;.}.