/ Hex Artifact Content
Login

Artifact 420ebf1d551a76406cbbe0adc52d22d45aac039a:


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 20 64 65 66 69 6e 65 20 69 73 53 6f 72 74  .# define isSort
1670: 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53 6f 72  er(x) ((x)->pSor
1680: 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 41  ter!=0)../*.** A
1690: 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69  rgument pMem poi
16a0: 6e 74 73 20 61 74 20 61 20 72 65 67 69 73 74 65  nts at a registe
16b0: 72 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 70  r that will be p
16c0: 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73  assed to a.** us
16d0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
16e0: 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65 64 20  ion or returned 
16f0: 74 6f 20 74 68 65 20 75 73 65 72 20 61 73 20 74  to the user as t
1700: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20 71  he result of a q
1710: 75 65 72 79 2e 0a 2a 2a 20 54 68 69 73 20 72 6f  uery..** This ro
1720: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70  utine sets the p
1730: 4d 65 6d 2d 3e 74 79 70 65 20 76 61 72 69 61 62  Mem->type variab
1740: 6c 65 20 75 73 65 64 20 62 79 20 74 68 65 20 73  le used by the s
1750: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29  qlite3_value_*()
1760: 20 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 2e 0a 2a   .** routines..*
1770: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
1780: 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 4d  beMemStoreType(M
1790: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74  em *pMem){.  int
17a0: 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66   flags = pMem->f
17b0: 6c 61 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67  lags;.  if( flag
17c0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
17d0: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
17e0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20   SQLITE_NULL;.  
17f0: 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61  }.  else if( fla
1800: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
1810: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
1820: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b   SQLITE_INTEGER;
1830: 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
1840: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
1850: 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79   ){.    pMem->ty
1860: 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f 41  pe = SQLITE_FLOA
1870: 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66  T;.  }.  else if
1880: 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ( flags & MEM_St
1890: 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  r ){.    pMem->t
18a0: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54 45 58  ype = SQLITE_TEX
18b0: 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  T;.  }else{.    
18c0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18d0: 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a  ITE_BLOB;.  }.}.
18e0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  ./*.** Allocate 
18f0: 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62 65  VdbeCursor numbe
1900: 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e 20  r iCur.  Return 
1910: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e  a pointer to it.
1920: 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a    Return NULL.**
1930: 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20 6f   if we run out o
1940: 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61  f memory..*/.sta
1950: 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20 2a  tic VdbeCursor *
1960: 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 0a  allocateCursor(.
1970: 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20 20    Vdbe *p,      
1980: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
1990: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a  irtual machine *
19a0: 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20 20  /.  int iCur,   
19b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
19c0: 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56 64  ex of the new Vd
19d0: 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e  beCursor */.  in
19e0: 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20 20  t nField,       
19f0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a00: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 74   fields in the t
1a10: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f  able or index */
1a20: 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20 20  .  int iDb,     
1a30: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
1a40: 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20  base the cursor 
1a50: 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d  belongs to, or -
1a60: 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72  1 */.  int isBtr
1a70: 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20  eeCursor     /* 
1a80: 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65 2e  True for B-Tree.
1a90: 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65 75    False for pseu
1aa0: 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61 62  do-table or vtab
1ab0: 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64   */.){.  /* Find
1ac0: 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
1ad0: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73   that will be us
1ae0: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1af0: 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20  blob of memory. 
1b00: 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72   ** required for
1b10: 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72   this VdbeCursor
1b20: 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69   structure. It i
1b30: 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20  s convenient to 
1b40: 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65  use a .  ** vdbe
1b50: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20   memory cell to 
1b60: 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72  manage the memor
1b70: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
1b80: 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a  uired for a.  **
1b90: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1ba0: 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f  cture for the fo
1bb0: 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a  llowing reasons:
1bc0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53  .  **.  **   * S
1bd0: 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20  ometimes cursor 
1be0: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
1bf0: 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66   for a couple of
1c00: 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20   different.  ** 
1c10: 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20      purposes in 
1c20: 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20  a vdbe program. 
1c30: 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73  The different us
1c40: 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65  es might require
1c50: 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72  .  **     differ
1c60: 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61  ent sized alloca
1c70: 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65  tions. Memory ce
1c80: 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77  lls provide grow
1c90: 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c  able.  **     al
1ca0: 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  locations..  **.
1cb0: 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73    **   * When us
1cc0: 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ing ENABLE_MEMOR
1cd0: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65  Y_MANAGEMENT, me
1ce0: 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72  mory cell buffer
1cf0: 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62  s can.  **     b
1d00: 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76  e freed lazily v
1d10: 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72  ia the sqlite3_r
1d20: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20  elease_memory() 
1d30: 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20  API. This.  **  
1d40: 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65     minimizes the
1d50: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f   number of mallo
1d60: 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20  c calls made by 
1d70: 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a  the system..  **
1d80: 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c  .  ** Memory cel
1d90: 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61  ls for cursors a
1da0: 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20  re allocated at 
1db0: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61  the top of the a
1dc0: 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63  ddress.  ** spac
1dd0: 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  e. Memory cell (
1de0: 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70  p->nMem) corresp
1df0: 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30  onds to cursor 0
1e00: 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a  . Space for.  **
1e10: 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e   cursor 1 is man
1e20: 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63  aged by memory c
1e30: 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c  ell (p->nMem-1),
1e40: 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d   etc..  */.  Mem
1e50: 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65   *pMem = &p->aMe
1e60: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b  m[p->nMem-iCur];
1e70: 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20  ..  int nByte;. 
1e80: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1e90: 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20   = 0;.  nByte = 
1ea0: 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69  .      ROUND8(si
1eb0: 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29  zeof(VdbeCursor)
1ec0: 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74  ) + .      (isBt
1ed0: 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65  reeCursor?sqlite
1ee0: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1ef0: 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20 20 32  ():0) + .      2
1f00: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
1f10: 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  32);..  assert( 
1f20: 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  iCur<p->nCursor 
1f30: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  );.  if( p->apCs
1f40: 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20 20 73  r[iCur] ){.    s
1f50: 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
1f60: 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
1f70: 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e  [iCur]);.    p->
1f80: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b  apCsr[iCur] = 0;
1f90: 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c 49 54  .  }.  if( SQLIT
1fa0: 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62  E_OK==sqlite3Vdb
1fb0: 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e  eMemGrow(pMem, n
1fc0: 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20  Byte, 0) ){.    
1fd0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
1fe0: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
1ff0: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
2000: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
2010: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2020: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44  r));.    pCx->iD
2030: 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78  b = iDb;.    pCx
2040: 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c  ->nField = nFiel
2050: 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69 65 6c  d;.    if( nFiel
2060: 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  d ){.      pCx->
2070: 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a 29 26  aType = (u32 *)&
2080: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
2090: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
20a0: 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ))];.    }.    i
20b0: 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f 72  f( isBtreeCursor
20c0: 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 70   ){.      pCx->p
20d0: 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72 73  Cursor = (BtCurs
20e0: 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20 26  or*).          &
20f0: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
2100: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
2110: 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65  ))+2*nField*size
2120: 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20 20 20  of(u32)];.      
2130: 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
2140: 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43 75 72  orZero(pCx->pCur
2150: 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2160: 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a    return pCx;.}.
2170: 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f  ./*.** Try to co
2180: 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e  nvert a value in
2190: 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70  to a numeric rep
21a0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77  resentation if w
21b0: 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77  e can.** do so w
21c0: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
21d0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20  nformation.  In 
21e0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
21f0: 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f  the string.** lo
2200: 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65  oks like a numbe
2210: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e  r, convert it in
2220: 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66  to a number.  If
2230: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   it does not.** 
2240: 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62  look like a numb
2250: 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f  er, leave it alo
2260: 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ne..*/.static vo
2270: 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  id applyNumericA
2280: 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65  ffinity(Mem *pRe
2290: 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63 2d  c){.  if( (pRec-
22a0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52 65  >flags & (MEM_Re
22b0: 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20  al|MEM_Int))==0 
22c0: 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 56  ){.    double rV
22d0: 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20 69 56  alue;.    i64 iV
22e0: 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65 6e 63  alue;.    u8 enc
22f0: 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20   = pRec->enc;.  
2300: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2310: 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 29  gs&MEM_Str)==0 )
2320: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66 28   return;.    if(
2330: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52 65   sqlite3AtoF(pRe
2340: 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20 70  c->z, &rValue, p
2350: 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20  Rec->n, enc)==0 
2360: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66  ) return;.    if
2370: 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  ( 0==sqlite3Atoi
2380: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61  64(pRec->z, &iVa
2390: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e  lue, pRec->n, en
23a0: 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52 65 63  c) ){.      pRec
23b0: 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a  ->u.i = iValue;.
23c0: 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67        pRec->flag
23d0: 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  s |= MEM_Int;.  
23e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
23f0: 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75 65 3b  Rec->r = rValue;
2400: 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61  .      pRec->fla
2410: 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a  gs |= MEM_Real;.
2420: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a      }.  }.}../*.
2430: 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73  ** Processing is
2440: 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68   determine by th
2450: 65 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d  e affinity param
2460: 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  eter:.**.** SQLI
2470: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a  TE_AFF_INTEGER:.
2480: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ** SQLITE_AFF_RE
2490: 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  AL:.** SQLITE_AF
24a0: 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20  F_NUMERIC:.**   
24b0: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
24c0: 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67  pRec to an integ
24d0: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
24e0: 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c  n or a .**    fl
24f0: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70  oating-point rep
2500: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61  resentation if a
2510: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2520: 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69  entation.**    i
2530: 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20  s not possible. 
2540: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69   Note that the i
2550: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2560: 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61  ation is.**    a
2570: 6c 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c  lways preferred,
2580: 20 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66   even if the aff
2590: 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62  inity is REAL, b
25a0: 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20  ecause.**    an 
25b0: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
25c0: 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73  tation is more s
25d0: 70 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f  pace efficient o
25e0: 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51  n disk..**.** SQ
25f0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a  LITE_AFF_TEXT:.*
2600: 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65  *    Convert pRe
2610: 63 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72  c to a text repr
2620: 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  esentation..**.*
2630: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  * SQLITE_AFF_NON
2640: 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20  E:.**    No-op. 
2650: 20 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67   pRec is unchang
2660: 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ed..*/.static vo
2670: 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  id applyAffinity
2680: 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20  (.  Mem *pRec,  
2690: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
26a0: 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66  alue to apply af
26b0: 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63  finity to */.  c
26c0: 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20  har affinity,   
26d0: 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
26e0: 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
26f0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20   */.  u8 enc    
2700: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2710: 20 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64   this text encod
2720: 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20  ing */.){.  if( 
2730: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
2740: 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20  _AFF_TEXT ){.   
2750: 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74   /* Only attempt
2760: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2770: 74 6f 20 54 45 58 54 20 69 66 20 74 68 65 72 65  to TEXT if there
2780: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f   is an integer o
2790: 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65  r real.    ** re
27a0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c  presentation (bl
27b0: 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e  ob and NULL do n
27c0: 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64  ot get converted
27d0: 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a  ) but no string.
27e0: 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74      ** represent
27f0: 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20  ation..    */.  
2800: 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e    if( 0==(pRec->
2810: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26  flags&MEM_Str) &
2820: 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28  & (pRec->flags&(
2830: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74  MEM_Real|MEM_Int
2840: 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  )) ){.      sqli
2850: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
2860: 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29 3b 0a  ify(pRec, enc);.
2870: 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e      }.    pRec->
2880: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52  flags &= ~(MEM_R
2890: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  eal|MEM_Int);.  
28a0: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
28b0: 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ty!=SQLITE_AFF_N
28c0: 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ONE ){.    asser
28d0: 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  t( affinity==SQL
28e0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
28f0: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
2900: 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20  ITE_AFF_REAL.   
2910: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66            || aff
2920: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
2930: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20  F_NUMERIC );.   
2940: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
2950: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2960: 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
2970: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
2980: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2990: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
29a0: 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  pRec);.    }.  }
29b0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
29c0: 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79 70   convert the typ
29d0: 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  e of a function 
29e0: 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72 65  argument or a re
29f0: 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69  sult column.** i
2a00: 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65  nto a numeric re
2a10: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55  presentation.  U
2a20: 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47 45  se either INTEGE
2a30: 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68 65  R or REAL whiche
2a40: 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70  ver.** is approp
2a50: 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79  riate.  But only
2a60: 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69   do the conversi
2a70: 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73 73  on if it is poss
2a80: 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20  ible without.** 
2a90: 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
2aa0: 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20 74  ion and return t
2ab0: 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65 20  he revised type 
2ac0: 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2e  of the argument.
2ad0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
2ae0: 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79  value_numeric_ty
2af0: 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  pe(sqlite3_value
2b00: 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a   *pVal){.  Mem *
2b10: 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61  pMem = (Mem*)pVa
2b20: 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 74  l;.  if( pMem->t
2b30: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2b40: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d   ){.    applyNum
2b50: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2b60: 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  m);.    sqlite3V
2b70: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
2b80: 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74  pMem);.  }.  ret
2b90: 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a  urn pMem->type;.
2ba0: 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65  }../*.** Exporte
2bb0: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70  d version of app
2bc0: 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68  lyAffinity(). Th
2bd0: 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20  is one works on 
2be0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2bf0: 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65  .** not the inte
2c00: 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a  rnal Mem* type..
2c10: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2c20: 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
2c30: 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  y(.  sqlite3_val
2c40: 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20  ue *pVal, .  u8 
2c50: 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20  affinity, .  u8 
2c60: 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66  enc.){.  applyAf
2c70: 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56  finity((Mem *)pV
2c80: 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  al, affinity, en
2c90: 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  c);.}..#ifdef SQ
2ca0: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
2cb0: 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74   Write a nice st
2cc0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
2cd0: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  ion of the conte
2ce0: 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d  nts of cell pMem
2cf0: 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20  .** into buffer 
2d00: 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75  zBuf, length nBu
2d10: 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  f..*/.void sqlit
2d20: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
2d30: 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20  rint(Mem *pMem, 
2d40: 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63  char *zBuf){.  c
2d50: 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66  har *zCsr = zBuf
2d60: 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d  ;.  int f = pMem
2d70: 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74  ->flags;..  stat
2d80: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  ic const char *c
2d90: 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20  onst encnames[] 
2da0: 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c  = {"(X)", "(8)",
2db0: 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42   "(16LE)", "(16B
2dc0: 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d  E)"};..  if( f&M
2dd0: 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69  EM_Blob ){.    i
2de0: 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63  nt i;.    char c
2df0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
2e00: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63  M_Dyn ){.      c
2e10: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
2e20: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
2e30: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
2e40: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
2e50: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
2e60: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63  tatic ){.      c
2e70: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
2e80: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
2e90: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
2ea0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
2eb0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
2ec0: 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  m ){.      c = '
2ed0: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
2ee0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
2ef0: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
2f00: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
2f10: 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20      c = 's';.   
2f20: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
2f30: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
2f40: 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20  sr, "%c", c);.  
2f50: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2f60: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
2f70: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
2f80: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
2f90: 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29   "%d[", pMem->n)
2fa0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
2fb0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
2fc0: 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  sr);.    for(i=0
2fd0: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
2fe0: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
2ff0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3000: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30  f(100, zCsr, "%0
3010: 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d  2X", ((int)pMem-
3020: 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a  >z[i] & 0xFF));.
3030: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
3040: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3050: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66  sr);.    }.    f
3060: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
3070: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
3080: 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20  .      char z = 
3090: 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20  pMem->z[i];.    
30a0: 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e    if( z<32 || z>
30b0: 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20  126 ) *zCsr++ = 
30c0: 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20  '.';.      else 
30d0: 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20  *zCsr++ = z;.   
30e0: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
30f0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3100: 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61  sr, "]%s", encna
3110: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3120: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
3130: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3140: 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20  r);.    if( f & 
3150: 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
3160: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3170: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25  tf(100, zCsr,"+%
3180: 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72  dz",pMem->u.nZer
3190: 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b  o);.      zCsr +
31a0: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
31b0: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20  0(zCsr);.    }. 
31c0: 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b     *zCsr = '\0';
31d0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26  .  }else if( f &
31e0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
31f0: 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42  int j, k;.    zB
3200: 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20  uf[0] = ' ';.   
3210: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e   if( f & MEM_Dyn
3220: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
3230: 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  ] = 'z';.      a
3240: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3250: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
3260: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
3270: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3280: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
3290: 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20  zBuf[1] = 't';. 
32a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
32b0: 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45  & (MEM_Dyn|MEM_E
32c0: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
32d0: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
32e0: 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20  EM_Ephem ){.    
32f0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b    zBuf[1] = 'e';
3300: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3310: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3320: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
3330: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3340: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a   zBuf[1] = 's';.
3350: 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b      }.    k = 2;
3360: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3370: 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66  rintf(100, &zBuf
3380: 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d  [k], "%d", pMem-
3390: 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  >n);.    k += sq
33a0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
33b0: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
33c0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20  f[k++] = '[';.  
33d0: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20    for(j=0; j<15 
33e0: 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b  && j<pMem->n; j+
33f0: 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d  +){.      u8 c =
3400: 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20   pMem->z[j];.   
3410: 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26     if( c>=0x20 &
3420: 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20  & c<0x7f ){.    
3430: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3440: 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
3450: 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b          zBuf[k++
3460: 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d  ] = '.';.      }
3470: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b  .    }.    zBuf[
3480: 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20  k++] = ']';.    
3490: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
34a0: 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65  (100,&zBuf[k], e
34b0: 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e  ncnames[pMem->en
34c0: 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  c]);.    k += sq
34d0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
34e0: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
34f0: 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a  f[k++] = 0;.  }.
3500: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3510: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
3520: 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61  .** Print the va
3530: 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65  lue of a registe
3540: 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75  r for tracing pu
3550: 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69  rposes:.*/.stati
3560: 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50  c void memTraceP
3570: 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c 20  rint(FILE *out, 
3580: 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70  Mem *p){.  if( p
3590: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
35a0: 76 61 6c 69 64 20 29 7b 0a 20 20 20 20 66 70 72  valid ){.    fpr
35b0: 69 6e 74 66 28 6f 75 74 2c 20 22 20 75 6e 64 65  intf(out, " unde
35c0: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
35d0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
35e0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
35f0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e  fprintf(out, " N
3600: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3610: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3620: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3630: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3640: 53 74 72 29 20 29 7b 0a 20 20 20 20 66 70 72 69  Str) ){.    fpri
3650: 6e 74 66 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c  ntf(out, " si:%l
3660: 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20  ld", p->u.i);.  
3670: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
3680: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
3690: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
36a0: 20 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75   " i:%lld", p->u
36b0: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
36c0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
36d0: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
36e0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
36f0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 66  EM_Real ){.    f
3700: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a  printf(out, " r:
3710: 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64  %g", p->r);.#end
3720: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3730: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3740: 77 53 65 74 20 29 7b 0a 20 20 20 20 66 70 72 69  wSet ){.    fpri
3750: 6e 74 66 28 6f 75 74 2c 20 22 20 28 72 6f 77 73  ntf(out, " (rows
3760: 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  et)");.  }else{.
3770: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30      char zBuf[20
3780: 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0];.    sqlite3V
3790: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
37a0: 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  t(p, zBuf);.    
37b0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 22  fprintf(out, " "
37c0: 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  );.    fprintf(o
37d0: 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
37e0: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
37f0: 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65  id registerTrace
3800: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20  (FILE *out, int 
3810: 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  iReg, Mem *p){. 
3820: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 52   fprintf(out, "R
3830: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
3840: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
3850: 6e 74 28 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70  nt(out, p);.  fp
3860: 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29  rintf(out, "\n")
3870: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ;.}.#endif..#ifd
3880: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3890: 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54  #  define REGIST
38a0: 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66  ER_TRACE(R,M) if
38b0: 28 70 2d 3e 74 72 61 63 65 29 72 65 67 69 73 74  (p->trace)regist
38c0: 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
38d0: 2c 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64  ,R,M).#else.#  d
38e0: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
38f0: 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66  RACE(R,M).#endif
3900: 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  ...#ifdef VDBE_P
3910: 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68  ROFILE../* .** h
3920: 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73  wtime.h contains
3930: 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65   inline assemble
3940: 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65  r code for imple
3950: 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68  menting .** high
3960: 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d  -performance tim
3970: 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f  ing routines..*/
3980: 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d  .#include "hwtim
3990: 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e.h"..#endif../*
39a0: 0a 2a 2a 20 54 68 65 20 43 48 45 43 4b 5f 46 4f  .** The CHECK_FO
39b0: 52 5f 49 4e 54 45 52 52 55 50 54 20 6d 61 63 72  R_INTERRUPT macr
39c0: 6f 20 64 65 66 69 6e 65 64 20 68 65 72 65 20 6c  o defined here l
39d0: 6f 6f 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ooks to see if t
39e0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e  he.** sqlite3_in
39f0: 74 65 72 72 75 70 74 28 29 20 72 6f 75 74 69 6e  terrupt() routin
3a00: 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  e has been calle
3a10: 64 2e 20 20 49 66 20 69 74 20 68 61 73 20 62 65  d.  If it has be
3a20: 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63  en, then.** proc
3a30: 65 73 73 69 6e 67 20 6f 66 20 74 68 65 20 56 44  essing of the VD
3a40: 42 45 20 70 72 6f 67 72 61 6d 20 69 73 20 69 6e  BE program is in
3a50: 74 65 72 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a  terrupted..**.**
3a60: 20 54 68 69 73 20 6d 61 63 72 6f 20 61 64 64 65   This macro adde
3a70: 64 20 74 6f 20 65 76 65 72 79 20 69 6e 73 74 72  d to every instr
3a80: 75 63 74 69 6f 6e 20 74 68 61 74 20 64 6f 65 73  uction that does
3a90: 20 61 20 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72   a jump in order
3aa0: 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74   to.** implement
3ab0: 20 61 20 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74   a loop.  This t
3ac0: 65 73 74 20 75 73 65 64 20 74 6f 20 62 65 20 6f  est used to be o
3ad0: 6e 20 65 76 65 72 79 20 73 69 6e 67 6c 65 20 69  n every single i
3ae0: 6e 73 74 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62  nstruction,.** b
3af0: 75 74 20 74 68 61 74 20 6d 65 61 6e 74 20 77 65  ut that meant we
3b00: 20 6d 6f 72 65 20 74 65 73 74 69 6e 67 20 74 68   more testing th
3b10: 61 6e 20 77 65 20 6e 65 65 64 65 64 2e 20 20 42  an we needed.  B
3b20: 79 20 6f 6e 6c 79 20 74 65 73 74 69 6e 67 20 74  y only testing t
3b30: 68 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75  he.** flag on ju
3b40: 6d 70 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c  mp instructions,
3b50: 20 77 65 20 67 65 74 20 61 20 28 73 6d 61 6c 6c   we get a (small
3b60: 29 20 73 70 65 65 64 20 69 6d 70 72 6f 76 65 6d  ) speed improvem
3b70: 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ent..*/.#define 
3b80: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3b90: 55 50 54 20 5c 0a 20 20 20 69 66 28 20 64 62 2d  UPT \.   if( db-
3ba0: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
3bb0: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
3bc0: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
3bd0: 0a 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  ...#ifndef NDEBU
3be0: 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  G./*.** This fun
3bf0: 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61  ction is only ca
3c00: 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
3c10: 20 61 6e 20 61 73 73 65 72 74 28 29 20 65 78 70   an assert() exp
3c20: 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63  ression. It.** c
3c30: 68 65 63 6b 73 20 74 68 61 74 20 74 68 65 20 73  hecks that the s
3c40: 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74  qlite3.nTransact
3c50: 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20  ion variable is 
3c60: 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f  correctly set to
3c70: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
3c80: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
3c90: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72  n savepoints cur
3ca0: 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a  rently in the .*
3cb0: 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  * linked list st
3cc0: 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65  arting at sqlite
3cd0: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a  3.pSavepoint..**
3ce0: 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a   .** Usage:.**.*
3cf0: 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 63 68  *     assert( ch
3d00: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
3d10: 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74  t(db) );.*/.stat
3d20: 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65  ic int checkSave
3d30: 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74  pointCount(sqlit
3d40: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e  e3 *db){.  int n
3d50: 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e   = 0;.  Savepoin
3d60: 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62  t *p;.  for(p=db
3d70: 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b  ->pSavepoint; p;
3d80: 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b   p=p->pNext) n++
3d90: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28  ;.  assert( n==(
3da0: 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
3db0: 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
3dc0: 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a  onSavepoint) );.
3dd0: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65    return 1;.}.#e
3de0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e  ndif../*.** Tran
3df0: 73 66 65 72 20 65 72 72 6f 72 20 6d 65 73 73 61  sfer error messa
3e00: 67 65 20 74 65 78 74 20 66 72 6f 6d 20 61 6e 20  ge text from an 
3e10: 73 71 6c 69 74 65 33 5f 76 74 61 62 2e 7a 45 72  sqlite3_vtab.zEr
3e20: 72 4d 73 67 20 28 74 65 78 74 20 73 74 6f 72 65  rMsg (text store
3e30: 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72 79 20 6f  d.** in memory o
3e40: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
3e50: 69 74 65 33 5f 6d 61 6c 6c 6f 63 29 20 69 6e 74  ite3_malloc) int
3e60: 6f 20 61 20 56 64 62 65 2e 7a 45 72 72 4d 73 67  o a Vdbe.zErrMsg
3e70: 20 28 74 65 78 74 20 73 74 6f 72 65 64 0a 2a 2a   (text stored.**
3e80: 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   in memory obtai
3e90: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
3ea0: 44 62 4d 61 6c 6c 6f 63 29 2e 0a 2a 2f 0a 73 74  DbMalloc)..*/.st
3eb0: 61 74 69 63 20 76 6f 69 64 20 69 6d 70 6f 72 74  atic void import
3ec0: 56 74 61 62 45 72 72 4d 73 67 28 56 64 62 65 20  VtabErrMsg(Vdbe 
3ed0: 2a 70 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  *p, sqlite3_vtab
3ee0: 20 2a 70 56 74 61 62 29 7b 0a 20 20 73 71 6c 69   *pVtab){.  sqli
3ef0: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
3f00: 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
3f10: 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
3f20: 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d  ;.  p->zErrMsg =
3f30: 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70   sqlite3DbStrDup
3f40: 28 64 62 2c 20 70 56 74 61 62 2d 3e 7a 45 72 72  (db, pVtab->zErr
3f50: 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Msg);.  sqlite3_
3f60: 66 72 65 65 28 70 56 74 61 62 2d 3e 7a 45 72 72  free(pVtab->zErr
3f70: 4d 73 67 29 3b 0a 20 20 70 56 74 61 62 2d 3e 7a  Msg);.  pVtab->z
3f80: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 7d 0a 0a 0a  ErrMsg = 0;.}...
3f90: 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73  /*.** Execute as
3fa0: 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20   much of a VDBE 
3fb0: 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61  program as we ca
3fc0: 6e 20 74 68 65 6e 20 72 65 74 75 72 6e 2e 0a 2a  n then return..*
3fd0: 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65  *.** sqlite3Vdbe
3fe0: 4d 61 6b 65 52 65 61 64 79 28 29 20 6d 75 73 74  MakeReady() must
3ff0: 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66 6f 72   be called befor
4000: 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  e this routine i
4010: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 6c  n order to.** cl
4020: 6f 73 65 20 74 68 65 20 70 72 6f 67 72 61 6d 20  ose the program 
4030: 77 69 74 68 20 61 20 66 69 6e 61 6c 20 4f 50 5f  with a final OP_
4040: 48 61 6c 74 20 61 6e 64 20 74 6f 20 73 65 74 20  Halt and to set 
4050: 75 70 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 73  up the callbacks
4060: 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65 72 72 6f  .** and the erro
4070: 72 20 6d 65 73 73 61 67 65 20 70 6f 69 6e 74 65  r message pointe
4080: 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 65 76 65  r..**.** Wheneve
4090: 72 20 61 20 72 6f 77 20 6f 72 20 72 65 73 75 6c  r a row or resul
40a0: 74 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61  t data is availa
40b0: 62 6c 65 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  ble, this routin
40c0: 65 20 77 69 6c 6c 20 65 69 74 68 65 72 0a 2a 2a  e will either.**
40d0: 20 69 6e 76 6f 6b 65 20 74 68 65 20 72 65 73 75   invoke the resu
40e0: 6c 74 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20  lt callback (if 
40f0: 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72  there is one) or
4100: 20 72 65 74 75 72 6e 20 77 69 74 68 0a 2a 2a 20   return with.** 
4110: 53 51 4c 49 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a  SQLITE_ROW..**.*
4120: 2a 20 49 66 20 61 6e 20 61 74 74 65 6d 70 74 20  * If an attempt 
4130: 69 73 20 6d 61 64 65 20 74 6f 20 6f 70 65 6e 20  is made to open 
4140: 61 20 6c 6f 63 6b 65 64 20 64 61 74 61 62 61 73  a locked databas
4150: 65 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  e, then this rou
4160: 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c 20 65 69 74  tine.** will eit
4170: 68 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 62  her invoke the b
4180: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  usy callback (if
4190: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f   there is one) o
41a0: 72 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 72 65 74  r it will.** ret
41b0: 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 2e  urn SQLITE_BUSY.
41c0: 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72  .**.** If an err
41d0: 6f 72 20 6f 63 63 75 72 73 2c 20 61 6e 20 65 72  or occurs, an er
41e0: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 77  ror message is w
41f0: 72 69 74 74 65 6e 20 74 6f 20 6d 65 6d 6f 72 79  ritten to memory
4200: 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f   obtained.** fro
4210: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
4220: 28 29 20 61 6e 64 20 70 2d 3e 7a 45 72 72 4d 73  () and p->zErrMs
4230: 67 20 69 73 20 6d 61 64 65 20 74 6f 20 70 6f 69  g is made to poi
4240: 6e 74 20 74 6f 20 74 68 61 74 20 6d 65 6d 6f 72  nt to that memor
4250: 79 2e 0a 2a 2a 20 54 68 65 20 65 72 72 6f 72 20  y..** The error 
4260: 63 6f 64 65 20 69 73 20 73 74 6f 72 65 64 20 69  code is stored i
4270: 6e 20 70 2d 3e 72 63 20 61 6e 64 20 74 68 69 73  n p->rc and this
4280: 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
4290: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
42a0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 61 6c 6c  *.** If the call
42b0: 62 61 63 6b 20 65 76 65 72 20 72 65 74 75 72 6e  back ever return
42c0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
42d0: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 65 78 69   the program exi
42e0: 74 73 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ts.** immediatel
42f0: 79 2e 20 20 54 68 65 72 65 20 77 69 6c 6c 20 62  y.  There will b
4300: 65 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61  e no error messa
4310: 67 65 20 62 75 74 20 74 68 65 20 70 2d 3e 72 63  ge but the p->rc
4320: 20 66 69 65 6c 64 20 69 73 0a 2a 2a 20 73 65 74   field is.** set
4330: 20 74 6f 20 53 51 4c 49 54 45 5f 41 42 4f 52 54   to SQLITE_ABORT
4340: 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e   and this routin
4350: 65 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51  e will return SQ
4360: 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a  LITE_ERROR..**.*
4370: 2a 20 41 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  * A memory alloc
4380: 61 74 69 6f 6e 20 65 72 72 6f 72 20 63 61 75 73  ation error caus
4390: 65 73 20 70 2d 3e 72 63 20 74 6f 20 62 65 20 73  es p->rc to be s
43a0: 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d  et to SQLITE_NOM
43b0: 45 4d 20 61 6e 64 20 74 68 69 73 0a 2a 2a 20 72  EM and this.** r
43c0: 6f 75 74 69 6e 65 20 74 6f 20 72 65 74 75 72 6e  outine to return
43d0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
43e0: 2a 0a 2a 2a 20 4f 74 68 65 72 20 66 61 74 61 6c  *.** Other fatal
43f0: 20 65 72 72 6f 72 73 20 72 65 74 75 72 6e 20 53   errors return S
4400: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
4410: 2a 2a 20 41 66 74 65 72 20 74 68 69 73 20 72 6f  ** After this ro
4420: 75 74 69 6e 65 20 68 61 73 20 66 69 6e 69 73 68  utine has finish
4430: 65 64 2c 20 73 71 6c 69 74 65 33 56 64 62 65 46  ed, sqlite3VdbeF
4440: 69 6e 61 6c 69 7a 65 28 29 20 73 68 6f 75 6c 64  inalize() should
4450: 20 62 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63   be.** used to c
4460: 6c 65 61 6e 20 75 70 20 74 68 65 20 6d 65 73 73  lean up the mess
4470: 20 74 68 61 74 20 77 61 73 20 6c 65 66 74 20 62   that was left b
4480: 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ehind..*/.int sq
4490: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a 20  lite3VdbeExec(. 
44a0: 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20 20   Vdbe *p        
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
44c0: 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20  he VDBE */.){.  
44d0: 69 6e 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20  int pc=0;       
44e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
44f0: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
4500: 72 20 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d  r */.  Op *aOp =
4510: 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20   p->aOp;        
4520: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
4530: 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70  aOp */.  Op *pOp
4540: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4550: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f      /* Current o
4560: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  peration */.  in
4570: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
4580: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  ;        /* Valu
4590: 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20  e to return */. 
45a0: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
45b0: 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54  ->db;       /* T
45c0: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  he database */. 
45d0: 20 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f   u8 resetSchemaO
45e0: 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52  nFault = 0; /* R
45f0: 65 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65  eset schema afte
4600: 72 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f  r an error if po
4610: 73 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65  sitive */.  u8 e
4620: 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62  ncoding = ENC(db
4630: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61  );     /* The da
4640: 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20  tabase encoding 
4650: 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72  */.  int iCompar
4660: 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  e = 0;          
4670: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73  /* Result of las
4680: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65  t OP_Compare ope
4690: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  ration */.  unsi
46a0: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
46b0: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
46c0: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
46d0: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
46e0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
46f0: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4700: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4710: 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 20  rogressOps = 0; 
4720: 2f 2a 20 6e 56 6d 53 74 65 70 20 61 74 20 6c 61  /* nVmStep at la
4730: 73 74 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  st progress call
4740: 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a  back. */.#endif.
4750: 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d    Mem *aMem = p-
4760: 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20  >aMem;       /* 
4770: 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20  Copy of p->aMem 
4780: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d  */.  Mem *pIn1 =
4790: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
47a0: 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65  /* 1st input ope
47b0: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
47c0: 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In2 = 0;        
47d0: 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75       /* 2nd inpu
47e0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
47f0: 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20  em *pIn3 = 0;   
4800: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64            /* 3rd
4810: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
4820: 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20  /.  Mem *pOut = 
4830: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4840: 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64  * Output operand
4850: 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d   */.  int *aPerm
4860: 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ute = 0;        
4870: 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20   /* Permutation 
4880: 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f  of columns for O
4890: 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20 69  P_Compare */.  i
48a0: 36 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  64 lastRowid = d
48b0: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f  b->lastRowid;  /
48c0: 2a 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f 66  * Saved value of
48d0: 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74   the last insert
48e0: 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65 66   ROWID */.#ifdef
48f0: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
4900: 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20  u64 start;      
4910: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50             /* CP
4920: 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74  U clock count at
4930: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
4940: 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50 63   */.  int origPc
4950: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4960: 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75 6e   /* Program coun
4970: 74 65 72 20 61 74 20 73 74 61 72 74 20 6f 66 20  ter at start of 
4980: 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  opcode */.#endif
4990: 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53  .  /*** INSERT S
49a0: 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20  TACK UNION HERE 
49b0: 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  ***/..  assert( 
49c0: 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d  p->magic==VDBE_M
49d0: 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20  AGIC_RUN );  /* 
49e0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76  sqlite3_step() v
49f0: 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a  erifies this */.
4a00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74    sqlite3VdbeEnt
4a10: 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e  er(p);.  if( p->
4a20: 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  rc==SQLITE_NOMEM
4a30: 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
4a40: 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c  happens if a mal
4a50: 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20 63  loc() inside a c
4a60: 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  all to sqlite3_c
4a70: 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a  olumn_text() or.
4a80: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63      ** sqlite3_c
4a90: 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66  olumn_text16() f
4aa0: 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67  ailed.  */.    g
4ab0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
4ac0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d    assert( p->rc=
4ad0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d  =SQLITE_OK || p-
4ae0: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  >rc==SQLITE_BUSY
4af0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
4b00: 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d  >bIsReader || p-
4b10: 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a  >readOnly!=0 );.
4b20: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
4b30: 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70  _OK;.  assert( p
4b40: 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a  ->explain==0 );.
4b50: 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20    p->pResultSet 
4b60: 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48  = 0;.  db->busyH
4b70: 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30  andler.nBusy = 0
4b80: 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  ;.  CHECK_FOR_IN
4b90: 54 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74  TERRUPT;.  sqlit
4ba0: 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
4bb0: 28 70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  (p);.#ifdef SQLI
4bc0: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4bd0: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4be0: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4bf0: 70 63 3d 3d 30 20 20 26 26 20 28 70 2d 3e 64 62  pc==0  && (p->db
4c00: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4c10: 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 21 3d 30  _VdbeListing)!=0
4c20: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
4c30: 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20     printf("VDBE 
4c40: 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a  Program Listing:
4c50: 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  \n");.    sqlite
4c60: 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29  3VdbePrintSql(p)
4c70: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
4c80: 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20  <p->nOp; i++){. 
4c90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4ca0: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
4cb0: 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20  i, &aOp[i]);.   
4cc0: 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33   }.  }.  sqlite3
4cd0: 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
4ce0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28  );.#endif.  for(
4cf0: 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51  pc=p->pc; rc==SQ
4d00: 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a  LITE_OK; pc++){.
4d10: 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
4d20: 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  0 && pc<p->nOp )
4d30: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61  ;.    if( db->ma
4d40: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
4d50: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66  o no_mem;.#ifdef
4d60: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
4d70: 20 20 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20    origPc = pc;. 
4d80: 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74     start = sqlit
4d90: 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64  e3Hwtime();.#end
4da0: 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b  if.    nVmStep++
4db0: 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70  ;.    pOp = &aOp
4dc0: 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e  [pc];..    /* On
4dd0: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
4de0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
4df0: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
4e00: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4e10: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
4e20: 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
4e30: 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20    if( pc==0 ){. 
4e40: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56         printf("V
4e50: 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20 54 72  DBE Execution Tr
4e60: 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ace:\n");.      
4e70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4e80: 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20 20  ntSql(p);.      
4e90: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
4ea0: 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72  dbePrintOp(p->tr
4eb0: 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20  ace, pc, pOp);. 
4ec0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
4ed0: 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b    ..    /* Check
4ee0: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65   to see if we ne
4ef0: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61  ed to simulate a
4f00: 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68  n interrupt.  Th
4f10: 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a  is only happens.
4f20: 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76      ** if we hav
4f30: 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74  e a special test
4f40: 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23   build..    */.#
4f50: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
4f60: 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  T.    if( sqlite
4f70: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
4f80: 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t>0 ){.      sql
4f90: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
4fa0: 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66  ount--;.      if
4fb0: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
4fc0: 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a  upt_count==0 ){.
4fd0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
4fe0: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
4ff0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
5000: 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61  dif..    /* On a
5010: 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74  ny opcode with t
5020: 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c 65  he "out2-prerele
5030: 61 73 65 22 20 74 61 67 2c 20 66 72 65 65 20 61  ase" tag, free a
5040: 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65 72 6e  ny.    ** extern
5050: 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f  al allocations o
5060: 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e  ut of mem[p2] an
5070: 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f  d set mem[p2] to
5080: 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e   be.    ** an un
5090: 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65 72 2e  defined integer.
50a0: 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c 20 65    Opcodes will e
50b0: 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20 74 68  ither fill in th
50c0: 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a  e integer.    **
50d0: 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72   value or conver
50e0: 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64  t mem[p2] to a d
50f0: 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e 0a 20  ifferent type.. 
5100: 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
5110: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d  ( pOp->opflags==
5120: 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
5130: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
5140: 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  e] );.    if( pO
5150: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5160: 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41  LG_OUT2_PRERELEA
5170: 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  SE ){.      asse
5180: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5190: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
51a0: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
51b0: 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20  );.      pOut = 
51c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
51d0: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
51e0: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
51f0: 0a 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52 65  .      VdbeMemRe
5200: 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20  lease(pOut);.   
5210: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
5220: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a   MEM_Int;.    }.
5230: 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63  .    /* Sanity c
5240: 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72  hecking on other
5250: 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66   operands */.#if
5260: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
5270: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5280: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
5290: 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N1)!=0 ){.      
52a0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
52b0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
52c0: 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  t( pOp->p1<=p->n
52d0: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73  Mem );.      ass
52e0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
52f0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20  &aMem[pOp->p1]) 
5300: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
5310: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
5320: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29   &aMem[pOp->p1])
5330: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5340: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5350: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5360: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5370: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
5380: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5390: 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
53a0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
53b0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
53c0: 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p2]) );.      
53d0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
53e0: 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p2, &aMem[pO
53f0: 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p2]);.    }. 
5400: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
5410: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33  lags & OPFLG_IN3
5420: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5430: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
5440: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5450: 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
5460: 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  m );.      asser
5470: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5480: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
5490: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
54a0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26  TRACE(pOp->p3, &
54b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
54c0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
54d0: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
54e0: 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a  FLG_OUT2)!=0 ){.
54f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5500: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
5510: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5520: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
5530: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5540: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5550: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p2]);.    }.  
5560: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5570: 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  ags & OPFLG_OUT3
5580: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5590: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
55a0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
55b0: 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
55c0: 6d 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  m );.      memAb
55d0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
55e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
55f0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a      }.#endif.  .
5600: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
5610: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
5620: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5630: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5640: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5650: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5660: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
5670: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
5680: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
5690: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
56a0: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
56b0: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
56c0: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
56d0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
56e0: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
56f0: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
5700: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
5710: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
5720: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
5730: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
5740: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
5750: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
5760: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
5770: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
5780: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
5790: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
57a0: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
57b0: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
57c0: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
57d0: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
57e0: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
57f0: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5800: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5810: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
5820: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
5830: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
5840: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
5850: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
5860: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
5870: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
5880: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
5890: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
58a0: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
58b0: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
58c0: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
58d0: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
58e0: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
58f0: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5900: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5910: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5920: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5930: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5940: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5950: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5960: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
5970: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
5980: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
5990: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
59a0: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
59b0: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
59c0: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
59d0: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
59e0: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
59f0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
5a00: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
5a10: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
5a20: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
5a30: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
5a40: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
5a50: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
5a60: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
5a70: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
5a80: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
5a90: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
5aa0: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
5ab0: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
5ac0: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
5ad0: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
5ae0: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
5af0: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
5b00: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
5b10: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
5b20: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
5b30: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
5b40: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
5b50: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72  n2, in3, out2_pr
5b60: 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20  erelease, out2, 
5b70: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
5b80: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
5b90: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
5ba0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
5bb0: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
5bc0: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
5bd0: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
5be0: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
5bf0: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
5c00: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
5c10: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
5c20: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
5c30: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
5c40: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
5c50: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
5c60: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
5c70: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
5c80: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
5c90: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
5ca0: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
5cb0: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
5cc0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
5cd0: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
5ce0: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
5cf0: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
5d00: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
5d10: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
5d20: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
5d30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
5d80: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
5d90: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
5da0: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
5db0: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
5dc0: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
5dd0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
5de0: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
5df0: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
5e00: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
5e10: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
5e20: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
5e30: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
5e40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
5e50: 75 6d 70 20 2a 2f 0a 20 20 70 63 20 3d 20 70 4f  ump */.  pc = pO
5e60: 70 2d 3e 70 32 20 2d 20 31 3b 0a 0a 20 20 2f 2a  p->p2 - 1;..  /*
5e70: 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61 72   Opcodes that ar
5e80: 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62 6f  e used as the bo
5e90: 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28  ttom of a loop (
5ea0: 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76  OP_Next, OP_Prev
5eb0: 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c  ,.  ** OP_VNext,
5ec0: 20 4f 50 5f 52 6f 77 53 65 74 4e 65 78 74 2c 20   OP_RowSetNext, 
5ed0: 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74  or OP_SorterNext
5ee0: 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20  ) all jump here 
5ef0: 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65  upon.  ** comple
5f00: 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20  tion.  Check to 
5f10: 73 65 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69  see if sqlite3_i
5f20: 6e 74 65 72 72 75 70 74 28 29 20 68 61 73 20 62  nterrupt() has b
5f30: 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20  een called.  ** 
5f40: 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67 72 65  or if the progre
5f50: 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64  ss callback need
5f60: 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e  s to be invoked.
5f70: 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73   .  **.  ** This
5f80: 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73 74 72   code uses unstr
5f90: 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22 20 73  uctured "goto" s
5fa0: 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f  tatements and do
5fb0: 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61  es not look clea
5fc0: 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68 61 74  n..  ** But that
5fd0: 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f 20 73   is not due to s
5fe0: 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68 61 62  loppy coding hab
5ff0: 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20 69 73  its. The code is
6000: 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a 20 20   written this.  
6010: 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72 66 6f  ** way for perfo
6020: 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64  rmance, to avoid
6030: 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e 20 74   having to run t
6040: 68 65 20 69 6e 74 65 72 72 75 70 74 20 61 6e 64  he interrupt and
6050: 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63   progress.  ** c
6060: 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f  hecks on every o
6070: 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68 65 6c  pcode.  This hel
6080: 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ps sqlite3_step(
6090: 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74 20 31  ) to run about 1
60a0: 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65 72 20  .5%.  ** faster 
60b0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22 76 61  according to "va
60c0: 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61  lgrind --tool=ca
60d0: 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65  chegrind" */.che
60e0: 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
60f0: 3a 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  :.  CHECK_FOR_IN
6100: 54 45 52 52 55 50 54 3b 0a 23 69 66 6e 64 65 66  TERRUPT;.#ifndef
6110: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
6120: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
6130: 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f   /* Call the pro
6140: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69  gress callback i
6150: 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72  f it is configur
6160: 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69  ed and the requi
6170: 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20  red number.  ** 
6180: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
6190: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
61a0: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
61b0: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
61c0: 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
61d0: 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20  Exec() or since 
61e0: 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72  last time the pr
61f0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
6200: 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a  was called)..  *
6210: 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73  * If the progres
6220: 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72  s callback retur
6230: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69  ns non-zero, exi
6240: 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  t the virtual ma
6250: 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20  chine with.  ** 
6260: 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51  a return code SQ
6270: 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f  LITE_ABORT..  */
6280: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
6290: 72 65 73 73 21 3d 30 20 26 26 20 28 6e 56 6d 53  ress!=0 && (nVmS
62a0: 74 65 70 20 2d 20 6e 50 72 6f 67 72 65 73 73 4f  tep - nProgressO
62b0: 70 73 29 3e 3d 64 62 2d 3e 6e 50 72 6f 67 72 65  ps)>=db->nProgre
62c0: 73 73 4f 70 73 20 29 7b 0a 20 20 20 20 69 6e 74  ssOps ){.    int
62d0: 20 70 72 63 3b 0a 20 20 20 20 70 72 63 20 3d 20   prc;.    prc = 
62e0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
62f0: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b  ->pProgressArg);
6300: 0a 20 20 20 20 69 66 28 20 70 72 63 21 3d 30 20  .    if( prc!=0 
6310: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
6320: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a  LITE_INTERRUPT;.
6330: 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
6340: 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20  error_halt;.    
6350: 7d 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f  }.    nProgressO
6360: 70 73 20 3d 20 6e 56 6d 53 74 65 70 3b 0a 20 20  ps = nVmStep;.  
6370: 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72  }.#endif.  .  br
6380: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6390: 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32 20  e:  Gosub P1 P2 
63a0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
63b0: 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61 64  e the current ad
63c0: 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73  dress onto regis
63d0: 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68  ter P1.** and th
63e0: 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  en jump to addre
63f0: 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ss P2..*/.case O
6400: 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20  P_Gosub: {      
6410: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
6420: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
6430: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
6440: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49  =p->nMem );.  pI
6450: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6460: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
6470: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
6480: 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 6d  M_Dyn)==0 );.  m
6490: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
64a0: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31  p, pIn1);.  pIn1
64b0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
64c0: 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  t;.  pIn1->u.i =
64d0: 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f   pc;.  REGISTER_
64e0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
64f0: 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70  In1);.  pc = pOp
6500: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61  ->p2 - 1;.  brea
6510: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6520: 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20    Return P1 * * 
6530: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
6540: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
6550: 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65  uction after the
6560: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
6570: 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  ster P1..*/.case
6580: 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20   OP_Return: {   
6590: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
65a0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
65b0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
65c0: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
65d0: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
65e0: 70 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e  pc = (int)pIn1->
65f0: 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  u.i;.  break;.}.
6600: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65  ./* Opcode:  Yie
6610: 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ld P1 * * * *.**
6620: 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f  .** Swap the pro
6630: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74  gram counter wit
6640: 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  h the value in r
6650: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63  egister P1..*/.c
6660: 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20  ase OP_Yield: { 
6670: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6680: 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73  1 */.  int pcDes
6690: 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  t;.  pIn1 = &aMe
66a0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
66b0: 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61  sert( (pIn1->fla
66c0: 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30  gs & MEM_Dyn)==0
66d0: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
66e0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
66f0: 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e  cDest = (int)pIn
6700: 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e  1->u.i;.  pIn1->
6710: 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49  u.i = pc;.  REGI
6720: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
6730: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20  p1, pIn1);.  pc 
6740: 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72 65 61  = pcDest;.  brea
6750: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6760: 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31    HaltIfNull  P1
6770: 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
6780: 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75  * Check the valu
6790: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
67a0: 2e 20 20 49 66 20 69 74 20 69 73 20 4e 55 4c 4c  .  If it is NULL
67b0: 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e 67   then Halt using
67c0: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 31  .** parameter P1
67d0: 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73 20  , P2, and P4 as 
67e0: 69 66 20 74 68 69 73 20 77 65 72 65 20 61 20 48  if this were a H
67f0: 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  alt instruction.
6800: 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75    If the.** valu
6810: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
6820: 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
6830: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  en this routine 
6840: 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  is a no-op..*/.c
6850: 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c  ase OP_HaltIfNul
6860: 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33  l: {      /* in3
6870: 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   */.  pIn3 = &aM
6880: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
6890: 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
68a0: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
68b0: 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
68c0: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
68d0: 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20  P_Halt */.}../* 
68e0: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31  Opcode:  Halt P1
68f0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
6900: 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c   Exit immediatel
6910: 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72  y.  All open cur
6920: 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c  sors, etc are cl
6930: 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69  osed.** automati
6940: 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  cally..**.** P1 
6950: 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  is the result co
6960: 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  de returned by s
6970: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73  qlite3_exec(), s
6980: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a  qlite3_reset(),.
6990: 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69  ** or sqlite3_fi
69a0: 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61  nalize().  For a
69b0: 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68   normal halt, th
69c0: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c  is should be SQL
69d0: 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46  ITE_OK (0)..** F
69e0: 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61  or errors, it ca
69f0: 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20  n be some other 
6a00: 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30  value.  If P1!=0
6a10: 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65   then P2 will de
6a20: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
6a30: 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c  er or not to rol
6a40: 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e  lback the curren
6a50: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  t transaction.  
6a60: 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a  Do not rollback.
6a70: 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69  ** if P2==OE_Fai
6a80: 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61  l. Do the rollba
6a90: 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c  ck if P2==OE_Rol
6aa0: 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f  lback.  If P2==O
6ab0: 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e  E_Abort,.** then
6ac0: 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68   back out all ch
6ad0: 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20  anges that have 
6ae0: 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20  occurred during 
6af0: 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f  this execution o
6b00: 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62  f the.** VDBE, b
6b10: 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  ut do not rollba
6b20: 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
6b30: 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  on. .**.** If P4
6b40: 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65   is not null the
6b50: 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  n it is an error
6b60: 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e   message string.
6b70: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  .**.** There is 
6b80: 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74  an implied "Halt
6b90: 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63 74   0 0 0" instruct
6ba0: 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20  ion inserted at 
6bb0: 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a  the very end of.
6bc0: 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d  ** every program
6bd0: 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73  .  So a jump pas
6be0: 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72  t the last instr
6bf0: 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72  uction of the pr
6c00: 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20  ogram.** is the 
6c10: 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e  same as executin
6c20: 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  g Halt..*/.case 
6c30: 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 69 66 28  OP_Halt: {.  if(
6c40: 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45   pOp->p1==SQLITE
6c50: 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65  _OK && p->pFrame
6c60: 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20   ){.    /* Halt 
6c70: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
6c80: 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20   Return control 
6c90: 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  to the parent fr
6ca0: 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65  ame. */.    Vdbe
6cb0: 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20  Frame *pFrame = 
6cc0: 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70  p->pFrame;.    p
6cd0: 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  ->pFrame = pFram
6ce0: 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20  e->pParent;.    
6cf0: 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20  p->nFrame--;.   
6d00: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
6d10: 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
6d20: 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d  hange);.    pc =
6d30: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d   sqlite3VdbeFram
6d40: 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29  eRestore(pFrame)
6d50: 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20  ;.    lastRowid 
6d60: 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
6d70: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
6d80: 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20  ==OE_Ignore ){. 
6d90: 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74       /* Instruct
6da0: 69 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50  ion pc is the OP
6db0: 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e  _Program that in
6dc0: 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72  voked the sub-pr
6dd0: 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20  ogram .      ** 
6de0: 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
6df0: 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70  halted. If the p
6e00: 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  2 instruction of
6e10: 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20   this OP_Halt.  
6e20: 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69      ** instructi
6e30: 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f  on is set to OE_
6e40: 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65  Ignore, then the
6e50: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20   sub-program is 
6e60: 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a  throwing.      *
6e70: 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65  * an IGNORE exce
6e80: 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63  ption. In this c
6e90: 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20  ase jump to the 
6ea0: 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65  address specifie
6eb0: 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68  d.      ** as th
6ec0: 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c  e p2 of the call
6ed0: 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20  ing OP_Program. 
6ee0: 20 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70   */.      pc = p
6ef0: 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a  ->aOp[pc].p2-1;.
6f00: 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20      }.    aOp = 
6f10: 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d  p->aOp;.    aMem
6f20: 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
6f30: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 70 2d  break;.  }..  p-
6f40: 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  >rc = pOp->p1;. 
6f50: 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
6f60: 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20  = (u8)pOp->p2;. 
6f70: 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69   p->pc = pc;.  i
6f80: 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  f( pOp->p4.z ){.
6f90: 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72      assert( p->r
6fa0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c!=SQLITE_OK );.
6fb0: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
6fc0: 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
6fd0: 2c 20 64 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d  , db, "%s", pOp-
6fe0: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 74 65 73 74  >p4.z);.    test
6ff0: 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f  case( sqlite3Glo
7000: 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d  balConfig.xLog!=
7010: 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
7020: 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61  _log(pOp->p1, "a
7030: 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25  bort at %d in [%
7040: 73 5d 3a 20 25 73 22 2c 20 70 63 2c 20 70 2d 3e  s]: %s", pc, p->
7050: 7a 53 71 6c 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  zSql, pOp->p4.z)
7060: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  ;.  }else if( p-
7070: 3e 72 63 20 29 7b 0a 20 20 20 20 74 65 73 74 63  >rc ){.    testc
7080: 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62  ase( sqlite3Glob
7090: 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30  alConfig.xLog!=0
70a0: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   );.    sqlite3_
70b0: 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 63 6f  log(pOp->p1, "co
70c0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 20  nstraint failed 
70d0: 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 22 2c 20  at %d in [%s]", 
70e0: 70 63 2c 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20  pc, p->zSql);.  
70f0: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
7100: 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61  VdbeHalt(p);.  a
7110: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
7120: 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51  E_BUSY || rc==SQ
7130: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
7140: 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20  QLITE_ERROR );. 
7150: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
7160: 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72  BUSY ){.    p->r
7170: 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
7180: 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  BUSY;.  }else{. 
7190: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
71a0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
71b0: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
71c0: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20  _CONSTRAINT );. 
71d0: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
71e0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e  QLITE_OK || db->
71f0: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20  nDeferredCons>0 
7200: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
7210: 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20  ImmCons>0 );.   
7220: 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51   rc = p->rc ? SQ
7230: 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c  LITE_ERROR : SQL
7240: 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20  ITE_DONE;.  }.  
7250: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
7260: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7270: 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20  Integer P1 P2 * 
7280: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32  * *.**.** The 32
7290: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
72a0: 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65 6e  ue P1 is written
72b0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
72c0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
72d0: 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20  teger: {        
72e0: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
72f0: 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75  ase */.  pOut->u
7300: 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  .i = pOp->p1;.  
7310: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7320: 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20  ode: Int64 * P2 
7330: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
7340: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
7350: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
7360: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
7370: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
7380: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
7390: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20  .case OP_Int64: 
73a0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
73b0: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
73c0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
73d0: 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20  >p4.pI64!=0 );. 
73e0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f   pOut->u.i = *pO
73f0: 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72  p->p4.pI64;.  br
7400: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
7410: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
7420: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
7430: 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20  code: Real * P2 
7440: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
7450: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
7460: 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e  a 64-bit floatin
7470: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a  g point value..*
7480: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
7490: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
74a0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
74b0: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
74c0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
74d0: 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65  _FLOAT, out2-pre
74e0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
74f0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52  t->flags = MEM_R
7500: 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21  eal;.  assert( !
7510: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f  sqlite3IsNaN(*pO
7520: 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a  p->p4.pReal) );.
7530: 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70    pOut->r = *pOp
7540: 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72  ->p4.pReal;.  br
7550: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
7560: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
7570: 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  8 * P2 * P4 *.**
7580: 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f  .** P4 points to
7590: 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65   a nul terminate
75a0: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20  d UTF-8 string. 
75b0: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74  This opcode is t
75c0: 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69  ransformed .** i
75d0: 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e 67  nto an OP_String
75e0: 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78   before it is ex
75f0: 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66  ecuted for the f
7600: 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61  irst time..*/.ca
7610: 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b  se OP_String8: {
7620: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
7630: 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f   as TK_STRING, o
7640: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7650: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
7660: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f  >p4.z!=0 );.  pO
7670: 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53  p->opcode = OP_S
7680: 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31  tring;.  pOp->p1
7690: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
76a0: 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a  30(pOp->p4.z);..
76b0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
76c0: 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20  MIT_UTF16.  if( 
76d0: 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45  encoding!=SQLITE
76e0: 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20  _UTF8 ){.    rc 
76f0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
7700: 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70  SetStr(pOut, pOp
7710: 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49  ->p4.z, -1, SQLI
7720: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
7730: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28  STATIC);.    if(
7740: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42   rc==SQLITE_TOOB
7750: 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  IG ) goto too_bi
7760: 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  g;.    if( SQLIT
7770: 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62  E_OK!=sqlite3Vdb
7780: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
7790: 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20  pOut, encoding) 
77a0: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
77b0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d     assert( pOut-
77c0: 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e  >zMalloc==pOut->
77d0: 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  z );.    assert(
77e0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d   pOut->flags & M
77f0: 45 4d 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70 4f  EM_Dyn );.    pO
7800: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  ut->zMalloc = 0;
7810: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
7820: 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a   |= MEM_Static;.
7830: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
7840: 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20  &= ~MEM_Dyn;.   
7850: 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
7860: 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a  ==P4_DYNAMIC ){.
7870: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
7880: 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e  ree(db, pOp->p4.
7890: 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  z);.    }.    pO
78a0: 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44  p->p4type = P4_D
78b0: 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d  YNAMIC;.    pOp-
78c0: 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b  >p4.z = pOut->z;
78d0: 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  .    pOp->p1 = p
78e0: 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64  Out->n;.  }.#end
78f0: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
7900: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
7910: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
7920: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
7930: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46  _big;.  }.  /* F
7940: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
7950: 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50  he next case, OP
7960: 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a  _String */.}.  .
7970: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
7980: 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g P1 P2 * P4 *.*
7990: 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20  *.** The string 
79a0: 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67  value P4 of leng
79b0: 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73  th P1 (bytes) is
79c0: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
79d0: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
79e0: 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20  OP_String: {    
79f0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
7a00: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
7a10: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21  sert( pOp->p4.z!
7a20: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  =0 );.  pOut->fl
7a30: 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
7a40: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
7a50: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70  m;.  pOut->z = p
7a60: 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74  Op->p4.z;.  pOut
7a70: 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  ->n = pOp->p1;. 
7a80: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
7a90: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
7aa0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
7ab0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
7ac0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20  /* Opcode: Null 
7ad0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
7ae0: 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20  ** Write a NULL 
7af0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
7b00: 32 2e 20 20 49 66 20 50 33 20 67 72 65 61 74 65  2.  If P3 greate
7b10: 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20  r than P2, then 
7b20: 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55  also write.** NU
7b30: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
7b40: 20 50 33 20 61 6e 64 20 65 76 65 72 79 20 72 65   P3 and every re
7b50: 67 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65  gister in betwee
7b60: 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66  n P2 and P3.  If
7b70: 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74   P3.** is less t
7b80: 68 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c  han P2 (typicall
7b90: 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68  y P3 is zero) th
7ba0: 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72  en only register
7bb0: 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f   P2 is.** set to
7bc0: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   NULL..**.** If 
7bd0: 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 73 20  the P1 value is 
7be0: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
7bf0: 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f  lso set the MEM_
7c00: 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20  Cleared flag so 
7c10: 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c  that.** NULL val
7c20: 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d  ues will not com
7c30: 70 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20  pare equal even 
7c40: 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  if SQLITE_NULLEQ
7c50: 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50   is set on.** OP
7c60: 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f  _Ne or OP_Eq..*/
7c70: 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b  .case OP_Null: {
7c80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
7c90: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7ca0: 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31  .  int cnt;.  u1
7cb0: 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e  6 nullFlag;.  cn
7cc0: 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d  t = pOp->p3-pOp-
7cd0: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
7ce0: 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
7cf0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
7d00: 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f   = nullFlag = pO
7d10: 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c  p->p1 ? (MEM_Nul
7d20: 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a  l|MEM_Cleared) :
7d30: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69   MEM_Null;.  whi
7d40: 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20  le( cnt>0 ){.   
7d50: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d   pOut++;.    mem
7d60: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
7d70: 20 70 4f 75 74 29 3b 0a 20 20 20 20 56 64 62 65   pOut);.    Vdbe
7d80: 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75 74 29  MemRelease(pOut)
7d90: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
7da0: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  s = nullFlag;.  
7db0: 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62    cnt--;.  }.  b
7dc0: 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
7dd0: 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20  ode: Blob P1 P2 
7de0: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  * P4.**.** P4 po
7df0: 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f  ints to a blob o
7e00: 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20  f data P1 bytes 
7e10: 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69  long.  Store thi
7e20: 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67  s.** blob in reg
7e30: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7e40: 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20  e OP_Blob: {    
7e50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
7e60: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7e70: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
7e80: 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41  >p1 <= SQLITE_MA
7e90: 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71  X_LENGTH );.  sq
7ea0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
7eb0: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
7ec0: 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20  .z, pOp->p1, 0, 
7ed0: 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  0);.  pOut->enc 
7ee0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
7ef0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
7f00: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
7f10: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7f20: 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a  Variable P1 P2 *
7f30: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e   P4 *.**.** Tran
7f40: 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20  sfer the values 
7f50: 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74  of bound paramet
7f60: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
7f70: 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20  ter P2.**.** If 
7f80: 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73  the parameter is
7f90: 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73   named, then its
7fa0: 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e   name appears in
7fb0: 20 50 34 20 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a   P4 and P3==1..*
7fc0: 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69  * The P4 value i
7fd0: 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  s used by sqlite
7fe0: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
7ff0: 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65  _name()..*/.case
8000: 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20   OP_Variable: { 
8010: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
8020: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
8030: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20  .  Mem *pVar;   
8040: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69      /* Value bei
8050: 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a  ng transferred *
8060: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
8070: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
8080: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
8090: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
80a0: 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  z==0 || pOp->p4.
80b0: 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d  z==p->azVar[pOp-
80c0: 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72  >p1-1] );.  pVar
80d0: 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d   = &p->aVar[pOp-
80e0: 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20  >p1 - 1];.  if( 
80f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
8100: 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20  oBig(pVar) ){.  
8110: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
8120: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
8130: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
8140: 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f  pOut, pVar, MEM_
8150: 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54  Static);.  UPDAT
8160: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
8170: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
8180: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76  ../* Opcode: Mov
8190: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
81a0: 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76 61  *.** Move the va
81b0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
81c0: 20 50 31 2e 2e 50 31 2b 50 33 20 6f 76 65 72 20   P1..P1+P3 over 
81d0: 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
81e0: 73 20 50 32 2e 2e 50 32 2b 50 33 2e 20 20 52 65  s P2..P2+P3.  Re
81f0: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
8200: 33 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f  3 are.** left ho
8210: 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49  lding a NULL.  I
8220: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
8230: 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65  r register range
8240: 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 20 61  s.** P1..P1+P3 a
8250: 6e 64 20 50 32 2e 2e 50 32 2b 50 33 20 74 6f 20  nd P2..P2+P3 to 
8260: 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65  overlap..*/.case
8270: 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68   OP_Move: {.  ch
8280: 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f  ar *zMalloc;   /
8290: 2a 20 48 6f 6c 64 69 6e 67 20 76 61 72 69 61 62  * Holding variab
82a0: 6c 65 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64  le for allocated
82b0: 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
82c0: 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a   n;           /*
82d0: 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
82e0: 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70  ters left to cop
82f0: 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20  y */.  int p1;  
8300: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
8310: 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d  ter to copy from
8320: 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20   */.  int p2;   
8330: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
8340: 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f  er to copy to */
8350: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 20  ..  n = pOp->p3 
8360: 2b 20 31 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  + 1;.  p1 = pOp-
8370: 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
8380: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
8390: 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32  >0 && p1>0 && p2
83a0: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
83b0: 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e  p1+n<=p2 || p2+n
83c0: 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20  <=p1 );..  pIn1 
83d0: 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70  = &aMem[p1];.  p
83e0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  Out = &aMem[p2];
83f0: 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29 7b  .  while( n-- ){
8400: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
8410: 74 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  t<=&aMem[p->nMem
8420: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
8430: 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 70 2d 3e   pIn1<=&aMem[p->
8440: 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73  nMem] );.    ass
8450: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
8460: 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d  pIn1) );.    mem
8470: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
8480: 20 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d 61 6c   pOut);.    zMal
8490: 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c  loc = pOut->zMal
84a0: 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a  loc;.    pOut->z
84b0: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
84c0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
84d0: 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a  ve(pOut, pIn1);.
84e0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
84f0: 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74  BUG.    if( pOut
8500: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61  ->pScopyFrom>=&a
8510: 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d  Mem[p1] && pOut-
8520: 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 26 61 4d 65  >pScopyFrom<&aMe
8530: 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b  m[p1+pOp->p3] ){
8540: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  .      pOut->pSc
8550: 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 31 20 2d 20  opyFrom += p1 - 
8560: 70 4f 70 2d 3e 70 32 3b 0a 20 20 20 20 7d 0a 23  pOp->p2;.    }.#
8570: 65 6e 64 69 66 0a 20 20 20 20 70 49 6e 31 2d 3e  endif.    pIn1->
8580: 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f  zMalloc = zMallo
8590: 63 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  c;.    REGISTER_
85a0: 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74  TRACE(p2++, pOut
85b0: 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
85c0: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20     pOut++;.  }. 
85d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
85e0: 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32  code: Copy P1 P2
85f0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61   P3 * *.**.** Ma
8600: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67  ke a copy of reg
8610: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
8620: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20   into registers 
8630: 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a  P2..P2+P3..**.**
8640: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
8650: 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63  n makes a deep c
8660: 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  opy of the value
8670: 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a  .  A duplicate.*
8680: 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79  * is made of any
8690: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
86a0: 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61  constant.  See a
86b0: 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f  lso OP_SCopy..*/
86c0: 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b  .case OP_Copy: {
86d0: 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d  .  int n;..  n =
86e0: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31   pOp->p3;.  pIn1
86f0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
8700: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
8710: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
8720: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
8730: 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29   );.  while( 1 )
8740: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
8750: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
8760: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
8770: 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70  Ephem);.    Deep
8780: 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29  hemeralize(pOut)
8790: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
87a0: 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e  DEBUG.    pOut->
87b0: 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a  pScopyFrom = 0;.
87c0: 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53  #endif.    REGIS
87d0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
87e0: 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75  2+pOp->p3-n, pOu
87f0: 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d  t);.    if( (n--
8800: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
8810: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49    pOut++;.    pI
8820: 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
8830: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8840: 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a   SCopy P1 P2 * *
8850: 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20   *.**.** Make a 
8860: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
8870: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
8880: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
8890: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
88a0: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61  tion makes a sha
88b0: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65  llow copy of the
88c0: 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20   value.  If the 
88d0: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74  value.** is a st
88e0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68  ring or blob, th
88f0: 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f  en the copy is o
8900: 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  nly a pointer to
8910: 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
8920: 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68   and hence if th
8930: 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67  e original chang
8940: 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63  es so will the c
8950: 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69  opy..** Worse, i
8960: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69  f the original i
8970: 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74  s deallocated, t
8980: 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20  he copy becomes 
8990: 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73  invalid..** Thus
89a0: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73   the program mus
89b0: 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74  t guarantee that
89c0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69   the original wi
89d0: 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a  ll not change.**
89e0: 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65   during the life
89f0: 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79  time of the copy
8a00: 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74  .  Use OP_Copy t
8a10: 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74  o make a complet
8a20: 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61  e.** copy..*/.ca
8a30: 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20  se OP_SCopy: {  
8a40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
8a50: 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
8a60: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
8a70: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
8a80: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
8a90: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
8aa0: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
8ab0: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
8ac0: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
8ad0: 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53  Ephem);.#ifdef S
8ae0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
8af0: 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ( pOut->pScopyFr
8b00: 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53  om==0 ) pOut->pS
8b10: 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b  copyFrom = pIn1;
8b20: 0a 23 65 6e 64 69 66 0a 20 20 52 45 47 49 53 54  .#endif.  REGIST
8b30: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
8b40: 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  , pOut);.  break
8b50: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8b60: 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20  ResultRow P1 P2 
8b70: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
8b80: 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72  registers P1 thr
8b90: 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e  ough P1+P2-1 con
8ba0: 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  tain a single ro
8bb0: 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e  w of.** results.
8bc0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   This opcode cau
8bd0: 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ses the sqlite3_
8be0: 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74  step() call to t
8bf0: 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68  erminate.** with
8c00: 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72   an SQLITE_ROW r
8c10: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69  eturn code and i
8c20: 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71  t sets up the sq
8c30: 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74  lite3_stmt.** st
8c40: 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69  ructure to provi
8c50: 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65  de access to the
8c60: 20 74 6f 70 20 50 31 20 76 61 6c 75 65 73 20 61   top P1 values a
8c70: 73 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  s the result.** 
8c80: 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  row..*/.case OP_
8c90: 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d  ResultRow: {.  M
8ca0: 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20  em *pMem;.  int 
8cb0: 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  i;.  assert( p->
8cc0: 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d  nResColumn==pOp-
8cd0: 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >p2 );.  assert(
8ce0: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
8cf0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b  assert( pOp->p1+
8d00: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
8d10: 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  +1 );..  /* If t
8d20: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61  his statement ha
8d30: 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64  s violated immed
8d40: 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
8d50: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f   constraints, do
8d60: 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e  .  ** not return
8d70: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
8d80: 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e  ows modified. An
8d90: 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45  d do not RELEASE
8da0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20   the statement. 
8db0: 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e   ** transaction.
8dc0: 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   It needs to be 
8dd0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f  rolled back.  */
8de0: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
8df0: 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  !=(rc = sqlite3V
8e00: 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29  dbeCheckFk(p, 0)
8e10: 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
8e20: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
8e30: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
8e40: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73     assert( p->us
8e50: 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b  esStmtJournal );
8e60: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
8e70: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c  .  /* If the SQL
8e80: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c  ITE_CountRows fl
8e90: 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c  ag is set in sql
8ea0: 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  ite3.flags mask,
8eb0: 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20   then .  ** DML 
8ec0: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b  statements invok
8ed0: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
8ee0: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
8ef0: 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a  er of rows .  **
8f00: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65   modified to the
8f10: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
8f20: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74  he only way that
8f30: 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20   a VM that.  ** 
8f40: 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e  opens a statemen
8f50: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
8f60: 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  y invoke this op
8f70: 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  code..  **.  ** 
8f80: 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20  In case this is 
8f90: 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74  such a statement
8fa0: 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74  , close any stat
8fb0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
8fc0: 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79  n.  ** opened by
8fd0: 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20   this VM before 
8fe0: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f  returning contro
8ff0: 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  l to the user. T
9000: 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65  his is to.  ** e
9010: 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65  nsure that state
9020: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
9030: 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73  s are always nes
9040: 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70  ted, not overlap
9050: 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68  ping..  ** If th
9060: 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74  e open statement
9070: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
9080: 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c  not closed here,
9090: 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20   then the user. 
90a0: 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f   ** may step ano
90b0: 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65  ther VM that ope
90c0: 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65  ns its own state
90d0: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
90e0: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20  . This.  ** may 
90f0: 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70  lead to overlapp
9100: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ing statement tr
9110: 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a  ansactions..  **
9120: 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  .  ** The statem
9130: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
9140: 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c  is never a top-l
9150: 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e  evel transaction
9160: 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68  .  Hence.  ** th
9170: 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62  e RELEASE call b
9180: 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66  elow can never f
9190: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ail..  */.  asse
91a0: 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  rt( p->iStatemen
91b0: 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67  t==0 || db->flag
91c0: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
91d0: 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ws );.  rc = sql
91e0: 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61  ite3VdbeCloseSta
91f0: 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f  tement(p, SAVEPO
9200: 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20  INT_RELEASE);.  
9210: 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
9220: 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20  LITE_OK) ){.    
9230: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
9240: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
9250: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
9260: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
9270: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
9280: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
9290: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
92a0: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
92b0: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
92c0: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
92d0: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
92e0: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
92f0: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
9300: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
9310: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
9320: 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a   a side effect..
9330: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
9340: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61  >pResultSet = &a
9350: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
9360: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e  for(i=0; i<pOp->
9370: 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  p2; i++){.    as
9380: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
9390: 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20  (&pMem[i]) );.  
93a0: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
93b0: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
93c0: 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d  assert( (pMem[i]
93d0: 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68  .flags & MEM_Eph
93e0: 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  em)==0.         
93f0: 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66     || (pMem[i].f
9400: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
9410: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
9420: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9430: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
9440: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73  &pMem[i]);.    s
9450: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
9460: 72 65 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29  reType(&pMem[i])
9470: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
9480: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20  RACE(pOp->p1+i, 
9490: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20  &pMem[i]);.  }. 
94a0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
94b0: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
94c0: 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72  mem;..  /* Retur
94d0: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a  n SQLITE_ROW.  *
94e0: 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b  /.  p->pc = pc +
94f0: 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
9500: 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64  E_ROW;.  goto vd
9510: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
9520: 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20   Opcode: Concat 
9530: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
9540: 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20  ** Add the text 
9550: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f  in register P1 o
9560: 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74  nto the end of t
9570: 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65  he text in.** re
9580: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74  gister P2 and st
9590: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
95a0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
95b0: 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20  * If either the 
95c0: 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72  P1 or P2 text ar
95d0: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  e NULL then stor
95e0: 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a  e NULL in P3..**
95f0: 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c  .**   P3 = P2 ||
9600: 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20   P1.**.** It is 
9610: 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61  illegal for P1 a
9620: 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20  nd P3 to be the 
9630: 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53  same register. S
9640: 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20  ometimes,.** if 
9650: 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72  P3 is the same r
9660: 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74  egister as P2, t
9670: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
9680: 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20  n is able.** to 
9690: 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29  avoid a memcpy()
96a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
96b0: 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cat: {          
96c0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43   /* same as TK_C
96d0: 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  ONCAT, in1, in2,
96e0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e   out3 */.  i64 n
96f0: 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  Byte;..  pIn1 = 
9700: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
9710: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
9720: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20  Op->p2];.  pOut 
9730: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
9740: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
9750: 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20  !=pOut );.  if( 
9760: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
9770: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
9780: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
9790: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
97a0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
97b0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20  reak;.  }.  if( 
97c0: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
97d0: 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70   || ExpandBlob(p
97e0: 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  In2) ) goto no_m
97f0: 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  em;.  Stringify(
9800: 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
9810: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
9820: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
9830: 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20  nByte = pIn1->n 
9840: 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28  + pIn2->n;.  if(
9850: 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
9860: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
9870: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
9880: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
9890: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
98a0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b  (pOut, MEM_Str);
98b0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
98c0: 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
98d0: 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f  (int)nByte+2, pO
98e0: 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20  ut==pIn2) ){.   
98f0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
9900: 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49  }.  if( pOut!=pI
9910: 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  n2 ){.    memcpy
9920: 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e  (pOut->z, pIn2->
9930: 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d  z, pIn2->n);.  }
9940: 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d  .  memcpy(&pOut-
9950: 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e  >z[pIn2->n], pIn
9960: 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a  1->z, pIn1->n);.
9970: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d    pOut->z[nByte]
9980: 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b   = 0;.  pOut->z[
9990: 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20  nByte+1] = 0;.  
99a0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
99b0: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
99c0: 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
99d0: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
99e0: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
99f0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
9a00: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
9a10: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64  ../* Opcode: Add
9a20: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9a30: 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75  .** Add the valu
9a40: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
9a50: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
9a60: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
9a70: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9a80: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
9a90: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
9aa0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
9ab0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
9ac0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
9ad0: 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50  e: Multiply P1 P
9ae0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a  2 P3 * *.**.**.*
9af0: 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76  * Multiply the v
9b00: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9b10: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
9b20: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
9b30: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
9b40: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
9b50: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
9b60: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
9b70: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
9b80: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
9b90: 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50  code: Subtract P
9ba0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
9bb0: 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76  * Subtract the v
9bc0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9bd0: 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c   P1 from the val
9be0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9bf0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
9c00: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
9c10: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
9c20: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
9c30: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
9c40: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
9c50: 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50  Opcode: Divide P
9c60: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
9c70: 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c  * Divide the val
9c80: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9c90: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
9ca0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9cb0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9cc0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9cd0: 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e  r P3 (P3=P2/P1).
9ce0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
9cf0: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
9d00: 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74   is zero, then t
9d10: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9d20: 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  L. If either inp
9d30: 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  ut is .** NULL, 
9d40: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9d50: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
9d60: 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50  : Remainder P1 P
9d70: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
9d80: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
9d90: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
9da0: 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74  er division of t
9db0: 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72  he value in.** r
9dc0: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
9dd0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9de0: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
9df0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50   the result in P
9e00: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
9e10: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9e20: 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P2 is zero the r
9e30: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
9e40: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
9e50: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
9e60: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9e70: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
9e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e90: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9ea0: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
9eb0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
9ec0: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
9ed0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9ee0: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
9ef0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
9f00: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
9f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9f20: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
9f30: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9f40: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
9f50: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
9f60: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9f70: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
9f80: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
9f90: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
9fa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9fb0: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
9fc0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
9fd0: 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20  char bIntint;   
9fe0: 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20 61  /* Started out a
9ff0: 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70  s two integer op
a000: 65 72 61 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  erands */.  int 
a010: 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43  flags;      /* C
a020: 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c  ombined MEM_* fl
a030: 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e  ags from both in
a040: 70 75 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41  puts */.  i64 iA
a050: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
a060: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65  eger value of le
a070: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
a080: 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20  i64 iB;         
a090: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
a0a0: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
a0b0: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41  d */.  double rA
a0c0: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
a0d0: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
a0e0: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
a0f0: 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rB;      /* Rea
a100: 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  l value of right
a110: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70   operand */..  p
a120: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
a130: 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d  >p1];.  applyNum
a140: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
a150: 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
a160: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
a170: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
a180: 69 74 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75  ity(pIn2);.  pOu
a190: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a1a0: 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49  3];.  flags = pI
a1b0: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
a1c0: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
a1d0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
a1e0: 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  )!=0 ) goto arit
a1f0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
a200: 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49  _null;.  if( (pI
a210: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32  n1->flags & pIn2
a220: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
a230: 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  t)==MEM_Int ){. 
a240: 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e     iA = pIn1->u.
a250: 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32  i;.    iB = pIn2
a260: 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69  ->u.i;.    bInti
a270: 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74  nt = 1;.    swit
a280: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
a290: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
a2a0: 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20  _Add:       if( 
a2b0: 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
a2c0: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
a2d0: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
a2e0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
a2f0: 62 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c  btract:  if( sql
a300: 69 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42  ite3SubInt64(&iB
a310: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
a320: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
a330: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
a340: 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65  ply:  if( sqlite
a350: 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41  3MulInt64(&iB,iA
a360: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
a370: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
a380: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
a390: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  {.        if( iA
a3a0: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
a3b0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
a3c0: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
a3d0: 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d  ( iA==-1 && iB==
a3e0: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
a3f0: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20   goto fp_math;. 
a400: 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b         iB /= iA;
a410: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
a420: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
a430: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
a440: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
a450: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
a460: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
a470: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
a480: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
a490: 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20    iB %= iA;.    
a4a0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a4b0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75   }.    }.    pOu
a4c0: 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20  t->u.i = iB;.   
a4d0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
a4e0: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
a4f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e    }else{.    bIn
a500: 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74  tint = 0;.fp_mat
a510: 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69  h:.    rA = sqli
a520: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
a530: 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d  (pIn1);.    rB =
a540: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
a550: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
a560: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
a570: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
a580: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
a590: 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20     rB += rA;    
a5a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a5b0: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
a5c0: 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20  :    rB -= rA;  
a5d0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a5e0: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
a5f0: 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b  ly:    rB *= rA;
a600: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a610: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
a620: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
a630: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
a640: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
a650: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
a660: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
a670: 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30  f( rA==(double)0
a680: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
a690: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
a6a0: 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d  l;.        rB /=
a6b0: 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   rA;.        bre
a6c0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
a6d0: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
a6e0: 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72       iA = (i64)r
a6f0: 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20  A;.        iB = 
a700: 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20  (i64)rB;.       
a710: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
a720: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
a730: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
a740: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
a750: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
a760: 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28    rB = (double)(
a770: 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20  iB % iA);.      
a780: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
a790: 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
a7a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
a7b0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75  NG_POINT.    pOu
a7c0: 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20  t->u.i = rB;.   
a7d0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
a7e0: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
a7f0: 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71  #else.    if( sq
a800: 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29  lite3IsNaN(rB) )
a810: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69  {.      goto ari
a820: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a830: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20  s_null;.    }.  
a840: 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a    pOut->r = rB;.
a850: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
a860: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61  ag(pOut, MEM_Rea
a870: 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61  l);.    if( (fla
a880: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
a890: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
a8a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
a8b0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
a8c0: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
a8d0: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
a8e0: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
a8f0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
a900: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
a910: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
a920: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a930: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
a940: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
a950: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
a960: 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74  a CollSeq struct
a970: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
a980: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
a990: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
a9a0: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
a9b0: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
a9c0: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
a9d0: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
a9e0: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
a9f0: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
aa00: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
aa10: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
aa20: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
aa30: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
aa40: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
aa50: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
aa60: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
aa70: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
aa80: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
aa90: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
aaa0: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
aab0: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
aac0: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
aad0: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
aae0: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
aaf0: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
ab00: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
ab10: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
ab20: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
ab30: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
ab40: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
ab50: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
ab60: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
ab70: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
ab80: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
ab90: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
aba0: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
abb0: 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75  licly, only to u
abc0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65  ser functions de
abd0: 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e  fined in func.c.
abe0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c  .*/.case OP_Coll
abf0: 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  Seq: {.  assert(
ac00: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
ac10: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66  _COLLSEQ );.  if
ac20: 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
ac30: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
ac40: 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
ac50: 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a  p->p1], 0);.  }.
ac60: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
ac70: 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20  pcode: Function 
ac80: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
ac90: 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73  *.** Invoke a us
aca0: 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20  er function (P4 
acb0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
acc0: 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63  a Function struc
acd0: 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  ture that.** def
ace0: 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  ines the functio
acf0: 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d  n) with P5 argum
ad00: 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ents taken from 
ad10: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a  register P2 and.
ad20: 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20  ** successors.  
ad30: 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  The result of th
ad40: 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74  e function is st
ad50: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
ad60: 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72   P3..** Register
ad70: 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P3 must not be 
ad80: 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  one of the funct
ad90: 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a  ion inputs..**.*
ada0: 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74  * P1 is a 32-bit
adb0: 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74   bitmask indicat
adc0: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
add0: 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  ot each argument
ade0: 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63   to the .** func
adf0: 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69  tion was determi
ae00: 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61  ned to be consta
ae10: 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69  nt at compile ti
ae20: 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74  me. If the first
ae30: 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73  .** argument was
ae40: 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62   constant then b
ae50: 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65  it 0 of P1 is se
ae60: 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  t. This is used 
ae70: 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  to determine.** 
ae80: 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74  whether meta dat
ae90: 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  a associated wit
aea0: 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  h a user functio
aeb0: 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67  n argument using
aec0: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
aed0: 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50  set_auxdata() AP
aee0: 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20  I may be safely 
aef0: 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74  retained until t
af00: 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63  he next.** invoc
af10: 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70  ation of this op
af20: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
af30: 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e  also: AggStep an
af40: 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61  d AggFinal.*/.ca
af50: 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20  se OP_Function: 
af60: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  {.  int i;.  Mem
af70: 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65   *pArg;.  sqlite
af80: 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
af90: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
afa0: 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b  *apVal;.  int n;
afb0: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ..  n = pOp->p5;
afc0: 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70  .  apVal = p->ap
afd0: 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61  Arg;.  assert( a
afe0: 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a  pVal || n==0 );.
aff0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
b000: 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
b010: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
b020: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
b030: 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
b040: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
b050: 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30  ..  assert( n==0
b060: 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26   || (pOp->p2>0 &
b070: 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e  & pOp->p2+n<=p->
b080: 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73  nMem+1) );.  ass
b090: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
b0a0: 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p2 || pOp->p3>
b0b0: 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20  =pOp->p2+n );.  
b0c0: 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pArg = &aMem[pOp
b0d0: 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p2];.  for(i=0
b0e0: 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67  ; i<n; i++, pArg
b0f0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
b100: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67   memIsValid(pArg
b110: 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ) );.    apVal[i
b120: 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65  ] = pArg;.    De
b130: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72  ephemeralize(pAr
b140: 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  g);.    sqlite3V
b150: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
b160: 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53  pArg);.    REGIS
b170: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
b180: 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a  2+i, pArg);.  }.
b190: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
b1a0: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
b1b0: 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70  EF || pOp->p4typ
b1c0: 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43 20 29  e==P4_VDBEFUNC )
b1d0: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  ;.  if( pOp->p4t
b1e0: 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
b1f0: 29 7b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63  ){.    ctx.pFunc
b200: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
b210: 3b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65 46  ;.    ctx.pVdbeF
b220: 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  unc = 0;.  }else
b230: 7b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65 46  {.    ctx.pVdbeF
b240: 75 6e 63 20 3d 20 28 56 64 62 65 46 75 6e 63 2a  unc = (VdbeFunc*
b250: 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75  )pOp->p4.pVdbeFu
b260: 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e  nc;.    ctx.pFun
b270: 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e  c = ctx.pVdbeFun
b280: 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20  c->pFunc;.  }.. 
b290: 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d   ctx.s.flags = M
b2a0: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73  EM_Null;.  ctx.s
b2b0: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e  .db = db;.  ctx.
b2c0: 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
b2d0: 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  x.s.zMalloc = 0;
b2e0: 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
b2f0: 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
b300: 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
b310: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
b320: 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65  .  ** the pointe
b330: 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e  r to ctx.s so in
b340: 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66   case the user-f
b350: 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a  unction can use.
b360: 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79    ** the already
b370: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
b380: 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
b390: 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e  ocating a new on
b3a0: 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
b3b0: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74  3VdbeMemMove(&ct
b3c0: 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65  x.s, pOut);.  Me
b3d0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74  mSetTypeFlag(&ct
b3e0: 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  x.s, MEM_Null);.
b3f0: 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
b400: 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46   0;.  if( ctx.pF
b410: 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  unc->flags & SQL
b420: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
b430: 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  L ){.    assert(
b440: 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20   pOp>aOp );.    
b450: 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
b460: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
b470: 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EQ );.    assert
b480: 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
b490: 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
b4a0: 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20      ctx.pColl = 
b4b0: 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c  pOp[-1].p4.pColl
b4c0: 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c 61 73 74  ;.  }.  db->last
b4d0: 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
b4e0: 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63  d;.  (*ctx.pFunc
b4f0: 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e  ->xFunc)(&ctx, n
b500: 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50  , apVal); /* IMP
b510: 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
b520: 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64 20 3d  */.  lastRowid =
b530: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
b540: 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 61 75 78  .  /* If any aux
b550: 69 6c 69 61 72 79 20 64 61 74 61 20 66 75 6e 63  iliary data func
b560: 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e 20  tions have been 
b570: 63 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20 75  called by this u
b580: 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20  ser function,.  
b590: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 63  ** immediately c
b5a0: 61 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63 74  all the destruct
b5b0: 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73  or for any non-s
b5c0: 74 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20 20  tatic values..  
b5d0: 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56 64  */.  if( ctx.pVd
b5e0: 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73 71  beFunc ){.    sq
b5f0: 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41  lite3VdbeDeleteA
b600: 75 78 44 61 74 61 28 63 74 78 2e 70 56 64 62 65  uxData(ctx.pVdbe
b610: 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  Func, pOp->p1);.
b620: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62      pOp->p4.pVdb
b630: 65 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62  eFunc = ctx.pVdb
b640: 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e  eFunc;.    pOp->
b650: 70 34 74 79 70 65 20 3d 20 50 34 5f 56 44 42 45  p4type = P4_VDBE
b660: 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  FUNC;.  }..  if(
b670: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
b680: 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e  d ){.    /* Even
b690: 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63   though a malloc
b6a0: 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74  () has failed, t
b6b0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
b6c0: 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  n of the.    ** 
b6d0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61  user function ma
b6e0: 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e  y have called an
b6f0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
b700: 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20  XXX() function. 
b710: 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20     ** to return 
b720: 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c  a value. The fol
b730: 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65  lowing call rele
b740: 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63  ases any resourc
b750: 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69  es.    ** associ
b760: 61 74 65 64 20 77 69 74 68 20 73 75 63 68 20 61  ated with such a
b770: 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
b780: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b790: 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29  mRelease(&ctx.s)
b7a0: 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ;.    goto no_me
b7b0: 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  m;.  }..  /* If 
b7c0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  the function ret
b7d0: 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20  urned an error, 
b7e0: 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69  throw an excepti
b7f0: 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e  on */.  if( ctx.
b800: 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73  isError ){.    s
b810: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
b820: 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
b830: 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
b840: 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73  alue_text(&ctx.s
b850: 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78  ));.    rc = ctx
b860: 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  .isError;.  }.. 
b870: 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
b880: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
b890: 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ion into registe
b8a0: 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65  r P3 */.  sqlite
b8b0: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
b8c0: 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f  ing(&ctx.s, enco
b8d0: 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  ding);.  sqlite3
b8e0: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
b8f0: 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28  , &ctx.s);.  if(
b900: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
b910: 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20  ooBig(pOut) ){. 
b920: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
b930: 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f 2a  .  }..#if 0.  /*
b940: 20 54 68 65 20 61 70 70 2d 64 65 66 69 6e 65 64   The app-defined
b950: 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 64 6f   function has do
b960: 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  ne something tha
b970: 74 20 61 73 20 63 61 75 73 65 64 20 74 68 69 73  t as caused this
b980: 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  .  ** statement 
b990: 74 6f 20 65 78 70 69 72 65 2e 20 20 28 50 65 72  to expire.  (Per
b9a0: 68 61 70 73 20 74 68 65 20 66 75 6e 63 74 69 6f  haps the functio
b9b0: 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69 74 65 33  n called sqlite3
b9c0: 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20 77 69 74  _exec().  ** wit
b9d0: 68 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  h a CREATE TABLE
b9e0: 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20 2a   statement.).  *
b9f0: 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72  /.  if( p->expir
ba00: 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45  ed ) rc = SQLITE
ba10: 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a 0a  _ABORT;.#endif..
ba20: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
ba30: 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b  (pOp->p3, pOut);
ba40: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
ba50: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
ba60: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
ba70: 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50  ode: BitAnd P1 P
ba80: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
ba90: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
baa0: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
bab0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
bac0: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
bad0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
bae0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
baf0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
bb00: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
bb10: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
bb20: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .*/./* Opcode: B
bb30: 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  itOr P1 P2 P3 * 
bb40: 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  *.**.** Take the
bb50: 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20   bit-wise OR of 
bb60: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
bb70: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
bb80: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
bb90: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
bba0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
bbb0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
bbc0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
bbd0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
bbe0: 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74  pcode: ShiftLeft
bbf0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
bc00: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
bc10: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
bc20: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
bc30: 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a  e left by the.**
bc40: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
bc50: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
bc60: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
bc70: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
bc80: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
bc90: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
bca0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
bcb0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
bcc0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
bcd0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
bce0: 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a  Right P1 P2 P3 *
bcf0: 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74   *.**.** Shift t
bd00: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
bd10: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
bd20: 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79 20  to the right by 
bd30: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
bd40: 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20   bits specified 
bd50: 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  by the integer i
bd60: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
bd70: 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75  * Store the resu
bd80: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
bd90: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
bda0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
bdb0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
bdc0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  L..*/.case OP_Bi
bdd0: 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20  tAnd:           
bde0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
bdf0: 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c   TK_BITAND, in1,
be00: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
be10: 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20  se OP_BitOr:    
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
be30: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f   same as TK_BITO
be40: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
be50: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69  3 */.case OP_Shi
be60: 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20  ftLeft:         
be70: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
be80: 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20  TK_LSHIFT, in1, 
be90: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
bea0: 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a  e OP_ShiftRight:
beb0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
bec0: 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46  same as TK_RSHIF
bed0: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
bee0: 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20  3 */.  i64 iA;. 
bef0: 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69   u64 uA;.  i64 i
bf00: 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70  B;.  u8 op;..  p
bf10: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
bf20: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
bf30: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
bf40: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
bf50: 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
bf60: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
bf70: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
bf80: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
bf90: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
bfa0: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
bfb0: 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73  ak;.  }.  iA = s
bfc0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
bfd0: 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d  ue(pIn2);.  iB =
bfe0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
bff0: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70  alue(pIn1);.  op
c000: 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
c010: 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74    if( op==OP_Bit
c020: 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d  And ){.    iA &=
c030: 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   iB;.  }else if(
c040: 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b   op==OP_BitOr ){
c050: 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20  .    iA |= iB;. 
c060: 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30   }else if( iB!=0
c070: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
c080: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68  op==OP_ShiftRigh
c090: 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  t || op==OP_Shif
c0a0: 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a  tLeft );..    /*
c0b0: 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79 20   If shifting by 
c0c0: 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e  a negative amoun
c0d0: 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65 20  t, shift in the 
c0e0: 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20  other direction 
c0f0: 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20  */.    if( iB<0 
c100: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
c110: 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d   OP_ShiftRight==
c120: 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29  OP_ShiftLeft+1 )
c130: 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f  ;.      op = 2*O
c140: 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20  P_ShiftLeft + 1 
c150: 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d  - op;.      iB =
c160: 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20   iB>(-64) ? -iB 
c170: 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  : 64;.    }..   
c180: 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20   if( iB>=64 ){. 
c190: 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30       iA = (iA>=0
c1a0: 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74   || op==OP_Shift
c1b0: 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a  Left) ? 0 : -1;.
c1c0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
c1d0: 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41   memcpy(&uA, &iA
c1e0: 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20  , sizeof(uA));. 
c1f0: 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f       if( op==OP_
c200: 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20  ShiftLeft ){.   
c210: 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a       uA <<= iB;.
c220: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
c230: 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a       uA >>= iB;.
c240: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d          /* Sign-
c250: 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68  extend on a righ
c260: 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67  t shift of a neg
c270: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a  ative number */.
c280: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c 30          if( iA<0
c290: 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34   ) uA |= ((((u64
c2a0: 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32  )0xffffffff)<<32
c2b0: 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c  )|0xffffffff) <<
c2c0: 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20   (64-iB);.      
c2d0: 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26  }.      memcpy(&
c2e0: 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28  iA, &uA, sizeof(
c2f0: 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  iA));.    }.  }.
c300: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41    pOut->u.i = iA
c310: 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
c320: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
c330: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
c340: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d  * Opcode: AddImm
c350: 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a    P1 P2 * * *.**
c360: 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e   .** Add the con
c370: 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20  stant P2 to the 
c380: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
c390: 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73  r P1..** The res
c3a0: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e  ult is always an
c3b0: 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
c3c0: 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67  To force any reg
c3d0: 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69  ister to be an i
c3e0: 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64  nteger, just add
c3f0: 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41   0..*/.case OP_A
c400: 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20  ddImm: {        
c410: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
c420: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
c430: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
c440: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
c450: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
c460: 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
c470: 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  In1);.  pIn1->u.
c480: 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  i += pOp->p2;.  
c490: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c4a0: 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50  ode: MustBeInt P
c4b0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a  1 P2 * * *.** .*
c4c0: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
c4d0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
c4e0: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
c4f0: 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  r.  If the value
c500: 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74  .** in P1 is not
c510: 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20   an integer and 
c520: 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
c530: 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
c540: 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64  ger.** without d
c550: 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a  ata loss, then j
c560: 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
c570: 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d  to P2, or if P2=
c580: 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53  =0.** raise an S
c590: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65  QLITE_MISMATCH e
c5a0: 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  xception..*/.cas
c5b0: 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20  e OP_MustBeInt: 
c5c0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
c5d0: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
c5e0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
c5f0: 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66 66  >p1];.  applyAff
c600: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
c610: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
c620: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28  encoding);.  if(
c630: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c640: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
c650: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
c660: 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
c670: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b  SQLITE_MISMATCH;
c680: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
c690: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
c6a0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
c6b0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
c6c0: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
c6d0: 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
c6e0: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49  Flag(pIn1, MEM_I
c6f0: 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
c700: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
c710: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
c720: 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64  G_POINT./* Opcod
c730: 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20  e: RealAffinity 
c740: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
c750: 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20   If register P1 
c760: 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
c770: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c780: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a   real value..**.
c790: 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
c7a0: 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74 72  s used when extr
c7b0: 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  acting informati
c7c0: 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e  on from a column
c7d0: 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41   that.** has REA
c7e0: 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63  L affinity.  Suc
c7f0: 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20  h column values 
c800: 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f  may still be sto
c810: 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65  red as.** intege
c820: 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66  rs, for space ef
c830: 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66  ficiency, but af
c840: 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77  ter extraction w
c850: 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74  e want them.** t
c860: 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65  o have only a re
c870: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73  al value..*/.cas
c880: 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74  e OP_RealAffinit
c890: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
c8a0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
c8b0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
c8c0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
c8d0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c8e0: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69  _Int ){.    sqli
c8f0: 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66  te3VdbeMemRealif
c900: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
c910: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
c920: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
c930: 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f  MIT_CAST./* Opco
c940: 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20  de: ToText P1 * 
c950: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
c960: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
c970: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
c980: 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65   text..** If the
c990: 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69   value is numeri
c9a0: 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  c, convert it to
c9b0: 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20   a string using 
c9c0: 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  the.** equivalen
c9d0: 74 20 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20  t of printf().  
c9e0: 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20  Blob values are 
c9f0: 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a  unchanged and.**
ca00: 20 61 72 65 20 61 66 74 65 72 77 61 72 64 73 20   are afterwards 
ca10: 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74  simply interpret
ca20: 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a  ed as text..**.*
ca30: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
ca40: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
ca50: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
ca60: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
ca70: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65  .*/.case OP_ToTe
ca80: 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  xt: {           
ca90: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
caa0: 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e  s TK_TO_TEXT, in
cab0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
cac0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
cad0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
cae0: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28  (p, pIn1);.  if(
caf0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
cb00: 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b  EM_Null ) break;
cb10: 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53  .  assert( MEM_S
cb20: 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33  tr==(MEM_Blob>>3
cb30: 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  ) );.  pIn1->fla
cb40: 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  gs |= (pIn1->fla
cb50: 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b  gs&MEM_Blob)>>3;
cb60: 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  .  applyAffinity
cb70: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
cb80: 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67  F_TEXT, encoding
cb90: 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
cba0: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73  Blob(pIn1);.  as
cbb0: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
cbc0: 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64  s & MEM_Str || d
cbd0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
cbe0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
cbf0: 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45   &= ~(MEM_Int|ME
cc00: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c  M_Real|MEM_Blob|
cc10: 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44  MEM_Zero);.  UPD
cc20: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
cc30: 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b  (pIn1);.  break;
cc40: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
cc50: 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a  oBlob P1 * * * *
cc60: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
cc70: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
cc80: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c  er P1 to be a BL
cc90: 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  OB..** If the va
cca0: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
ccb0: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
ccc0: 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a  string first..**
ccd0: 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d   Strings are sim
cce0: 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74 65  ply reinterprete
ccf0: 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20  d as blobs with 
cd00: 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20  no change.** to 
cd10: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
cd20: 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ata..**.** A NUL
cd30: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
cd40: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
cd50: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
cd60: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
cd70: 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20  e OP_ToBlob: {  
cd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd90: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
cda0: 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20  _BLOB, in1 */.  
cdb0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
cdc0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
cdd0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
cde0: 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69  ull ) break;.  i
cdf0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
ce00: 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29  & MEM_Blob)==0 )
ce10: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
ce20: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
ce30: 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64  _AFF_TEXT, encod
ce40: 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ing);.    assert
ce50: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
ce60: 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d  MEM_Str || db->m
ce70: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
ce80: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
ce90: 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pIn1, MEM_Blob
cea0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
ceb0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pIn1->flags &= ~
cec0: 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d  (MEM_TypeMask&~M
ced0: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20  EM_Blob);.  }.  
cee0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
cef0: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  IZE(pIn1);.  bre
cf00: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
cf10: 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a  : ToNumeric P1 *
cf20: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
cf30: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
cf40: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
cf50: 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65  e numeric (eithe
cf60: 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20  r an.** integer 
cf70: 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  or a floating-po
cf80: 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20  int number.).** 
cf90: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
cfa0: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72  text or blob, tr
cfb0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  y to convert it 
cfc0: 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a  to an using the.
cfd0: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
cfe0: 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28   atoi() or atof(
cff0: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
d000: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
d010: 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69  ion .** is possi
d020: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ble..**.** A NUL
d030: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
d040: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
d050: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
d060: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
d070: 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20  e OP_ToNumeric: 
d080: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
d090: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d0a0: 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31  _TO_NUMERIC, in1
d0b0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
d0c0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73  em[pOp->p1];.  s
d0d0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d  qlite3VdbeMemNum
d0e0: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 62  erify(pIn1);.  b
d0f0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
d100: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  * SQLITE_OMIT_CA
d110: 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ST */../* Opcode
d120: 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a  : ToInt P1 * * *
d130: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
d140: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
d150: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e  ster P1 to be an
d160: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a   integer.  If.**
d170: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75   The value is cu
d180: 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e  rrently a real n
d190: 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20  umber, drop its 
d1a0: 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e  fractional part.
d1b0: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
d1c0: 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62   is text or blob
d1d0: 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  , try to convert
d1e0: 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65   it to an intege
d1f0: 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  r using the.** e
d200: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
d210: 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20  i() and store 0 
d220: 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65  if no such conve
d230: 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c  rsion is possibl
d240: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
d250: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
d260: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
d270: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
d280: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
d290: 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20  OP_ToInt: {     
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d2b0: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e  same as TK_TO_IN
d2c0: 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  T, in1 */.  pIn1
d2d0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
d2e0: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
d2f0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
d300: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
d310: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
d320: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  rify(pIn1);.  }.
d330: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20    break;.}..#if 
d340: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
d350: 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21 64  OMIT_CAST) && !d
d360: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
d370: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
d380: 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  T)./* Opcode: To
d390: 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Real P1 * * * *.
d3a0: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
d3b0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d3c0: 72 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c 6f  r P1 to be a flo
d3d0: 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
d3e0: 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76 61  er..** If The va
d3f0: 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79  lue is currently
d400: 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e   an integer, con
d410: 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74  vert it..** If t
d420: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
d430: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
d440: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
d450: 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20  n integer using 
d460: 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  the.** equivalen
d470: 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20  t of atoi() and 
d480: 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f 20  store 0.0 if no 
d490: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
d4a0: 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a  is possible..**.
d4b0: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
d4c0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
d4d0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
d4e0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
d4f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52  ..*/.case OP_ToR
d500: 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eal: {          
d510: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d520: 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69  as TK_TO_REAL, i
d530: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
d540: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
d550: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
d560: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66  e(p, pIn1);.  if
d570: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
d580: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
d590: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d5a0: 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29  MemRealify(pIn1)
d5b0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
d5c0: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
d5d0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
d5e0: 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  CAST) && !define
d5f0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
d600: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f  OATING_POINT) */
d610: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20  ../* Opcode: Lt 
d620: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
d630: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65  *.** Compare the
d640: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
d650: 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ter P1 and P3.  
d660: 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50  If reg(P3)<reg(P
d670: 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20  1) then.** jump 
d680: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20  to address P2.  
d690: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
d6a0: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
d6b0: 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74  bit of P5 is set
d6c0: 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28   and either reg(
d6d0: 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33  P1) or.** reg(P3
d6e0: 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  ) is NULL then t
d6f0: 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49  ake the jump.  I
d700: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
d710: 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20  PIFNULL .** bit 
d720: 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61  is clear then fa
d730: 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69  ll through if ei
d740: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
d750: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
d760: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
d770: 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75  portion of P5 mu
d780: 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74  st be an affinit
d790: 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a  y character -.**
d7a0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
d7b0: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  , SQLITE_AFF_INT
d7c0: 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72  EGER, and so for
d7d0: 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69  th. An attempt i
d7e0: 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f  s made .** to co
d7f0: 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73  erce both inputs
d800: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
d810: 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f  is affinity befo
d820: 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  re the.** compar
d830: 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66  ison is made. If
d840: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
d850: 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68  MASK is 0x00, th
d860: 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66  en numeric.** af
d870: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20  finity is used. 
d880: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66  Note that the af
d890: 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f  finity conversio
d8a0: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a  ns are stored.**
d8b0: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69   back into the i
d8c0: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50  nput registers P
d8d0: 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68  1 and P3.  So th
d8e0: 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61  is opcode can ca
d8f0: 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e  use.** persisten
d900: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67  t changes to reg
d910: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
d920: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79  ..**.** Once any
d930: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76   conversions hav
d940: 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61  e taken place, a
d950: 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65  nd neither value
d960: 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68   is NULL, .** th
d970: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  e values are com
d980: 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76  pared. If both v
d990: 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20  alues are blobs 
d9a0: 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73  then memcmp() is
d9b0: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65  .** used to dete
d9c0: 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  rmine the result
d9d0: 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  s of the compari
d9e0: 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61  son.  If both va
d9f0: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74  lues.** are text
da00: 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f  , then the appro
da10: 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67  priate collating
da20: 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66   function specif
da30: 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20  ied in.** P4 is 
da40: 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20   used to do the 
da50: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
da60: 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  P4 is not specif
da70: 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63  ied then.** memc
da80: 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  mp() is used to 
da90: 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72  compare text str
daa0: 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61  ing.  If both va
dab0: 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65  lues are.** nume
dac0: 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65  ric, then a nume
dad0: 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  ric comparison i
dae0: 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74  s used. If the t
daf0: 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  wo values.** are
db00: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79   of different ty
db10: 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72  pes, then number
db20: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
db30: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74   less than.** st
db40: 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67  rings and string
db50: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
db60: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
db70: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
db80: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69  QLITE_STOREP2 bi
db90: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  t of P5 is set, 
dba0: 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70  then do not jump
dbb0: 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73  .  Instead,.** s
dbc0: 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72  tore a boolean r
dbd0: 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c  esult (either 0,
dbe0: 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20   or 1, or NULL) 
dbf0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
dc00: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
dc10: 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69  ITE_NULLEQ bit i
dc20: 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65  s set in P5, the
dc30: 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  n NULL values ar
dc40: 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20  e considered.** 
dc50: 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f  equal to one ano
dc60: 74 68 65 72 2c 20 70 72 6f 76 69 64 65 64 20 74  ther, provided t
dc70: 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 20  hat they do not 
dc80: 68 61 76 65 20 74 68 65 69 72 20 4d 45 4d 5f 43  have their MEM_C
dc90: 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74 20 73 65  leared.** bit se
dca0: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
dcb0: 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ne P1 P2 P3 P4 
dcc0: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
dcd0: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
dce0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
dcf0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
dd00: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
dd10: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
dd20: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
dd30: 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61   P3 are not equa
dd40: 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  l.  See the Lt o
dd50: 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64  pcode for.** add
dd60: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
dd70: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  ion..**.** If SQ
dd80: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
dd90: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
dda0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
ddb0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
ddc0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
ddd0: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
dde0: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
ddf0: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
de00: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
de10: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
de20: 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65  parison is false
de30: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
de40: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
de50: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
de60: 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  true..** If neit
de70: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
de80: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
de90: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
dea0: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
deb0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
dec0: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
ded0: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
dee0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31  /* Opcode: Eq P1
def0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
df00: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
df10: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
df20: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
df30: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
df40: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
df50: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
df60: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
df70: 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20  e equal..** See 
df80: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
df90: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
dfa0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
dfb0: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
dfc0: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
dfd0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
dfe0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
dff0: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
e000: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
e010: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
e020: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
e030: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
e040: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
e050: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e060: 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72  true.  If either
e070: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e080: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e090: 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66   is false..** If
e0a0: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
e0b0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73   is NULL the res
e0c0: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
e0d0: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
e0e0: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
e0f0: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
e100: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
e110: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
e120: 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Le P1 P2 P3 P4 P
e130: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
e140: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
e150: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
e160: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
e170: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
e180: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
e190: 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73  gister P3 is les
e1a0: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
e1b0: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
e1c0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
e1d0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
e1e0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
e1f0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e200: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
e210: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
e220: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
e230: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
e240: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
e250: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
e260: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
e270: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
e280: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
e290: 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e  ter than the con
e2a0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
e2b0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
e2c0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
e2d0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e2e0: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
e2f0: 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33  ode: Ge P1 P2 P3
e300: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
e310: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
e320: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e330: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
e340: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
e350: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
e360: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
e370: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
e380: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
e390: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
e3a0: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
e3b0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e3c0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e3d0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
e3e0: 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20   OP_Eq:         
e3f0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
e400: 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e   TK_EQ, jump, in
e410: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
e420: 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Ne:           
e430: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e440: 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_NE, jump, in1,
e450: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
e460: 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Lt:             
e470: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
e480: 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  LT, jump, in1, i
e490: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65  n3 */.case OP_Le
e4a0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
e4b0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45  /* same as TK_LE
e4c0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
e4d0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20   */.case OP_Gt: 
e4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e4f0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20   same as TK_GT, 
e500: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
e510: 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20  /.case OP_Ge: { 
e520: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e530: 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75  ame as TK_GE, ju
e540: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
e550: 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
e560: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
e570: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
e580: 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73  n of pIn1 agains
e590: 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72  t pIn3 */.  char
e5a0: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
e5b0: 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75  /* Affinity to u
e5c0: 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  se for compariso
e5d0: 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  n */.  u16 flags
e5e0: 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  1;         /* Co
e5f0: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
e600: 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61  lue of pIn1->fla
e610: 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  gs */.  u16 flag
e620: 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s3;         /* C
e630: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
e640: 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c  alue of pIn3->fl
e650: 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ags */..  pIn1 =
e660: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e670: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
e680: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67  pOp->p3];.  flag
e690: 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  s1 = pIn1->flags
e6a0: 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e  ;.  flags3 = pIn
e6b0: 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  3->flags;.  if( 
e6c0: 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33  (flags1 | flags3
e6d0: 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  )&MEM_Null ){.  
e6e0: 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68    /* One or both
e6f0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
e700: 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f  LL */.    if( pO
e710: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
e720: 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f  ULLEQ ){.      /
e730: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
e740: 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68  EQ is set (which
e750: 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65   will only happe
e760: 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f  n if the operato
e770: 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50  r is.      ** OP
e780: 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68  _Eq or OP_Ne) th
e790: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
e7a0: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
e7b0: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20  g on whether.   
e7c0: 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74     ** or not bot
e7d0: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  h operands are n
e7e0: 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ull..      */.  
e7f0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
e800: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c  >opcode==OP_Eq |
e810: 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
e820: 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73  P_Ne );.      as
e830: 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26 20  sert( (flags1 & 
e840: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20  MEM_Cleared)==0 
e850: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  );.      if( (fl
e860: 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  ags1&MEM_Null)!=
e870: 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61  0.       && (fla
e880: 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs3&MEM_Null)!=0
e890: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
e8a0: 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d  s3&MEM_Cleared)=
e8b0: 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
e8c0: 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a      res = 0;  /*
e8d0: 20 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75   Results are equ
e8e0: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73  al */.      }els
e8f0: 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  e{.        res =
e900: 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20   1;  /* Results 
e910: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f  are not equal */
e920: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
e930: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c  se{.      /* SQL
e940: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c  ITE_NULLEQ is cl
e950: 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74  ear and at least
e960: 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20   one operand is 
e970: 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74  NULL,.      ** t
e980: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
e990: 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20  s always NULL.. 
e9a0: 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70       ** The jump
e9b0: 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
e9c0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
e9d0: 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20  LL bit is set.. 
e9e0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
e9f0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
ea00: 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
ea10: 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d        pOut = &aM
ea20: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
ea30: 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
ea40: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  lag(pOut, MEM_Nu
ea50: 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ll);.        REG
ea60: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
ea70: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  >p2, pOut);.    
ea80: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
ea90: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d  >p5 & SQLITE_JUM
eaa0: 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20  PIFNULL ){.     
eab0: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d     pc = pOp->p2-
eac0: 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
ead0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
eae0: 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65  }else{.    /* Ne
eaf0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
eb00: 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d   NULL.  Do a com
eb10: 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20  parison. */.    
eb20: 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  affinity = pOp->
eb30: 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f  p5 & SQLITE_AFF_
eb40: 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66  MASK;.    if( af
eb50: 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20  finity ){.      
eb60: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
eb70: 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  n1, affinity, en
eb80: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61  coding);.      a
eb90: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
eba0: 33 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63  3, affinity, enc
ebb0: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 69 66  oding);.      if
ebc0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
ebd0: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
ebe0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73  ;.    }..    ass
ebf0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
ec00: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20  ==P4_COLLSEQ || 
ec10: 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30  pOp->p4.pColl==0
ec20: 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c   );.    ExpandBl
ec30: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 45 78  ob(pIn1);.    Ex
ec40: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a  pandBlob(pIn3);.
ec50: 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65      res = sqlite
ec60: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33  3MemCompare(pIn3
ec70: 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e  , pIn1, pOp->p4.
ec80: 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77  pColl);.  }.  sw
ec90: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
eca0: 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50  e ){.    case OP
ecb0: 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Eq:    res = re
ecc0: 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s==0;     break;
ecd0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a  .    case OP_Ne:
ece0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30      res = res!=0
ecf0: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
ed00: 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20   case OP_Lt:    
ed10: 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20  res = res<0;    
ed20: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
ed30: 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20  e OP_Le:    res 
ed40: 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72  = res<=0;     br
ed50: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
ed60: 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Gt:    res = re
ed70: 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s>0;      break;
ed80: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
ed90: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30      res = res>=0
eda0: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;     break;.  }
edb0: 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
edc0: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
edd0: 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26   ){.    pOut = &
ede0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
edf0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
ee00: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
ee10: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
ee20: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
ee30: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
ee40: 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54   res;.    REGIST
ee50: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
ee60: 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  , pOut);.  }else
ee70: 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
ee80: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
ee90: 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61    }..  /* Undo a
eea0: 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  ny changes made 
eeb0: 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  by applyAffinity
eec0: 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20  () to the input 
eed0: 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20  registers. */.  
eee0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 28 70  pIn1->flags = (p
eef0: 49 6e 31 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f  In1->flags&~MEM_
ef00: 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61  TypeMask) | (fla
ef10: 67 73 31 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  gs1&MEM_TypeMask
ef20: 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73  );.  pIn3->flags
ef30: 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26   = (pIn3->flags&
ef40: 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
ef50: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 54 79 70   (flags3&MEM_Typ
ef60: 65 4d 61 73 6b 29 3b 0a 20 20 62 72 65 61 6b 3b  eMask);.  break;
ef70: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
ef80: 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a  ermutation * * *
ef90: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20   P4 *.**.** Set 
efa0: 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
efb0: 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43  used by the OP_C
efc0: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20  ompare operator 
efd0: 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a  to be the array.
efe0: 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  ** of integers i
eff0: 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n P4..**.** The 
f000: 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f  permutation is o
f010: 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20  nly valid until 
f020: 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70  the next OP_Comp
f030: 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20  are that has.** 
f040: 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  the OPFLAG_PERMU
f050: 54 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35  TE bit set in P5
f060: 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20  . Typically the 
f070: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73  OP_Permutation s
f080: 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20  hould .** occur 
f090: 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f  immediately prio
f0a0: 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70  r to the OP_Comp
f0b0: 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  are..*/.case OP_
f0c0: 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20  Permutation: {. 
f0d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
f0e0: 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
f0f0: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
f100: 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61  Op->p4.ai );.  a
f110: 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70  Permute = pOp->p
f120: 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.ai;.  break;.}
f130: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
f140: 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
f150: 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72   P5.**.** Compar
f160: 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66  e two vectors of
f170: 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
f180: 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
f190: 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a  -1) (call this.*
f1a0: 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e  * vector "A") an
f1b0: 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65  d in reg(P2)..re
f1c0: 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29  g(P2+P3-1) ("B")
f1d0: 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75  .  Save the resu
f1e0: 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d  lt of.** the com
f1f0: 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20  parison for use 
f200: 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a  by the next OP_J
f210: 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a  ump instruct..**
f220: 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
f230: 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
f240: 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
f250: 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70  he order of comp
f260: 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74  arison is.** det
f270: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d  ermined by the m
f280: 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65  ost recent OP_Pe
f290: 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74  rmutation operat
f2a0: 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f  or.  If the.** O
f2b0: 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
f2c0: 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  t is clear, then
f2d0: 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f   register are co
f2e0: 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e  mpared in sequen
f2f0: 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a  tial.** order..*
f300: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
f310: 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
f320: 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
f330: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
f340: 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
f350: 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
f360: 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
f370: 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
f380: 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
f390: 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
f3a0: 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
f3b0: 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
f3c0: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
f3d0: 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
f3e0: 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
f3f0: 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
f400: 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
f410: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
f420: 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
f430: 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
f440: 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
f450: 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
f460: 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
f470: 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
f480: 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
f490: 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74  .  int p1;.  int
f4a0: 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79   p2;.  const Key
f4b0: 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
f4c0: 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c    int idx;.  Col
f4d0: 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20  lSeq *pColl;    
f4e0: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
f4f0: 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20  uence to use on 
f500: 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69  this term */.  i
f510: 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
f520: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
f530: 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
f540: 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70  der */..  if( (p
f550: 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
f560: 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50  PERMUTE)==0 ) aP
f570: 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20  ermute = 0;.  n 
f580: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65  = pOp->p3;.  pKe
f590: 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
f5a0: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
f5b0: 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
f5c0: 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
f5d0: 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
f5e0: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
f5f0: 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  p2;.#if SQLITE_D
f600: 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
f610: 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
f620: 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
f630: 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
f640: 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
f650: 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
f660: 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
f670: 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
f680: 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  x<=p->nMem+1 );.
f690: 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
f6a0: 20 26 26 20 70 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d   && p2+mx<=p->nM
f6b0: 65 6d 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  em+1 );.  }else{
f6c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
f6d0: 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d  0 && p1+n<=p->nM
f6e0: 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  em+1 );.    asse
f6f0: 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e  rt( p2>0 && p2+n
f700: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20  <=p->nMem+1 );. 
f710: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
f720: 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66  ITE_DEBUG */.  f
f730: 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
f740: 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65  ){.    idx = aPe
f750: 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65  rmute ? aPermute
f760: 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73  [i] : i;.    ass
f770: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
f780: 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29  &aMem[p1+idx]) )
f790: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
f7a0: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
f7b0: 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52  2+idx]) );.    R
f7c0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31  EGISTER_TRACE(p1
f7d0: 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69  +idx, &aMem[p1+i
f7e0: 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  dx]);.    REGIST
f7f0: 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c  ER_TRACE(p2+idx,
f800: 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b   &aMem[p2+idx]);
f810: 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70  .    assert( i<p
f820: 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20  KeyInfo->nField 
f830: 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70  );.    pColl = p
f840: 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69  KeyInfo->aColl[i
f850: 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b  ];.    bRev = pK
f860: 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64  eyInfo->aSortOrd
f870: 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70  er[i];.    iComp
f880: 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  are = sqlite3Mem
f890: 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31  Compare(&aMem[p1
f8a0: 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b  +idx], &aMem[p2+
f8b0: 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20  idx], pColl);.  
f8c0: 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29    if( iCompare )
f8d0: 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76  {.      if( bRev
f8e0: 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69   ) iCompare = -i
f8f0: 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62  Compare;.      b
f900: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
f910: 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a    aPermute = 0;.
f920: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
f930: 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50  pcode: Jump P1 P
f940: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
f950: 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72  ump to the instr
f960: 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73  uction at addres
f970: 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20  s P1, P2, or P3 
f980: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
f990: 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d  ther.** in the m
f9a0: 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f  ost recent OP_Co
f9b0: 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f  mpare instructio
f9c0: 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20  n the P1 vector 
f9d0: 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  was less than.**
f9e0: 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72   equal to, or gr
f9f0: 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50  eater than the P
fa00: 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63  2 vector, respec
fa10: 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20  tively..*/.case 
fa20: 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20  OP_Jump: {      
fa30: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
fa40: 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65  /.  if( iCompare
fa50: 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  <0 ){.    pc = p
fa60: 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65  Op->p1 - 1;.  }e
fa70: 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65  lse if( iCompare
fa80: 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ==0 ){.    pc = 
fa90: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
faa0: 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70  else{.    pc = p
fab0: 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p3 - 1;.  }.
fac0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
fad0: 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32  pcode: And P1 P2
fae0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61   P3 * *.**.** Ta
faf0: 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41  ke the logical A
fb00: 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
fb10: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
fb20: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77   and P2 and.** w
fb30: 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20  rite the result 
fb40: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
fb50: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
fb60: 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20  r P1 or P2 is 0 
fb70: 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65  (false) then the
fb80: 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65   result is 0 eve
fb90: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65  n if.** the othe
fba0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
fbb0: 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75    A NULL and tru
fbc0: 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67  e or two NULLs g
fbd0: 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75  ive.** a NULL ou
fbe0: 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tput..*/./* Opco
fbf0: 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20  de: Or P1 P2 P3 
fc00: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  * *.**.** Take t
fc10: 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66  he logical OR of
fc20: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
fc30: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
fc40: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
fc50: 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67  he answer in reg
fc60: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
fc70: 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
fc80: 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74  P2 is nonzero (t
fc90: 72 75 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  rue) then the re
fca0: 73 75 6c 74 20 69 73 20 31 20 28 74 72 75 65 29  sult is 1 (true)
fcb0: 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20  .** even if the 
fcc0: 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
fcd0: 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
fce0: 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55   false or two NU
fcf0: 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55  LLs.** give a NU
fd00: 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61  LL output..*/.ca
fd10: 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20  se OP_And:      
fd20: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
fd30: 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20  as TK_AND, in1, 
fd40: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
fd50: 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20  e OP_Or: {      
fd60: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
fd70: 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e  s TK_OR, in1, in
fd80: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74  2, out3 */.  int
fd90: 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20   v1;    /* Left 
fda0: 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c  operand:  0==FAL
fdb0: 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
fdc0: 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
fdd0: 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20  */.  int v2;    
fde0: 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64  /* Right operand
fdf0: 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54  : 0==FALSE, 1==T
fe00: 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
fe10: 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49  or NULL */..  pI
fe20: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
fe30: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
fe40: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
fe50: 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b  l ){.    v1 = 2;
fe60: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31  .  }else{.    v1
fe70: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
fe80: 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
fe90: 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61  .  }.  pIn2 = &a
fea0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
feb0: 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  if( pIn2->flags 
fec0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
fed0: 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v2 = 2;.  }els
fee0: 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69  e{.    v2 = sqli
fef0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
ff00: 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn2)!=0;.  }.  
ff10: 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
ff20: 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73  =OP_And ){.    s
ff30: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
ff40: 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f  gned char and_lo
ff50: 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20  gic[] = { 0, 0, 
ff60: 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32  0, 0, 1, 2, 0, 2
ff70: 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
ff80: 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76  and_logic[v1*3+v
ff90: 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2];.  }else{.   
ffa0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
ffb0: 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c  signed char or_l
ffc0: 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c  ogic[] = { 0, 1,
ffd0: 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20   2, 1, 1, 1, 2, 
ffe0: 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  1, 2 };.    v1 =
fff0: 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76   or_logic[v1*3+v
10000 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d  2];.  }.  pOut =
10010 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
10020 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a  .  if( v1==2 ){.
10030 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
10040 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
10050 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  l);.  }else{.   
10060 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b   pOut->u.i = v1;
10070 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
10080 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
10090 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
100a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
100b0 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
100c0 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
100d0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
100e0 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
100f0 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
10100 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61  re the.** boolea
10110 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20  n complement in 
10120 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
10130 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
10140 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a  gister P1 is .**
10150 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55   NULL, then a NU
10160 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  LL is stored in 
10170 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
10180 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
10190 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
101a0 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  TK_NOT, in1, out
101b0 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
101c0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
101d0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
101e0 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
101f0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
10200 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
10210 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
10220 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  (pOut);.  }else{
10230 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
10240 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
10250 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e  , !sqlite3VdbeIn
10260 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20  tValue(pIn1));. 
10270 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10280 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74  * Opcode: BitNot
10290 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
102a0 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
102b0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
102c0 73 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e  ster P1 as an in
102d0 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68  teger.  Store th
102e0 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65  e.** ones-comple
102f0 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76  ment of the P1 v
10300 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
10310 65 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f  er P2.  If P1 ho
10320 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68  lds.** a NULL th
10330 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  en store a NULL 
10340 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
10350 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20  P_BitNot: {     
10360 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
10370 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e  as TK_BITNOT, in
10380 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
10390 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
103a0 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
103b0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
103c0 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
103d0 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
103e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
103f0 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
10400 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
10410 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
10420 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33  4(pOut, ~sqlite3
10430 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
10440 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1));.  }.  break
10450 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10460 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  Once P1 P2 * * *
10470 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 69 66 20  .**.** Check if 
10480 4f 50 5f 4f 6e 63 65 20 66 6c 61 67 20 50 31 20  OP_Once flag P1 
10490 69 73 20 73 65 74 2e 20 49 66 20 73 6f 2c 20 6a  is set. If so, j
104a0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
104b0 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  on P2. Otherwise
104c0 2c 0a 2a 2a 20 73 65 74 20 74 68 65 20 66 6c 61  ,.** set the fla
104d0 67 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  g and fall throu
104e0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
104f0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
10500 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20  ase OP_Once: {  
10510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
10520 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
10530 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65  pOp->p1<p->nOnce
10540 46 6c 61 67 20 29 3b 0a 20 20 69 66 28 20 70 2d  Flag );.  if( p-
10550 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e  >aOnceFlag[pOp->
10560 70 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  p1] ){.    pc = 
10570 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c  pOp->p2-1;.  }el
10580 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65  se{.    p->aOnce
10590 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  Flag[pOp->p1] = 
105a0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
105b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
105c0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
105d0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
105e0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
105f0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72  egister P1 is tr
10600 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ue.  The value.*
10610 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
10620 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75  true if it is nu
10630 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65  meric and non-ze
10640 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
10650 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
10660 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
10670 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 6e   jump if P3 is n
10680 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f  on-zero..*/./* O
10690 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20  pcode: IfNot P1 
106a0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
106b0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
106c0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
106d0 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e  ter P1 is False.
106e0 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
106f0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c  s considered fal
10700 73 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e  se if it has a n
10710 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20  umeric value of 
10720 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
10730 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
10740 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
10750 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
10760 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f   zero..*/.case O
10770 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20  P_If:           
10780 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
10790 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  n1 */.case OP_If
107a0 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
107b0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
107c0 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e  /.  int c;.  pIn
107d0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
107e0 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
107f0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10800 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d   ){.    c = pOp-
10810 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69  >p3;.  }else{.#i
10820 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
10830 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
10840 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
10850 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
10860 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20  )!=0;.#else.    
10870 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
10880 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  ealValue(pIn1)!=
10890 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  0.0;.#endif.    
108a0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
108b0 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20  =OP_IfNot ) c = 
108c0 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20  !c;.  }.  if( c 
108d0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
108e0 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
108f0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
10900 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a  : IsNull P1 P2 *
10910 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
10920 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
10930 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
10940 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
10950 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
10960 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
10970 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
10980 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
10990 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
109a0 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
109b0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
109c0 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
109d0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
109e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
109f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
10a00 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
10a10 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
10a20 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
10a30 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
10a40 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a   not NULL.  .*/.
10a50 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a  case OP_NotNull:
10a60 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
10a70 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e   same as TK_NOTN
10a80 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
10a90 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
10aa0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
10ab0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
10ac0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
10ad0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
10ae0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
10af0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10b00 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33   Column P1 P2 P3
10b10 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74   P4 P5.**.** Int
10b20 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20  erpret the data 
10b30 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
10b40 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74  oints to as a st
10b50 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73  ructure built us
10b60 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52  ing.** the MakeR
10b70 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
10b80 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b  n.  (See the Mak
10b90 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66  eRecord opcode f
10ba0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  or additional.**
10bb0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
10bc0 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  ut the format of
10bd0 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74   the data.)  Ext
10be0 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63  ract the P2-th c
10bf0 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68  olumn.** from th
10c00 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74  is record.  If t
10c10 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
10c20 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61  at (P2+1) .** va
10c30 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  lues in the reco
10c40 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55  rd, extract a NU
10c50 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  LL..**.** The va
10c60 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73  lue extracted is
10c70 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
10c80 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
10c90 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
10ca0 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20  ains fewer than 
10cb0 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20  P2 fields, then 
10cc0 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20  extract a NULL. 
10cd0 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50   Or,.** if the P
10ce0 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  4 argument is a 
10cf0 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76  P4_MEM use the v
10d00 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61  alue of the P4 a
10d10 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68  rgument as.** th
10d20 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20  e result..**.** 
10d30 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c  If the OPFLAG_CL
10d40 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20  EARCACHE bit is 
10d50 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31  set on P5 and P1
10d60 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62   is a pseudo-tab
10d70 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  le cursor,.** th
10d80 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20  en the cache of 
10d90 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65  the cursor is re
10da0 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74  set prior to ext
10db0 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75  racting the colu
10dc0 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  mn..** The first
10dd0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e   OP_Column again
10de0 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  st a pseudo-tabl
10df0 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75  e after the valu
10e00 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  e of the content
10e10 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73  .** register has
10e20 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20   changed should 
10e30 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65  have this bit se
10e40 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
10e50 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
10e60 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45   and OPFLAG_TYPE
10e70 4f 46 41 52 47 20 62 69 74 73 20 61 72 65 20 73  OFARG bits are s
10e80 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a  et on P5 when.**
10e90 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 67   the result is g
10ea0 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c  uaranteed to onl
10eb0 79 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  y be used as the
10ec0 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c   argument of a l
10ed0 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79  ength().** or ty
10ee0 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c  peof() function,
10ef0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
10f00 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c  The loading of l
10f10 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62  arge blobs can b
10f20 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72  e.** skipped for
10f30 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c   length() and al
10f40 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e  l content loadin
10f50 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64  g can be skipped
10f60 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a   for typeof()..*
10f70 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e  /.case OP_Column
10f80 3a 20 7b 0a 20 20 75 33 32 20 70 61 79 6c 6f 61  : {.  u32 payloa
10f90 64 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62  dSize;   /* Numb
10fa0 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
10fb0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
10fc0 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64 payloadSize64
10fd0 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62  ; /* Number of b
10fe0 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
10ff0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20  rd */.  int p1; 
11000 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 31             /* P1
11010 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70   value of the op
11020 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32  code */.  int p2
11030 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11040 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f  column number to
11050 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56   retrieve */.  V
11060 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
11070 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
11080 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rsor */.  char *
11090 7a 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  zRec;        /* 
110a0 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c  Pointer to compl
110b0 65 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20  ete record-data 
110c0 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  */.  BtCursor *p
110d0 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42  Crsr;   /* The B
110e0 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20  Tree cursor */. 
110f0 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20   u32 *aType;    
11100 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20      /* aType[i] 
11110 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69  holds the numeri
11120 63 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d  c type of the i-
11130 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75  th column */.  u
11140 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20  32 *aOffset;    
11150 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20    /* aOffset[i] 
11160 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61  is offset to sta
11170 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69  rt of data for i
11180 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
11190 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
111a0 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20     /* number of 
111b0 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
111c0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  cord */.  int le
111d0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
111e0 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  The length of th
111f0 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74  e serialized dat
11200 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  a for the column
11210 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
11220 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
11230 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68   counter */.  ch
11240 61 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20  ar *zData;      
11250 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20   /* Part of the 
11260 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
11270 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  oded */.  Mem *p
11280 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Dest;        /* 
11290 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74  Where to write t
112a0 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c  he extracted val
112b0 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d  ue */.  Mem sMem
112c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
112d0 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
112e0 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
112f0 65 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78  ed */.  u8 *zIdx
11300 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
11310 64 65 78 20 69 6e 74 6f 20 68 65 61 64 65 72 20  dex into header 
11320 2a 2f 0a 20 20 75 38 20 2a 7a 45 6e 64 48 64 72  */.  u8 *zEndHdr
11330 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
11340 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
11350 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
11360 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65  r */.  u32 offse
11370 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66  t;        /* Off
11380 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  set into the dat
11390 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65  a */.  u32 szFie
113a0 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ld;       /* Num
113b0 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
113c0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
113d0 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20   field */.  int 
113e0 73 7a 48 64 72 3b 20 20 20 20 20 20 20 20 20 2f  szHdr;         /
113f0 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65  * Size of the he
11400 61 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20  ader size field 
11410 61 74 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f  at start of reco
11420 72 64 20 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69  rd */.  int avai
11430 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
11440 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
11450 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20   available data 
11460 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20  */.  u32 t;     
11470 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70          /* A typ
11480 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  e code from the 
11490 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f  record header */
114a0 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20  .  Mem *pReg;   
114b0 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54        /* PseudoT
114c0 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73  able input regis
114d0 74 65 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20  ter */...  p1 = 
114e0 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
114f0 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20  pOp->p2;.  pC = 
11500 30 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65  0;.  memset(&sMe
11510 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
11520 6d 29 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  m));.  assert( p
11530 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
11540 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
11550 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
11560 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65  p->nMem );.  pDe
11570 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
11580 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
11590 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
115a0 29 3b 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a 0a  );.  zRec = 0;..
115b0 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20    /* This block 
115c0 73 65 74 73 20 74 68 65 20 76 61 72 69 61 62 6c  sets the variabl
115d0 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f  e payloadSize to
115e0 20 62 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   be the total nu
115f0 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74  mber of.  ** byt
11600 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
11610 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63  ..  **.  ** zRec
11620 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68   is set to be th
11630 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  e complete text 
11640 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 66  of the record if
11650 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65   it is available
11660 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c  ..  ** The compl
11670 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74 20  ete record text 
11680 69 73 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61  is always availa
11690 62 6c 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  ble for pseudo-t
116a0 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68  ables.  ** If th
116b0 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
116c0 65 64 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20  ed in a cursor, 
116d0 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63  the complete rec
116e0 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69  ord text.  ** mi
116f0 67 68 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65  ght be available
11700 20 69 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f   in the  pC->aRo
11710 77 20 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20  w cache.  Or it 
11720 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20  might not be..  
11730 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 20 69  ** If the data i
11740 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20  s unavailable,  
11750 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e  zRec is set to N
11760 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  ULL..  **.  ** W
11770 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74  e also compute t
11780 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
11790 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f  umns in the reco
117a0 72 64 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73  rd.  For cursors
117b0 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65  ,.  ** the numbe
117c0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20  r of columns is 
117d0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64  stored in the Vd
117e0 62 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20  beCursor.nField 
117f0 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20  element..  */.  
11800 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31  pC = p->apCsr[p1
11810 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
11820 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  =0 );.#ifndef SQ
11830 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
11840 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28  LTABLE.  assert(
11850 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
11860 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ==0 );.#endif.  
11870 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
11880 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72  sor;.  if( pCrsr
11890 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  !=0 ){.    /* Th
118a0 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
118b0 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a  ed in a B-Tree *
118c0 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
118d0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
118e0 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
118f0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
11900 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
11910 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
11920 77 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f  w ){.      paylo
11930 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20  adSize = 0;.    
11940 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61  }else if( pC->ca
11950 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61  cheStatus==p->ca
11960 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20  cheCtr ){.      
11970 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43  payloadSize = pC
11980 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  ->payloadSize;. 
11990 20 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61       zRec = (cha
119a0 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20  r*)pC->aRow;.   
119b0 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69   }else if( pC->i
119c0 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20  sIndex ){.      
119d0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
119e0 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
119f0 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
11a00 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
11a10 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
11a20 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79  Size(pCrsr, &pay
11a30 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20  loadSize64);.   
11a40 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
11a50 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
11a60 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66   True because of
11a70 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
11a80 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20  call above */.  
11a90 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74      /* sqlite3Bt
11aa0 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28  reeParseCellPtr(
11ab0 29 20 75 73 65 73 20 67 65 74 56 61 72 69 6e 74  ) uses getVarint
11ac0 33 32 28 29 20 74 6f 20 65 78 74 72 61 63 74 20  32() to extract 
11ad0 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 70 61 79  the.      ** pay
11ae0 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74  load size, so it
11af0 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66   is impossible f
11b00 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  or payloadSize64
11b10 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20   to be.      ** 
11b20 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32 20 62  larger than 32 b
11b30 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  its. */.      as
11b40 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69  sert( (payloadSi
11b50 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41  ze64 & SQLITE_MA
11b60 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79  X_U32)==(u64)pay
11b70 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20  loadSize64 );.  
11b80 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
11b90 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69  = (u32)payloadSi
11ba0 7a 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ze64;.    }else{
11bb0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
11bc0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
11bd0 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
11be0 29 3b 0a 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c  );.      VVA_ONL
11bf0 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
11c00 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
11c10 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
11c20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
11c30 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
11c40 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28  ;   /* DataSize(
11c50 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
11c60 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
11c70 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 73  f( ALWAYS(pC->ps
11c80 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 29 20  eudoTableReg>0) 
11c90 29 7b 0a 20 20 20 20 70 52 65 67 20 3d 20 26 61  ){.    pReg = &a
11ca0 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61  Mem[pC->pseudoTa
11cb0 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 69 66 28  bleReg];.    if(
11cc0 20 70 43 2d 3e 6d 75 6c 74 69 50 73 65 75 64 6f   pC->multiPseudo
11cd0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
11ce0 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
11cf0 6f 70 79 28 70 44 65 73 74 2c 20 70 52 65 67 2b  opy(pDest, pReg+
11d00 70 32 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  p2, MEM_Ephem);.
11d10 20 20 20 20 20 20 44 65 65 70 68 65 6d 65 72 61        Deephemera
11d20 6c 69 7a 65 28 70 44 65 73 74 29 3b 0a 20 20 20  lize(pDest);.   
11d30 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
11d40 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 20  n_out;.    }.   
11d50 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66   assert( pReg->f
11d60 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
11d70 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
11d80 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20  emIsValid(pReg) 
11d90 29 3b 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69  );.    payloadSi
11da0 7a 65 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20  ze = pReg->n;.  
11db0 20 20 7a 52 65 63 20 3d 20 70 52 65 67 2d 3e 7a    zRec = pReg->z
11dc0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
11dd0 74 61 74 75 73 20 3d 20 28 70 4f 70 2d 3e 70 35  tatus = (pOp->p5
11de0 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43  &OPFLAG_CLEARCAC
11df0 48 45 29 20 3f 20 43 41 43 48 45 5f 53 54 41 4c  HE) ? CACHE_STAL
11e00 45 20 3a 20 70 2d 3e 63 61 63 68 65 43 74 72 3b  E : p->cacheCtr;
11e10 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 61 79  .    assert( pay
11e20 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a  loadSize==0 || z
11e30 52 65 63 21 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  Rec!=0 );.  }els
11e40 65 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e 73 69 64  e{.    /* Consid
11e50 65 72 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65  er the row to be
11e60 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 70 61 79   NULL */.    pay
11e70 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20  loadSize = 0;.  
11e80 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c 6f  }..  /* If paylo
11e90 61 64 53 69 7a 65 20 69 73 20 30 2c 20 74 68 65  adSize is 0, the
11ea0 6e 20 6a 75 73 74 20 73 74 6f 72 65 20 61 20 4e  n just store a N
11eb0 55 4c 4c 2e 20 20 54 68 69 73 20 63 61 6e 20 68  ULL.  This can h
11ec0 61 70 70 65 6e 20 62 65 63 61 75 73 65 20 6f 66  appen because of
11ed0 0a 20 20 2a 2a 20 6e 75 6c 6c 52 6f 77 20 6f 72  .  ** nullRow or
11ee0 20 62 65 63 61 75 73 65 20 6f 66 20 61 20 63 6f   because of a co
11ef0 72 72 75 70 74 20 64 61 74 61 62 61 73 65 2e 20  rrupt database. 
11f00 2a 2f 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64  */.  if( payload
11f10 53 69 7a 65 3d 3d 30 20 29 7b 0a 20 20 20 20 4d  Size==0 ){.    M
11f20 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44  emSetTypeFlag(pD
11f30 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  est, MEM_Null);.
11f40 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
11f50 6d 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 61 73  mn_out;.  }.  as
11f60 73 65 72 74 28 20 64 62 2d 3e 61 4c 69 6d 69 74  sert( db->aLimit
11f70 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
11f80 4e 47 54 48 5d 3e 3d 30 20 29 3b 0a 20 20 69 66  NGTH]>=0 );.  if
11f90 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20  ( payloadSize > 
11fa0 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
11fb0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
11fc0 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
11fd0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20   too_big;.  }.. 
11fe0 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46   nField = pC->nF
11ff0 69 65 6c 64 3b 0a 20 20 61 73 73 65 72 74 28 20  ield;.  assert( 
12000 70 32 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20  p2<nField );..  
12010 2f 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73  /* Read and pars
12020 65 20 74 68 65 20 74 61 62 6c 65 20 68 65 61 64  e the table head
12030 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 20 72  er.  Store the r
12040 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 70 61  esults of the pa
12050 72 73 65 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68  rse.  ** into th
12060 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
12070 63 61 63 68 65 20 66 69 65 6c 64 73 20 6f 66 20  cache fields of 
12080 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f  the cursor..  */
12090 0a 20 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61  .  aType = pC->a
120a0 54 79 70 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e  Type;.  if( pC->
120b0 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e  cacheStatus==p->
120c0 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20  cacheCtr ){.    
120d0 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f  aOffset = pC->aO
120e0 66 66 73 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ffset;.  }else{.
120f0 20 20 20 20 61 73 73 65 72 74 28 61 54 79 70 65      assert(aType
12100 29 3b 0a 20 20 20 20 61 76 61 69 6c 20 3d 20 30  );.    avail = 0
12110 3b 0a 20 20 20 20 70 43 2d 3e 61 4f 66 66 73 65  ;.    pC->aOffse
12120 74 20 3d 20 61 4f 66 66 73 65 74 20 3d 20 26 61  t = aOffset = &a
12130 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  Type[nField];.  
12140 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a    pC->payloadSiz
12150 65 20 3d 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b  e = payloadSize;
12160 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
12170 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43  atus = p->cacheC
12180 74 72 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75  tr;..    /* Figu
12190 72 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20  re out how many 
121a0 62 79 74 65 73 20 61 72 65 20 69 6e 20 74 68 65  bytes are in the
121b0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 69   header */.    i
121c0 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20  f( zRec ){.     
121d0 20 7a 44 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20   zData = zRec;. 
121e0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
121f0 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  if( pC->isIndex 
12200 29 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  ){.        zData
12210 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
12220 33 42 74 72 65 65 4b 65 79 46 65 74 63 68 28 70  3BtreeKeyFetch(p
12230 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
12240 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
12250 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61      zData = (cha
12260 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 44  r*)sqlite3BtreeD
12270 61 74 61 46 65 74 63 68 28 70 43 72 73 72 2c 20  ataFetch(pCrsr, 
12280 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d  &avail);.      }
12290 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 4b 65 79  .      /* If Key
122a0 46 65 74 63 68 28 29 2f 44 61 74 61 46 65 74 63  Fetch()/DataFetc
122b0 68 28 29 20 6d 61 6e 61 67 65 64 20 74 6f 20 67  h() managed to g
122c0 65 74 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  et the entire pa
122d0 79 6c 6f 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20  yload,.      ** 
122e0 73 61 76 65 20 74 68 65 20 70 61 79 6c 6f 61 64  save the payload
122f0 20 69 6e 20 74 68 65 20 70 43 2d 3e 61 52 6f 77   in the pC->aRow
12300 20 63 61 63 68 65 2e 20 20 54 68 61 74 20 77 69   cache.  That wi
12310 6c 6c 20 73 61 76 65 20 75 73 20 66 72 6f 6d 0a  ll save us from.
12320 20 20 20 20 20 20 2a 2a 20 68 61 76 69 6e 67 20        ** having 
12330 74 6f 20 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e  to make addition
12340 61 6c 20 63 61 6c 6c 73 20 74 6f 20 66 65 74 63  al calls to fetc
12350 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f  h the content po
12360 72 74 69 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a  rtion of.      *
12370 2a 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  * the record..  
12380 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
12390 65 72 74 28 20 61 76 61 69 6c 3e 3d 30 20 29 3b  ert( avail>=0 );
123a0 0a 20 20 20 20 20 20 69 66 28 20 70 61 79 6c 6f  .      if( paylo
123b0 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61  adSize <= (u32)a
123c0 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  vail ){.        
123d0 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20  zRec = zData;.  
123e0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
123f0 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20   (u8*)zData;.   
12400 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12410 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
12420 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
12430 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
12440 6e 67 20 61 73 73 65 72 74 20 69 73 20 74 72 75  ng assert is tru
12450 65 20 69 6e 20 61 6c 6c 20 63 61 73 65 73 20 65  e in all cases e
12460 78 63 65 70 74 20 77 68 65 6e 0a 20 20 20 20 2a  xcept when.    *
12470 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  * the database f
12480 69 6c 65 20 68 61 73 20 62 65 65 6e 20 63 6f 72  ile has been cor
12490 72 75 70 74 65 64 20 65 78 74 65 72 6e 61 6c 6c  rupted externall
124a0 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61 73 73  y..    **    ass
124b0 65 72 74 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20  ert( zRec!=0 || 
124c0 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69  avail>=payloadSi
124d0 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29  ze || avail>=9 )
124e0 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72 20 3d  ; */.    szHdr =
124f0 20 67 65 74 56 61 72 69 6e 74 33 32 28 28 75 38   getVarint32((u8
12500 2a 29 7a 44 61 74 61 2c 20 6f 66 66 73 65 74 29  *)zData, offset)
12510 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  ;..    /* Make s
12520 75 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61  ure a corrupt da
12530 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67  tabase has not g
12540 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73  iven us an overs
12550 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20  ize header..    
12560 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74  ** Do this now t
12570 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73  o avoid an overs
12580 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ize memory alloc
12590 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20  ation..    **.  
125a0 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65    ** Type entrie
125b0 73 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e  s can be between
125c0 20 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65   1 and 5 bytes e
125d0 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20  ach.  But 4 and 
125e0 35 20 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79  5 byte.    ** ty
125f0 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20  pes use so much 
12600 64 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20  data space that 
12610 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62  there can only b
12620 65 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66  e 4096 and 32 of
12630 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65  .    ** them, re
12640 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20  spectively.  So 
12650 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64  the maximum head
12660 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74  er length result
12670 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20  s from a.    ** 
12680 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20  3-byte type for 
12690 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69  each of the maxi
126a0 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c  mum of 32768 col
126b0 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a  umns plus three.
126c0 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74      ** extra byt
126d0 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64 65  es for the heade
126e0 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e  r length itself.
126f0 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20    32768*3 + 3 = 
12700 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20  98307..    */.  
12710 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39    if( offset > 9
12720 38 33 30 37 20 29 7b 0a 20 20 20 20 20 20 72 63  8307 ){.      rc
12730 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
12740 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f  T_BKPT;.      go
12750 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
12760 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
12770 43 6f 6d 70 75 74 65 20 69 6e 20 6c 65 6e 20 74  Compute in len t
12780 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
12790 65 73 20 6f 66 20 64 61 74 61 20 77 65 20 6e 65  es of data we ne
127a0 65 64 20 74 6f 20 72 65 61 64 20 69 6e 20 6f 72  ed to read in or
127b0 64 65 72 0a 20 20 20 20 2a 2a 20 74 6f 20 67 65  der.    ** to ge
127c0 74 20 6e 46 69 65 6c 64 20 74 79 70 65 20 76 61  t nField type va
127d0 6c 75 65 73 2e 20 20 6f 66 66 73 65 74 20 69 73  lues.  offset is
127e0 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20   an upper bound 
127f0 6f 6e 20 74 68 69 73 2e 20 20 42 75 74 0a 20 20  on this.  But.  
12800 20 20 2a 2a 20 6e 46 69 65 6c 64 20 6d 69 67 68    ** nField migh
12810 74 20 62 65 20 73 69 67 6e 69 66 69 63 61 6e 74  t be significant
12820 6c 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  ly less than the
12830 20 74 72 75 65 20 6e 75 6d 62 65 72 20 6f 66 20   true number of 
12840 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 2a 2a 20 69  columns.    ** i
12850 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 61 6e 64  n the table, and
12860 20 69 6e 20 74 68 61 74 20 63 61 73 65 2c 20 35   in that case, 5
12870 2a 6e 46 69 65 6c 64 2b 33 20 6d 69 67 68 74 20  *nField+3 might 
12880 62 65 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20  be smaller than 
12890 6f 66 66 73 65 74 2e 0a 20 20 20 20 2a 2a 20 57  offset..    ** W
128a0 65 20 77 61 6e 74 20 74 6f 20 6d 69 6e 69 6d 69  e want to minimi
128b0 7a 65 20 6c 65 6e 20 69 6e 20 6f 72 64 65 72 20  ze len in order 
128c0 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a  to limit the siz
128d0 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 0a  e of the memory.
128e0 20 20 20 20 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f      ** allocatio
128f0 6e 2c 20 65 73 70 65 63 69 61 6c 6c 79 20 69 66  n, especially if
12900 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
12910 61 73 65 20 66 69 6c 65 20 68 61 73 20 63 61 75  ase file has cau
12920 73 65 64 20 6f 66 66 73 65 74 0a 20 20 20 20 2a  sed offset.    *
12930 2a 20 74 6f 20 62 65 20 6f 76 65 72 73 69 7a 65  * to be oversize
12940 64 2e 20 4f 66 66 73 65 74 20 69 73 20 6c 69 6d  d. Offset is lim
12950 69 74 65 64 20 74 6f 20 39 38 33 30 37 20 61 62  ited to 98307 ab
12960 6f 76 65 2e 20 20 42 75 74 20 39 38 33 30 37 20  ove.  But 98307 
12970 6d 69 67 68 74 0a 20 20 20 20 2a 2a 20 73 74 69  might.    ** sti
12980 6c 6c 20 65 78 63 65 65 64 20 52 6f 62 73 6f 6e  ll exceed Robson
12990 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
129a0 6f 6e 20 6c 69 6d 69 74 73 20 6f 6e 20 73 6f 6d  on limits on som
129b0 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  e configurations
129c0 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 73 79 73 74  ..    ** On syst
129d0 65 6d 73 20 74 68 61 74 20 63 61 6e 6e 6f 74 20  ems that cannot 
129e0 74 6f 6c 65 72 61 74 65 20 6c 61 72 67 65 20 6d  tolerate large m
129f0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
12a00 73 2c 20 6e 46 69 65 6c 64 2a 35 2b 33 0a 20 20  s, nField*5+3.  
12a10 20 20 2a 2a 20 77 69 6c 6c 20 6c 69 6b 65 6c 79    ** will likely
12a20 20 62 65 20 6d 75 63 68 20 73 6d 61 6c 6c 65 72   be much smaller
12a30 20 73 69 6e 63 65 20 6e 46 69 65 6c 64 20 77 69   since nField wi
12a40 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6c 65 73  ll likely be les
12a50 73 20 74 68 61 6e 0a 20 20 20 20 2a 2a 20 32 30  s than.    ** 20
12a60 20 6f 72 20 73 6f 2e 20 20 54 68 69 73 20 69 6e   or so.  This in
12a70 73 75 72 65 73 20 74 68 61 74 20 52 6f 62 73 6f  sures that Robso
12a80 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  n memory allocat
12a90 69 6f 6e 20 6c 69 6d 69 74 73 20 61 72 65 0a 20  ion limits are. 
12aa0 20 20 20 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64     ** not exceed
12ab0 65 64 20 65 76 65 6e 20 66 6f 72 20 63 6f 72 72  ed even for corr
12ac0 75 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c  upt database fil
12ad0 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6c  es..    */.    l
12ae0 65 6e 20 3d 20 6e 46 69 65 6c 64 2a 35 20 2b 20  en = nField*5 + 
12af0 33 3b 0a 20 20 20 20 69 66 28 20 6c 65 6e 20 3e  3;.    if( len >
12b00 20 28 69 6e 74 29 6f 66 66 73 65 74 20 29 20 6c   (int)offset ) l
12b10 65 6e 20 3d 20 28 69 6e 74 29 6f 66 66 73 65 74  en = (int)offset
12b20 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 4b 65  ;..    /* The Ke
12b30 79 46 65 74 63 68 28 29 20 6f 72 20 44 61 74 61  yFetch() or Data
12b40 46 65 74 63 68 28 29 20 61 62 6f 76 65 20 61 72  Fetch() above ar
12b50 65 20 66 61 73 74 20 61 6e 64 20 77 69 6c 6c 20  e fast and will 
12b60 67 65 74 20 74 68 65 20 65 6e 74 69 72 65 0a 20  get the entire. 
12b70 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61     ** record hea
12b80 64 65 72 20 69 6e 20 6d 6f 73 74 20 63 61 73 65  der in most case
12b90 73 2e 20 20 42 75 74 20 74 68 65 79 20 77 69 6c  s.  But they wil
12ba0 6c 20 66 61 69 6c 20 74 6f 20 67 65 74 20 74 68  l fail to get th
12bb0 65 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a  e complete.    *
12bc0 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  * record header 
12bd0 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  if the record he
12be0 61 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 66 69  ader does not fi
12bf0 74 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 70 61  t on a single pa
12c00 67 65 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65  ge.    ** in the
12c10 20 42 2d 54 72 65 65 2e 20 20 57 68 65 6e 20 74   B-Tree.  When t
12c20 68 61 74 20 68 61 70 70 65 6e 73 2c 20 75 73 65  hat happens, use
12c30 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
12c40 72 6f 6d 42 74 72 65 65 28 29 20 74 6f 0a 20 20  romBtree() to.  
12c50 20 20 2a 2a 20 61 63 71 75 69 72 65 20 74 68 65    ** acquire the
12c60 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72   complete header
12c70 20 74 65 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20   text..    */.  
12c80 20 20 69 66 28 20 21 7a 52 65 63 20 26 26 20 61    if( !zRec && a
12c90 76 61 69 6c 3c 6c 65 6e 20 29 7b 0a 20 20 20 20  vail<len ){.    
12ca0 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30    sMem.flags = 0
12cb0 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 64 62 20  ;.      sMem.db 
12cc0 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
12cd0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
12ce0 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30  omBtree(pCrsr, 0
12cf0 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64  , len, pC->isInd
12d00 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ex, &sMem);.    
12d10 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
12d20 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
12d30 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
12d40 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
12d50 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b   zData = sMem.z;
12d60 0a 20 20 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48  .    }.    zEndH
12d70 64 72 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74  dr = (u8 *)&zDat
12d80 61 5b 6c 65 6e 5d 3b 0a 20 20 20 20 7a 49 64 78  a[len];.    zIdx
12d90 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b   = (u8 *)&zData[
12da0 73 7a 48 64 72 5d 3b 0a 0a 20 20 20 20 2f 2a 20  szHdr];..    /* 
12db0 53 63 61 6e 20 74 68 65 20 68 65 61 64 65 72 20  Scan the header 
12dc0 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 66 69  and use it to fi
12dd0 6c 6c 20 69 6e 20 74 68 65 20 61 54 79 70 65 5b  ll in the aType[
12de0 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a  ] and aOffset[].
12df0 20 20 20 20 2a 2a 20 61 72 72 61 79 73 2e 20 20      ** arrays.  
12e00 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f  aType[i] will co
12e10 6e 74 61 69 6e 20 74 68 65 20 74 79 70 65 20 69  ntain the type i
12e20 6e 74 65 67 65 72 20 66 6f 72 20 74 68 65 20 69  nteger for the i
12e30 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d  -th.    ** colum
12e40 6e 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d  n and aOffset[i]
12e50 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68   will contain th
12e60 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
12e70 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20  e beginning.    
12e80 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
12e90 20 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66   to the start of
12ea0 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68   the data for th
12eb0 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20  e i-th column.  
12ec0 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30    */.    for(i=0
12ed0 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  ; i<nField; i++)
12ee0 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78  {.      if( zIdx
12ef0 3c 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20  <zEndHdr ){.    
12f00 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
12f10 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 20   offset;.       
12f20 20 69 66 28 20 7a 49 64 78 5b 30 5d 3c 30 78 38   if( zIdx[0]<0x8
12f30 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74  0 ){.          t
12f40 20 3d 20 7a 49 64 78 5b 30 5d 3b 0a 20 20 20 20   = zIdx[0];.    
12f50 20 20 20 20 20 20 7a 49 64 78 2b 2b 3b 0a 20 20        zIdx++;.  
12f60 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
12f70 20 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 73         zIdx += s
12f80 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
12f90 32 28 7a 49 64 78 2c 20 26 74 29 3b 0a 20 20 20  2(zIdx, &t);.   
12fa0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61       }.        a
12fb0 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20  Type[i] = t;.   
12fc0 20 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73       szField = s
12fd0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
12fe0 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20  TypeLen(t);.    
12ff0 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a      offset += sz
13000 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69  Field;.        i
13010 66 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c  f( offset<szFiel
13020 64 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66  d ){  /* True if
13030 20 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77   offset overflow
13040 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a  s */.          z
13050 49 64 78 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31  Idx = &zEndHdr[1
13060 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51  ];  /* Forces SQ
13070 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74  LITE_CORRUPT ret
13080 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20  urn below */.   
13090 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
130a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
130b0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  lse{.        /* 
130c0 49 66 20 69 20 69 73 20 6c 65 73 73 20 74 68 61  If i is less tha
130d0 74 20 6e 46 69 65 6c 64 2c 20 74 68 65 6e 20 74  t nField, then t
130e0 68 65 72 65 20 61 72 65 20 66 65 77 65 72 20 66  here are fewer f
130f0 69 65 6c 64 73 20 69 6e 20 74 68 69 73 0a 20 20  ields in this.  
13100 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20        ** record 
13110 74 68 61 6e 20 53 65 74 4e 75 6d 43 6f 6c 75 6d  than SetNumColum
13120 6e 73 20 69 6e 64 69 63 61 74 65 64 20 74 68 65  ns indicated the
13130 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69  re are columns i
13140 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a  n the.        **
13150 20 74 61 62 6c 65 2e 20 53 65 74 20 74 68 65 20   table. Set the 
13160 6f 66 66 73 65 74 20 66 6f 72 20 61 6e 79 20 65  offset for any e
13170 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74  xtra columns not
13180 20 70 72 65 73 65 6e 74 20 69 6e 0a 20 20 20 20   present in.    
13190 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72      ** the recor
131a0 64 20 74 6f 20 30 2e 20 54 68 69 73 20 74 65 6c  d to 0. This tel
131b0 6c 73 20 63 6f 64 65 20 62 65 6c 6f 77 20 74 6f  ls code below to
131c0 20 73 74 6f 72 65 20 74 68 65 20 64 65 66 61 75   store the defau
131d0 6c 74 20 76 61 6c 75 65 0a 20 20 20 20 20 20 20  lt value.       
131e0 20 2a 2a 20 66 6f 72 20 74 68 65 20 63 6f 6c 75   ** for the colu
131f0 6d 6e 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65  mn instead of de
13200 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76 61  serializing a va
13210 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63  lue from the rec
13220 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ord..        */.
13230 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b          aOffset[
13240 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  i] = 0;.      }.
13250 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
13260 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
13270 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d  &sMem);.    sMem
13280 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
13290 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77 65  l;..    /* If we
132a0 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20   have read more 
132b0 68 65 61 64 65 72 20 64 61 74 61 20 74 68 61 6e  header data than
132c0 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69   was contained i
132d0 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20  n the header,.  
132e0 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65    ** or if the e
132f0 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66  nd of the last f
13300 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20  ield appears to 
13310 62 65 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  be past the end 
13320 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 65  of the.    ** re
13330 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20  cord, or if the 
13340 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
13350 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
13360 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20 65   be before the e
13370 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  nd.    ** of the
13380 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c   record (when al
13390 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74  l fields present
133a0 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20  ), then we must 
133b0 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20  be dealing .    
133c0 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75 70  ** with a corrup
133d0 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20  t database..    
133e0 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49 64 78  */.    if( (zIdx
133f0 20 3e 20 7a 45 6e 64 48 64 72 29 20 7c 7c 20 28   > zEndHdr) || (
13400 6f 66 66 73 65 74 20 3e 20 70 61 79 6c 6f 61 64  offset > payload
13410 53 69 7a 65 29 0a 20 20 20 20 20 20 20 20 20 7c  Size).         |
13420 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72  | (zIdx==zEndHdr
13430 20 26 26 20 6f 66 66 73 65 74 21 3d 70 61 79 6c   && offset!=payl
13440 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20  oadSize) ){.    
13450 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
13460 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
13470 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
13480 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _out;.    }.  }.
13490 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f  .  /* Get the co
134a0 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  lumn information
134b0 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  . If aOffset[p2]
134c0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
134d0 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61  en .  ** deseria
134e0 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66  lize the value f
134f0 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20  rom the record. 
13500 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69  If aOffset[p2] i
13510 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65  s zero,.  ** the
13520 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20  n there are not 
13530 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e  enough fields in
13540 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73   the record to s
13550 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20  atisfy the.  ** 
13560 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69  request.  In thi
13570 73 20 63 61 73 65 2c 20 73 65 74 20 74 68 65 20  s case, set the 
13580 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f  value NULL or to
13590 20 50 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a   P4 if P4 is.  *
135a0 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  * a pointer to a
135b0 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a   Mem object..  *
135c0 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b  /.  if( aOffset[
135d0 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72  p2] ){.    asser
135e0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
135f0 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63   );.    if( zRec
13600 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69   ){.      /* Thi
13610 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  s is the common 
13620 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20 77  case where the w
13630 68 6f 6c 65 20 72 6f 77 20 66 69 74 73 20 6f 6e  hole row fits on
13640 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20 2a   a single page *
13650 2f 0a 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52  /.      VdbeMemR
13660 65 6c 65 61 73 65 28 70 44 65 73 74 29 3b 0a 20  elease(pDest);. 
13670 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
13680 53 65 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29  SerialGet((u8 *)
13690 26 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32  &zRec[aOffset[p2
136a0 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70  ]], aType[p2], p
136b0 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
136c0 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20  {.      /* This 
136d0 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f  branch happens o
136e0 6e 6c 79 20 77 68 65 6e 20 74 68 65 20 72 6f 77  nly when the row
136f0 20 6f 76 65 72 66 6c 6f 77 73 20 6f 6e 74 6f 20   overflows onto 
13700 6d 75 6c 74 69 70 6c 65 20 70 61 67 65 73 20 2a  multiple pages *
13710 2f 0a 20 20 20 20 20 20 74 20 3d 20 61 54 79 70  /.      t = aTyp
13720 65 5b 70 32 5d 3b 0a 20 20 20 20 20 20 69 66 28  e[p2];.      if(
13730 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46   (pOp->p5 & (OPF
13740 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50  LAG_LENGTHARG|OP
13750 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29  FLAG_TYPEOFARG))
13760 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 28  !=0.       && ((
13770 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d  t>=12 && (t&1)==
13780 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26  0) || (pOp->p5 &
13790 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
137a0 47 29 21 3d 30 29 0a 20 20 20 20 20 20 29 7b 0a  G)!=0).      ){.
137b0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
137c0 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74  nt is irrelevant
137d0 20 66 6f 72 20 74 68 65 20 74 79 70 65 6f 66 28   for the typeof(
137e0 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 66  ) function and f
137f0 6f 72 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  or.        ** th
13800 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63  e length(X) func
13810 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62  tion if X is a b
13820 6c 6f 62 2e 20 20 53 6f 20 77 65 20 6d 69 67 68  lob.  So we migh
13830 74 20 61 73 20 77 65 6c 6c 20 75 73 65 0a 20 20  t as well use.  
13840 20 20 20 20 20 20 2a 2a 20 62 6f 67 75 73 20 63        ** bogus c
13850 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74 68  ontent rather th
13860 61 6e 20 72 65 61 64 69 6e 67 20 63 6f 6e 74 65  an reading conte
13870 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e  nt from disk.  N
13880 55 4c 4c 20 77 6f 72 6b 73 0a 20 20 20 20 20 20  ULL works.      
13890 20 20 2a 2a 20 66 6f 72 20 74 65 78 74 20 61 6e    ** for text an
138a0 64 20 62 6c 6f 62 20 61 6e 64 20 77 68 61 74 65  d blob and whate
138b0 76 65 72 20 69 73 20 69 6e 20 74 68 65 20 70 61  ver is in the pa
138c0 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61 72 69  yloadSize64 vari
138d0 61 62 6c 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  able.        ** 
138e0 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76  will work for ev
138f0 65 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 2a  erything else. *
13900 2f 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  /.        zData 
13910 3d 20 74 3c 31 32 20 3f 20 28 63 68 61 72 2a 29  = t<12 ? (char*)
13920 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a  &payloadSize64 :
13930 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
13940 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 73  .        len = s
13950 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
13960 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20  TypeLen(t);.    
13970 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
13980 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44  emMove(&sMem, pD
13990 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 72 63  est);.        rc
139a0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
139b0 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
139c0 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c  , aOffset[p2], l
139d0 65 6e 2c 20 20 70 43 2d 3e 69 73 49 6e 64 65 78  en,  pC->isIndex
139e0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a00 20 20 20 20 20 20 20 26 73 4d 65 6d 29 3b 0a 20         &sMem);. 
13a10 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
13a20 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
13a30 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
13a40 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20  lumn_out;.      
13a50 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 44 61 74    }.        zDat
13a60 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  a = sMem.z;.    
13a70 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
13a80 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
13a90 75 38 2a 29 7a 44 61 74 61 2c 20 74 2c 20 70 44  u8*)zData, t, pD
13aa0 65 73 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  est);.    }.    
13ab0 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
13ac0 6f 64 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a  oding;.  }else{.
13ad0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74      if( pOp->p4t
13ae0 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20  ype==P4_MEM ){. 
13af0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
13b00 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
13b10 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d  Dest, pOp->p4.pM
13b20 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  em, MEM_Static);
13b30 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
13b40 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
13b50 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  (pDest, MEM_Null
13b60 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  );.    }.  }..  
13b70 2f 2a 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63  /* If we dynamic
13b80 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
13b90 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
13ba0 20 64 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20   data (in the.  
13bb0 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
13bc0 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c  mFromBtree() cal
13bd0 6c 20 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72  l above) then tr
13be0 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f  ansfer control o
13bf0 66 20 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61  f that.  ** dyna
13c00 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
13c10 64 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20  d space over to 
13c20 74 68 65 20 70 44 65 73 74 20 73 74 72 75 63 74  the pDest struct
13c30 75 72 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70  ure..  ** This p
13c40 72 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79  revents a memory
13c50 20 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66   copy..  */.  if
13c60 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29  ( sMem.zMalloc )
13c70 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 4d  {.    assert( sM
13c80 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c  em.z==sMem.zMall
13c90 6f 63 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  oc );.    assert
13ca0 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73  ( !(pDest->flags
13cb0 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
13cc0 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65     assert( !(pDe
13cd0 73 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  st->flags & (MEM
13ce0 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20  _Blob|MEM_Str)) 
13cf0 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65  || pDest->z==sMe
13d00 6d 2e 7a 20 29 3b 0a 20 20 20 20 70 44 65 73 74  m.z );.    pDest
13d10 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
13d20 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69  _Ephem|MEM_Stati
13d30 63 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66  c);.    pDest->f
13d40 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d  lags |= MEM_Term
13d50 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d  ;.    pDest->z =
13d60 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65   sMem.z;.    pDe
13d70 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d  st->zMalloc = sM
13d80 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a  em.zMalloc;.  }.
13d90 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
13da0 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61  dbeMemMakeWritea
13db0 62 6c 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f  ble(pDest);..op_
13dc0 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50  column_out:.  UP
13dd0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
13de0 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49  E(pDest);.  REGI
13df0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
13e00 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72  p3, pDest);.  br
13e10 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13e20 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50  e: Affinity P1 P
13e30 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 * P4 *.**.** A
13e40 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20  pply affinities 
13e50 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32  to a range of P2
13e60 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
13e70 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a  ing with P1..**.
13e80 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e  ** P4 is a strin
13e90 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61  g that is P2 cha
13ea0 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68  racters long. Th
13eb0 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20  e nth character 
13ec0 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
13ed0 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
13ee0 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
13ef0 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
13f00 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a  ed for the nth.*
13f10 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  * memory cell in
13f20 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63   the range..*/.c
13f30 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a  ase OP_Affinity:
13f40 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
13f50 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  *zAffinity;   /*
13f60 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
13f70 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
13f80 20 63 68 61 72 20 63 41 66 66 3b 20 20 20 20 20   char cAff;     
13f90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73            /* A s
13fa0 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20  ingle character 
13fb0 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a  of affinity */..
13fc0 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f    zAffinity = pO
13fd0 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72  p->p4.z;.  asser
13fe0 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20  t( zAffinity!=0 
13ff0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  );.  assert( zAf
14000 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d  finity[pOp->p2]=
14010 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
14020 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
14030 20 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20   while( (cAff = 
14040 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21  *(zAffinity++))!
14050 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
14060 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d  ( pIn1 <= &p->aM
14070 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20  em[p->nMem] );. 
14080 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
14090 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
140a0 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49     ExpandBlob(pI
140b0 6e 31 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66  n1);.    applyAf
140c0 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41 66  finity(pIn1, cAf
140d0 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  f, encoding);.  
140e0 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20    pIn1++;.  }.  
140f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
14100 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20  ode: MakeRecord 
14110 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
14120 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72  .** Convert P2 r
14130 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
14140 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20  ng with P1 into 
14150 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d  the [record form
14160 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20  at].** use as a 
14170 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61  data record in a
14180 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
14190 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69  or as a key.** i
141a0 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65  n an index.  The
141b0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
141c0 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65  e can decode the
141d0 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a   record later..*
141e0 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
141f0 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
14200 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
14210 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61  ng.  The nth cha
14220 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
14230 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
14240 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
14250 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
14260 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
14270 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f  e nth.** field o
14280 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  f the index key.
14290 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69  .**.** The mappi
142a0 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65  ng from characte
142b0 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73  r to affinity is
142c0 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51   given by the SQ
142d0 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63  LITE_AFF_.** mac
142e0 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73  ros defined in s
142f0 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a  qliteInt.h..**.*
14300 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20  * If P4 is NULL 
14310 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66  then all index f
14320 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61  ields have the a
14330 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f  ffinity NONE..*/
14340 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63  .case OP_MakeRec
14350 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65  ord: {.  u8 *zNe
14360 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20  wRecord;        
14370 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68  /* A buffer to h
14380 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72  old the data for
14390 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   the new record 
143a0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20  */.  Mem *pRec; 
143b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
143c0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
143d0 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20  .  u64 nData;   
143e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
143f0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
14400 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
14410 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20  int nHdr;       
14420 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14430 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
14440 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  der space */.  i
14450 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  64 nByte;       
14460 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70        /* Data sp
14470 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
14480 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a   this record */.
14490 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20    int nZero;    
144a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
144b0 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
144c0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
144d0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
144e0 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20  nt nVarint;     
144f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14500 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61  of bytes in a va
14510 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65  rint */.  u32 se
14520 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20  rial_type;      
14530 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a   /* Type field *
14540 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b  /.  Mem *pData0;
14550 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
14560 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20  rst field to be 
14570 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68  combined into th
14580 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  e record */.  Me
14590 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20  m *pLast;       
145a0 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65       /* Last fie
145b0 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ld of the record
145c0 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
145d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
145e0 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
145f0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
14600 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  /.  char *zAffin
14610 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  ity;       /* Th
14620 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e  e affinity strin
14630 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  g for the record
14640 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66   */.  int file_f
14650 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20  ormat;       /* 
14660 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75  File format to u
14670 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20  se for encoding 
14680 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
14690 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
146a0 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
146b0 77 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a 20 20 69  wRecord[] */.  i
146c0 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  nt len;         
146d0 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
146e0 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20  of a field */.. 
146f0 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65   /* Assuming the
14700 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
14710 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72   N fields, the r
14720 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f  ecord format loo
14730 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69  ks.  ** like thi
14740 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d  s:.  **.  ** ---
14750 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14760 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14770 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14780 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14790 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72  -----.  ** | hdr
147a0 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c  -size | type 0 |
147b0 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20   type 1 | ... | 
147c0 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30  type N-1 | data0
147d0 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d   | ... | data N-
147e0 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d  1 | .  ** ------
147f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14800 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14810 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14820 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14830 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74  --.  **.  ** Dat
14840 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72  a(0) is taken fr
14850 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  om register P1. 
14860 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66   Data(1) comes f
14870 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b  rom register P1+
14880 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72  1.  ** and so fr
14890 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45  oth..  **.  ** E
148a0 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69  ach type field i
148b0 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65  s a varint repre
148c0 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69  senting the seri
148d0 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a  al type of the .
148e0 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69    ** correspondi
148f0 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20  ng data element 
14900 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65  (see sqlite3Vdbe
14910 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54  SerialType()). T
14920 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65  he.  ** hdr-size
14930 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61   field is also a
14940 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
14950 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d   the offset from
14960 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20   the beginning. 
14970 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
14980 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f  d to data0..  */
14990 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20  .  nData = 0;   
149a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
149b0 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
149c0 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72   space */.  nHdr
149d0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
149e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
149f0 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
14a00 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30  e */.  nZero = 0
14a10 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
14a20 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
14a30 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
14a40 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
14a50 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31  nField = pOp->p1
14a60 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ;.  zAffinity = 
14a70 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
14a80 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26  ert( nField>0 &&
14a90 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
14aa0 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d  p->p2+nField<=p-
14ab0 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 44 61  >nMem+1 );.  pDa
14ac0 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65  ta0 = &aMem[nFie
14ad0 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20  ld];.  nField = 
14ae0 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74  pOp->p2;.  pLast
14af0 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c   = &pData0[nFiel
14b00 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72  d-1];.  file_for
14b10 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74  mat = p->minWrit
14b20 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20  eFileFormat;..  
14b30 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65 20  /* Identify the 
14b40 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
14b50 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
14b60 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20  ->p3<pOp->p1 || 
14b70 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31  pOp->p3>=pOp->p1
14b80 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f  +pOp->p2 );.  pO
14b90 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
14ba0 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
14bb0 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
14bc0 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72  ;..  /* Loop thr
14bd0 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74  ough the element
14be0 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65  s that will make
14bf0 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74   up the record t
14c00 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75  o figure.  ** ou
14c10 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65  t how much space
14c20 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
14c30 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
14c40 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63  .  */.  for(pRec
14c50 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70  =pData0; pRec<=p
14c60 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20  Last; pRec++){. 
14c70 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
14c80 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20  Valid(pRec) );. 
14c90 20 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79     if( zAffinity
14ca0 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41   ){.      applyA
14cb0 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41  ffinity(pRec, zA
14cc0 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61  ffinity[pRec-pDa
14cd0 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ta0], encoding);
14ce0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
14cf0 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a  Rec->flags&MEM_Z
14d00 65 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30  ero && pRec->n>0
14d10 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
14d20 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
14d30 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a  ob(pRec);.    }.
14d40 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
14d50 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
14d60 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69  ialType(pRec, fi
14d70 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20  le_format);.    
14d80 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62  len = sqlite3Vdb
14d90 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73  eSerialTypeLen(s
14da0 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20  erial_type);.   
14db0 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20   nData += len;. 
14dc0 20 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74     nHdr += sqlit
14dd0 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69  e3VarintLen(seri
14de0 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66  al_type);.    if
14df0 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
14e00 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
14e10 20 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a    /* Only pure z
14e20 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73  ero-filled BLOBs
14e30 20 63 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f   can be input to
14e40 20 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20   this Opcode..  
14e50 20 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74      ** We do not
14e60 20 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74   allow blobs wit
14e70 68 20 61 20 70 72 65 66 69 78 20 61 6e 64 20 61  h a prefix and a
14e80 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69   zero-filled tai
14e90 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72  l. */.      nZer
14ea0 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
14eb0 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ro;.    }else if
14ec0 28 20 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e  ( len ){.      n
14ed0 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  Zero = 0;.    }.
14ee0 20 20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68    }..  /* Add th
14ef0 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72  e initial header
14f00 20 76 61 72 69 6e 74 20 61 6e 64 20 74 6f 74 61   varint and tota
14f10 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20  l the size */.  
14f20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20  nHdr += nVarint 
14f30 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
14f40 65 6e 28 6e 48 64 72 29 3b 0a 20 20 69 66 28 20  en(nHdr);.  if( 
14f50 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56  nVarint<sqlite3V
14f60 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29  arintLen(nHdr) )
14f70 7b 0a 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20  {.    nHdr++;.  
14f80 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72  }.  nByte = nHdr
14f90 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20  +nData-nZero;.  
14fa0 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
14fb0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
14fc0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
14fd0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
14fe0 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
14ff0 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  re the output re
15000 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75 66  gister has a buf
15010 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  fer large enough
15020 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20   to store .  ** 
15030 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20  the new record. 
15040 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  The output regis
15050 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73  ter (pOp->p3) is
15060 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a   not allowed to.
15070 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74    ** be one of t
15080 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
15090 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20  rs (because the 
150a0 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74  following call t
150b0 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  o.  ** sqlite3Vd
150c0 62 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c  beMemGrow() coul
150d0 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61  d clobber the va
150e0 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73  lue before it is
150f0 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69   used)..  */.  i
15100 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
15110 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74  mGrow(pOut, (int
15120 29 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20  )nByte, 0) ){.  
15130 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
15140 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20   }.  zNewRecord 
15150 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b  = (u8 *)pOut->z;
15160 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65  ..  /* Write the
15170 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d   record */.  i =
15180 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65   putVarint32(zNe
15190 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a  wRecord, nHdr);.
151a0 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61    for(pRec=pData
151b0 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20  0; pRec<=pLast; 
151c0 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72  pRec++){.    ser
151d0 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
151e0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
151f0 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
15200 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75  at);.    i += pu
15210 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52  tVarint32(&zNewR
15220 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c  ecord[i], serial
15230 5f 74 79 70 65 29 3b 20 20 20 20 20 20 2f 2a 20  _type);      /* 
15240 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20  serial type */. 
15250 20 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44   }.  for(pRec=pD
15260 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73  ata0; pRec<=pLas
15270 74 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20  t; pRec++){  /* 
15280 73 65 72 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20  serial data */. 
15290 20 20 20 69 20 2b 3d 20 73 71 6c 69 74 65 33 56     i += sqlite3V
152a0 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e  dbeSerialPut(&zN
152b0 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e  ewRecord[i], (in
152c0 74 29 28 6e 42 79 74 65 2d 69 29 2c 20 70 52 65  t)(nByte-i), pRe
152d0 63 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  c,file_format);.
152e0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69 3d    }.  assert( i=
152f0 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73  =nByte );..  ass
15300 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
15310 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
15320 65 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  em );.  pOut->n 
15330 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
15340 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
15350 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e  M_Blob | MEM_Dyn
15360 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d  ;.  pOut->xDel =
15370 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20   0;.  if( nZero 
15380 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e  ){.    pOut->u.n
15390 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20  Zero = nZero;.  
153a0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
153b0 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20   MEM_Zero;.  }. 
153c0 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
153d0 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
153e0 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
153f0 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64  s ever converted
15400 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45   to text */.  RE
15410 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
15420 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
15430 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
15440 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
15450 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15460 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a   Count P1 P2 * *
15470 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74   *.**.** Store t
15480 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  he number of ent
15490 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72  ries (an integer
154a0 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74   value) in the t
154b0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a  able or index .*
154c0 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  * opened by curs
154d0 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65  or P1 in registe
154e0 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  r P2.*/.#ifndef 
154f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
15500 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43  ECOUNT.case OP_C
15510 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
15520 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
15530 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74  se */.  i64 nEnt
15540 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  ry;.  BtCursor *
15550 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20  pCrsr;..  pCrsr 
15560 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
15570 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20  p1]->pCursor;.  
15580 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72  if( ALWAYS(pCrsr
15590 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
155a0 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28  lite3BtreeCount(
155b0 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b  pCrsr, &nEntry);
155c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45  .  }else{.    nE
155d0 6e 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ntry = 0;.  }.  
155e0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74  pOut->u.i = nEnt
155f0 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  ry;.  break;.}.#
15600 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
15610 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a  : Savepoint P1 *
15620 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70   * P4 *.**.** Op
15630 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72  en, release or r
15640 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65  ollback the save
15650 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70  point named by p
15660 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70  arameter P4, dep
15670 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65  ending.** on the
15680 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f   value of P1. To
15690 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65   open a new save
156a0 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f  point, P1==0. To
156b0 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
156c0 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67  ) an.** existing
156d0 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d   savepoint, P1==
156e0 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63  1, or to rollbac
156f0 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61  k an existing sa
15700 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a  vepoint P1==2..*
15710 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f  /.case OP_Savepo
15720 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b  int: {.  int p1;
15730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15740 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
15750 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20  e of P1 operand 
15760 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  */.  char *zName
15770 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15780 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
15790 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69  savepoint */.  i
157a0 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65  nt nName;.  Save
157b0 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53  point *pNew;.  S
157c0 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70  avepoint *pSavep
157d0 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e  oint;.  Savepoin
157e0 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69  t *pTmp;.  int i
157f0 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74  Savepoint;.  int
15800 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70   ii;..  p1 = pOp
15810 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20  ->p1;.  zName = 
15820 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a  pOp->p4.z;..  /*
15830 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
15840 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73   p1 parameter is
15850 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61   valid. Also tha
15860 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  t if there is no
15870 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73   open.  ** trans
15880 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  action, then the
15890 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79  re cannot be any
158a0 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20   savepoints. .  
158b0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  */.  assert( db-
158c0 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c  >pSavepoint==0 |
158d0 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  | db->autoCommit
158e0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
158f0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
15900 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EGIN||p1==SAVEPO
15910 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d  INT_RELEASE||p1=
15920 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
15930 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ACK );.  assert(
15940 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
15950 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  || db->isTransac
15960 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30  tionSavepoint==0
15970 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68   );.  assert( ch
15980 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
15990 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72  t(db) );.  asser
159a0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
159b0 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41  );..  if( p1==SA
159c0 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b  VEPOINT_BEGIN ){
159d0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64  .    if( db->nVd
159e0 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20  beWrite>0 ){.   
159f0 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65     /* A new save
15a00 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20  point cannot be 
15a10 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65  created if there
15a20 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
15a30 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74  e .      ** stat
15a40 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65  ements (i.e. ope
15a50 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63  n read/write inc
15a60 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61  remental blob ha
15a70 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f  ndles)..      */
15a80 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
15a90 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
15aa0 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
15ab0 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20   open savepoint 
15ac0 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
15ad0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
15ae0 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
15af0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
15b00 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
15b10 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69      nName = sqli
15b20 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d  te3Strlen30(zNam
15b30 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  e);..#ifndef SQL
15b40 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
15b50 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54  TABLE.      /* T
15b60 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65  his call is Ok e
15b70 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65  ven if this save
15b80 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c  point is actuall
15b90 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  y a transaction.
15ba0 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
15bb0 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72  nt (and therefor
15bc0 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f  e should not pro
15bd0 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29  mpt xSavepoint()
15be0 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20  ) callbacks..   
15bf0 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73     ** If this is
15c00 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73   a transaction s
15c10 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
15c20 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61  pened, it is gua
15c30 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a  ranteed.      **
15c40 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56   that the db->aV
15c50 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73  Trans[] array is
15c60 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20   empty.  */.    
15c70 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75    assert( db->au
15c80 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64  toCommit==0 || d
15c90 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b  b->nVTrans==0 );
15ca0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
15cb0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
15cc0 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42  (db, SAVEPOINT_B
15cd0 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20  EGIN,.          
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cf0 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
15d00 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f  ment+db->nSavepo
15d10 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  int);.      if( 
15d20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
15d30 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
15d40 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a  o_error;.#endif.
15d50 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65  .      /* Create
15d60 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
15d70 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20   structure. */. 
15d80 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69       pNew = sqli
15d90 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
15da0 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f  b, sizeof(Savepo
15db0 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20  int)+nName+1);. 
15dc0 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b       if( pNew ){
15dd0 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a  .        pNew->z
15de0 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26  Name = (char *)&
15df0 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20  pNew[1];.       
15e00 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e   memcpy(pNew->zN
15e10 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d  ame, zName, nNam
15e20 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20  e+1);.    .     
15e30 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
15e40 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61  s no open transa
15e50 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b  ction, then mark
15e60 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69   this as a speci
15e70 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74  al.        ** "t
15e80 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
15e90 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20  oint". */.      
15ea0 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f    if( db->autoCo
15eb0 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20  mmit ){.        
15ec0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
15ed0 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
15ee0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
15ef0 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a  nSavepoint = 1;.
15f00 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
15f10 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
15f20 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20  vepoint++;.     
15f30 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20     }.    .      
15f40 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65    /* Link the ne
15f50 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f  w savepoint into
15f60 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
15f70 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a  ndle's list. */.
15f80 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e          pNew->pN
15f90 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  ext = db->pSavep
15fa0 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
15fb0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
15fc0 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  New;.        pNe
15fd0 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  w->nDeferredCons
15fe0 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
15ff0 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e  Cons;.        pN
16000 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  ew->nDeferredImm
16010 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
16020 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
16030 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
16040 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69  se{.    iSavepoi
16050 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20  nt = 0;..    /* 
16060 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73  Find the named s
16070 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65  avepoint. If the
16080 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61  re is no such sa
16090 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e  vepoint, then an
160a0 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  .    ** an error
160b0 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
160c0 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20  the user.  */.  
160d0 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61    for(.      pSa
160e0 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53  vepoint = db->pS
160f0 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20  avepoint; .     
16100 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73   pSavepoint && s
16110 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53  qlite3StrICmp(pS
16120 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c  avepoint->zName,
16130 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70   zName);.      p
16140 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
16150 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20  epoint->pNext.  
16160 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65    ){.      iSave
16170 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20  point++;.    }. 
16180 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69     if( !pSavepoi
16190 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
161a0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
161b0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e  >zErrMsg, db, "n
161c0 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
161d0 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  : %s", zName);. 
161e0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
161f0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73  _ERROR;.    }els
16200 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57  e if( db->nVdbeW
16210 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41  rite>0 && p1==SA
16220 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
16230 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69  ){.      /* It i
16240 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
16250 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
16260 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69  t) a savepoint i
16270 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20  f there are .   
16280 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69     ** active wri
16290 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  te statements.. 
162a0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
162b0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
162c0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
162d0 0a 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74  .        "cannot
162e0 20 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69   release savepoi
162f0 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65  nt - SQL stateme
16300 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
16310 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
16320 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
16330 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20  ;.    }else{..  
16340 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65      /* Determine
16350 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
16360 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
16370 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e  ction savepoint.
16380 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a   If so,.      **
16390 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52   and this is a R
163a0 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20  ELEASE command, 
163b0 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  then the current
163c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20   transaction .  
163d0 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74      ** is commit
163e0 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20  ted. .      */. 
163f0 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73       int isTrans
16400 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f  action = pSavepo
16410 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26  int->pNext==0 &&
16420 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
16430 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  onSavepoint;.   
16440 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63     if( isTransac
16450 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45  tion && p1==SAVE
16460 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
16470 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63  .        if( (rc
16480 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
16490 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
164a0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
164b0 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
164c0 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
164d0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
164e0 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
164f0 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
16500 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c  VdbeHalt(p)==SQL
16510 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
16520 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
16530 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
16540 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
16550 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20            p->rc 
16560 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
16570 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  SY;.          go
16580 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
16590 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
165a0 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
165b0 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30  ionSavepoint = 0
165c0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70  ;.        rc = p
165d0 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ->rc;.      }els
165e0 65 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65  e{.        iSave
165f0 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  point = db->nSav
16600 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f  epoint - iSavepo
16610 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  int - 1;.       
16620 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
16630 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20  NT_ROLLBACK ){. 
16640 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d           for(ii=
16650 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
16660 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
16670 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 54 72    sqlite3BtreeTr
16680 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d  ipAllCursors(db-
16690 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 53 51  >aDb[ii].pBt, SQ
166a0 4c 49 54 45 5f 41 42 4f 52 54 29 3b 0a 20 20 20  LITE_ABORT);.   
166b0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
166c0 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69   }.        for(i
166d0 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
166e0 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
166f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
16700 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d  reeSavepoint(db-
16710 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31  >aDb[ii].pBt, p1
16720 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , iSavepoint);. 
16730 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
16740 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
16750 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
16760 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
16770 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
16780 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
16790 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
167a0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28  NT_ROLLBACK && (
167b0 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
167c0 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21  _InternChanges)!
167d0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
167e0 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
167f0 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
16800 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  db);.          s
16810 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
16820 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
16830 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  n(db);.         
16840 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62   db->flags = (db
16850 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45  ->flags | SQLITE
16860 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b  _InternChanges);
16870 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
16880 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52   }.  .      /* R
16890 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
168a0 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52  ther this is a R
168b0 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41  ELEASE or ROLLBA
168c0 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20  CK, destroy all 
168d0 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
168e0 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69  ints nested insi
168f0 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f  de of the savepo
16900 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
16910 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20  ed on. */.      
16920 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65  while( db->pSave
16930 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e  point!=pSavepoin
16940 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d  t ){.        pTm
16950 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  p = db->pSavepoi
16960 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
16970 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d  pSavepoint = pTm
16980 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  p->pNext;.      
16990 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
169a0 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20  db, pTmp);.     
169b0 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
169c0 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  t--;.      }..  
169d0 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20      /* If it is 
169e0 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20  a RELEASE, then 
169f0 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65  destroy the save
16a00 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
16a10 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a  ated on .      *
16a20 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20  * too. If it is 
16a30 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74  a ROLLBACK TO, t
16a40 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62  hen set the numb
16a50 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a  er of deferred .
16a60 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61        ** constra
16a70 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70  int violations p
16a80 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
16a90 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61  tabase to the va
16aa0 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20  lue stored.     
16ab0 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76   ** when the sav
16ac0 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74  epoint was creat
16ad0 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66  ed.  */.      if
16ae0 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
16af0 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
16b00 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65     assert( pSave
16b10 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65  point==db->pSave
16b20 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  point );.       
16b30 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
16b40 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
16b50 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
16b60 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
16b70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
16b80 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
16b90 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  action ){.      
16ba0 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
16bb0 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt--;.        }.
16bc0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16bd0 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
16be0 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  edCons = pSavepo
16bf0 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  int->nDeferredCo
16c00 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  ns;.        db->
16c10 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
16c20 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
16c30 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
16c40 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
16c50 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
16c60 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  on ){.        rc
16c70 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
16c80 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20  vepoint(db, p1, 
16c90 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
16ca0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
16cb0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
16cc0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
16cd0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
16ce0 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a    }..  break;.}.
16cf0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f  ./* Opcode: Auto
16d00 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a  Commit P1 P2 * *
16d10 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
16d20 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63   database auto-c
16d30 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31  ommit flag to P1
16d40 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32   (1 or 0). If P2
16d50 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a   is true, roll.*
16d60 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65  * back any curre
16d70 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65  ntly active btre
16d80 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  e transactions. 
16d90 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  If there are any
16da0 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28   active.** VMs (
16db0 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20  apart from this 
16dc0 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c  one), then a ROL
16dd0 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20  LBACK fails.  A 
16de0 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a  COMMIT fails if.
16df0 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63 74  ** there are act
16e00 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20  ive writing VMs 
16e10 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74 68  or active VMs th
16e20 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63 61  at use shared ca
16e30 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  che..**.** This 
16e40 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73  instruction caus
16e50 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c  es the VM to hal
16e60 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75  t..*/.case OP_Au
16e70 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e  toCommit: {.  in
16e80 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  t desiredAutoCom
16e90 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c  mit;.  int iRoll
16ea0 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e  back;.  int turn
16eb0 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64  OnAC;..  desired
16ec0 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70  AutoCommit = pOp
16ed0 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63  ->p1;.  iRollbac
16ee0 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74  k = pOp->p2;.  t
16ef0 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65  urnOnAC = desire
16f00 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21  dAutoCommit && !
16f10 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a  db->autoCommit;.
16f20 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
16f30 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
16f40 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  | desiredAutoCom
16f50 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  mit==0 );.  asse
16f60 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
16f70 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c  ommit==1 || iRol
16f80 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73  lback==0 );.  as
16f90 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41  sert( db->nVdbeA
16fa0 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41  ctive>0 );  /* A
16fb0 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65  t least this one
16fc0 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f   VM is active */
16fd0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
16fe0 73 52 65 61 64 65 72 20 29 3b 0a 0a 23 69 66 20  sReader );..#if 
16ff0 30 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  0.  if( turnOnAC
17000 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26   && iRollback &&
17010 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
17020 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  >1 ){.    /* If 
17030 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17040 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f   implements a RO
17050 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72  LLBACK and other
17060 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20   VMs are.    ** 
17070 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61  still running, a
17080 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  nd a transaction
17090 20 69 73 20 61 63 74 69 76 65 2c 20 72 65 74 75   is active, retu
170a0 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
170b0 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68  cating.    ** th
170c0 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
170d0 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
170e0 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20  irst. .    */.  
170f0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
17100 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
17110 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  db, "cannot roll
17120 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e  back transaction
17130 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
17140 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
17150 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
17160 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17170 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
17180 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20  .  if( turnOnAC 
17190 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26  && !iRollback &&
171a0 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
171b0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  0 ){.    /* If t
171c0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
171d0 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d  implements a COM
171e0 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  MIT and other VM
171f0 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20  s are writing.  
17200 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
17210 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
17220 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
17230 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
17240 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
17250 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
17260 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
17270 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f  , db, "cannot co
17280 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  mmit transaction
17290 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
172a0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
172b0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
172c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
172d0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65  ;.  }else if( de
172e0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21  siredAutoCommit!
172f0 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  =db->autoCommit 
17300 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c  ){.    if( iRoll
17310 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  back ){.      as
17320 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
17330 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20  oCommit==1 );.  
17340 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62      sqlite3Rollb
17350 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54  ackAll(db, SQLIT
17360 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
17370 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  );.      db->aut
17380 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
17390 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d   }else if( (rc =
173a0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
173b0 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
173c0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
173d0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
173e0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
173f0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
17400 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75   = (u8)desiredAu
17410 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20  toCommit;.      
17420 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
17430 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
17440 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70  USY ){.        p
17450 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
17460 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
17470 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72  t = (u8)(1-desir
17480 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20  edAutoCommit);. 
17490 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
174a0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
174b0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64  .        goto vd
174c0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
174d0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
174e0 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
174f0 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
17500 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
17510 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
17520 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
17530 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
17540 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
17550 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
17560 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
17570 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
17580 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
17590 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
175a0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
175b0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20  zErrMsg, db,.   
175c0 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
175d0 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
175e0 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
175f0 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
17600 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
17610 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
17620 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
17630 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
17640 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
17650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17660 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
17670 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
17680 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
17690 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
176a0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
176b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
176c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  ../* Opcode: Tra
176d0 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a  nsaction P1 P2 *
176e0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e   * *.**.** Begin
176f0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20   a transaction. 
17700 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   The transaction
17710 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d   ends when a Com
17720 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a  mit or Rollback.
17730 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63  ** opcode is enc
17740 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e  ountered.  Depen
17750 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43  ding on the ON C
17760 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c  ONFLICT setting,
17770 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74   the.** transact
17780 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62  ion might also b
17790 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66  e rolled back if
177a0 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63   an error is enc
177b0 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  ountered..**.** 
177c0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
177d0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
177e0 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68  file on which th
177f0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
17800 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e  .** started.  In
17810 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69  dex 0 is the mai
17820 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
17830 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74  and index 1 is t
17840 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20  he.** file used 
17850 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61  for temporary ta
17860 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f  bles.  Indices o
17870 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20  f 2 or more are 
17880 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61  used for.** atta
17890 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
178a0 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  **.** If P2 is n
178b0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  on-zero, then a 
178c0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
178d0 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41  n is started.  A
178e0 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69   RESERVED lock i
178f0 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e  s.** obtained on
17900 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
17910 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d  le when a write-
17920 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
17930 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f  tarted.  No.** o
17940 74 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e  ther process can
17950 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77   start another w
17960 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
17970 20 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e   while this tran
17980 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e  saction is.** un
17990 64 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e  derway.  Startin
179a0 67 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  g a write transa
179b0 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74  ction also creat
179c0 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  es a rollback jo
179d0 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74  urnal. A.** writ
179e0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  e transaction mu
179f0 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
17a00 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73  fore any changes
17a10 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20   can be made to 
17a20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  the.** database.
17a30 20 20 49 66 20 50 32 20 69 73 20 67 72 65 61 74    If P2 is great
17a40 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
17a50 20 74 6f 20 32 20 74 68 65 6e 20 61 6e 20 45 58   to 2 then an EX
17a60 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73 0a  CLUSIVE lock is.
17a70 2a 2a 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64  ** also obtained
17a80 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a   on the file..**
17a90 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74  .** If a write-t
17aa0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
17ab0 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56 64  arted and the Vd
17ac0 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  be.usesStmtJourn
17ad0 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72  al flag is.** tr
17ae0 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69 73  ue (this flag is
17af0 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62 65   set if the Vdbe
17b00 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65   may modify more
17b10 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e   than one row an
17b20 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61  d may.** throw a
17b30 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f  n ABORT exceptio
17b40 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20  n), a statement 
17b50 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
17b60 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a  also be opened..
17b70 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63  ** More specific
17b80 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e  ally, a statemen
17b90 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
17ba0 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65 20   opened iff the 
17bb0 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
17bc0 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e  ection is curren
17bd0 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63  tly not in autoc
17be0 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69  ommit mode, or i
17bf0 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65  f there are othe
17c00 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74  r.** active stat
17c10 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d  ements. A statem
17c20 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
17c30 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67  allows the chang
17c40 65 73 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a  es made by this.
17c50 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f  ** VDBE to be ro
17c60 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20  lled back after 
17c70 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74  an error without
17c80 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20   having to roll 
17c90 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69  back the.** enti
17ca0 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  re transaction. 
17cb0 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65  If no error is e
17cc0 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20  ncountered, the 
17cd0 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
17ce0 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75  ction.** will au
17cf0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d  tomatically comm
17d00 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45  it when the VDBE
17d10 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   halts..**.** If
17d20 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P2 is zero, the
17d30 6e 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73  n a read-lock is
17d40 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65   obtained on the
17d50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
17d60 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73  */.case OP_Trans
17d70 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65  action: {.  Btre
17d80 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72  e *pBt;..  asser
17d90 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
17da0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
17db0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70  readOnly==0 || p
17dc0 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61  Op->p2==0 );.  a
17dd0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
17de0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
17df0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
17e00 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
17e10 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
17e20 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
17e30 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26  .  if( pOp->p2 &
17e40 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  & (db->flags & S
17e50 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29  QLITE_QueryOnly)
17e60 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  !=0 ){.    rc = 
17e70 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b  SQLITE_READONLY;
17e80 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
17e90 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
17ea0 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  }.  pBt = db->aD
17eb0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
17ec0 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20  .  if( pBt ){.  
17ed0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
17ee0 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42  reeBeginTrans(pB
17ef0 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20  t, pOp->p2);.   
17f00 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
17f10 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d  BUSY ){.      p-
17f20 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
17f30 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
17f40 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
17f50 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
17f60 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
17f70 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
17f80 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
17f90 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17fa0 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70      }..    if( p
17fb0 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65  Op->p2 && p->use
17fc0 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20  sStmtJournal .  
17fd0 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43     && (db->autoC
17fe0 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
17ff0 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20  nVdbeRead>1) .  
18000 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72    ){.      asser
18010 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
18020 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b  sInTrans(pBt) );
18030 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53  .      if( p->iS
18040 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20  tatement==0 ){. 
18050 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64         assert( d
18060 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30  b->nStatement>=0
18070 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69   && db->nSavepoi
18080 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20  nt>=0 );.       
18090 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
180a0 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69  +; .        p->i
180b0 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e  Statement = db->
180c0 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
180d0 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20  >nStatement;.   
180e0 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d     }..      rc =
180f0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
18100 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
18110 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53  INT_BEGIN, p->iS
18120 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20  tatement-1);.   
18130 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
18140 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
18150 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18160 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20  eBeginStmt(pBt, 
18170 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a  p->iStatement);.
18180 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
18190 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72  * Store the curr
181a0 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ent value of the
181b0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
181c0 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
181d0 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63  raint.      ** c
181e0 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73  ounter. If the s
181f0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
18200 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
18210 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20   rolled back,.  
18220 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65      ** the value
18230 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72   of this counter
18240 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73   needs to be res
18250 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20  tored too.  */. 
18260 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
18270 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
18280 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
18290 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f  p->nStmtDefImmCo
182a0 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
182b0 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d  edImmCons;.    }
182c0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
182d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64  ./* Opcode: Read
182e0 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
182f0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63  * *.**.** Read c
18300 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20  ookie number P3 
18310 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31  from database P1
18320 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e   and write it in
18330 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
18340 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20  ** P3==1 is the 
18350 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20  schema version. 
18360 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61   P3==2 is the da
18370 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a  tabase format..*
18380 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72  * P3==3 is the r
18390 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
183a0 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64   cache size, and
183b0 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d   so forth.  P1==
183c0 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e  0 is.** the main
183d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
183e0 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
183f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
18400 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  ed to store.** t
18410 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
18420 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73  .**.** There mus
18430 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b  t be a read-lock
18440 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
18450 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73   (either a trans
18460 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62  action.** must b
18470 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65  e started or the
18480 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70  re must be an op
18490 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72  en cursor) befor
184a0 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74  e.** executing t
184b0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
184c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64  .*/.case OP_Read
184d0 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20  Cookie: {       
184e0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
184f0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
18500 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
18510 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f   iDb;.  int iCoo
18520 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  kie;..  assert( 
18530 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
18540 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
18550 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70  .  iCookie = pOp
18560 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
18570 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e  pOp->p3<SQLITE_N
18580 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
18590 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
185a0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
185b0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
185c0 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20  aDb[iDb].pBt!=0 
185d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
185e0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
185f0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29  yDbMask)1)<<iDb)
18600 29 21 3d 30 20 29 3b 0a 0a 20 20 73 71 6c 69 74  )!=0 );..  sqlit
18610 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64  e3BtreeGetMeta(d
18620 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
18630 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a   iCookie, (u32 *
18640 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74  )&iMeta);.  pOut
18650 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20  ->u.i = iMeta;. 
18660 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
18670 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20  code: SetCookie 
18680 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
18690 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e  ** Write the con
186a0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
186b0 20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64   P3 (interpreted
186c0 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a   as an integer).
186d0 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e  ** into cookie n
186e0 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61  umber P2 of data
186f0 62 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20  base P1.  P2==1 
18700 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
18710 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d  rsion.  .** P2==
18720 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
18730 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20  e format. P2==3 
18740 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
18750 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a  ed pager cache .
18760 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  ** size, and so 
18770 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
18780 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
18790 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
187a0 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74  1 is the .** dat
187b0 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
187c0 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61  to store tempora
187d0 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
187e0 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d   A transaction m
187f0 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
18800 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20  efore executing 
18810 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
18820 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69  case OP_SetCooki
18830 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  e: {       /* in
18840 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a  3 */.  Db *pDb;.
18850 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
18860 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  2<SQLITE_N_BTREE
18870 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
18880 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
18890 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
188a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
188b0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
188c0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
188d0 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61  ->p1))!=0 );.  a
188e0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
188f0 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ly==0 );.  pDb =
18900 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
18910 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
18920 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b->pBt!=0 );.  a
18930 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
18940 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
18950 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b  , pOp->p1, 0) );
18960 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
18970 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69  pOp->p3];.  sqli
18980 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
18990 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a  rify(pIn3);.  /*
189a0 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20   See note about 
189b0 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f  index shifting o
189c0 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20  n OP_ReadCookie 
189d0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
189e0 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61  3BtreeUpdateMeta
189f0 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e  (pDb->pBt, pOp->
18a00 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75  p2, (int)pIn3->u
18a10 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .i);.  if( pOp->
18a20 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41  p2==BTREE_SCHEMA
18a30 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20  _VERSION ){.    
18a40 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65  /* When the sche
18a50 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  ma cookie change
18a60 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65  s, record the ne
18a70 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61  w cookie interna
18a80 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  lly */.    pDb->
18a90 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
18aa0 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49  cookie = (int)pI
18ab0 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d  n3->u.i;.    db-
18ac0 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  >flags |= SQLITE
18ad0 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a  _InternChanges;.
18ae0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
18af0 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f  >p2==BTREE_FILE_
18b00 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a  FORMAT ){.    /*
18b10 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20   Record changes 
18b20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d  in the file form
18b30 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  at */.    pDb->p
18b40 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
18b50 6d 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e  mat = (u8)pIn3->
18b60 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  u.i;.  }.  if( p
18b70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20  Op->p1==1 ){.   
18b80 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
18b90 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ll prepared stat
18ba0 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20  ements whenever 
18bb0 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
18bc0 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20  e.    ** schema 
18bd0 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63  is changed.  Tic
18be0 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20  ket #1644 */.   
18bf0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
18c00 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
18c10 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  (db);.    p->exp
18c20 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
18c30 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18c40 6f 64 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69  ode: VerifyCooki
18c50 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
18c60 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
18c70 61 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64  alue of global d
18c80 61 74 61 62 61 73 65 20 70 61 72 61 6d 65 74 65  atabase paramete
18c90 72 20 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a  r number 0 (the.
18ca0 2a 2a 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  ** schema versio
18cb0 6e 29 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65  n) and make sure
18cc0 20 69 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20   it is equal to 
18cd0 50 32 20 61 6e 64 20 74 68 61 74 20 74 68 65 0a  P2 and that the.
18ce0 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ** generation co
18cf0 75 6e 74 65 72 20 6f 6e 20 74 68 65 20 6c 6f 63  unter on the loc
18d00 61 6c 20 73 63 68 65 6d 61 20 70 61 72 73 65 20  al schema parse 
18d10 65 71 75 61 6c 73 20 50 33 2e 0a 2a 2a 0a 2a 2a  equals P3..**.**
18d20 20 50 31 20 69 73 20 74 68 65 20 64 61 74 61 62   P1 is the datab
18d30 61 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68  ase number which
18d40 20 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61   is 0 for the ma
18d50 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
18d60 0a 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68  .** and 1 for th
18d70 65 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74  e file holding t
18d80 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20  emporary tables 
18d90 61 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20  and some higher 
18da0 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75  number.** for au
18db0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
18dc0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f  s..**.** The coo
18dd0 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20  kie changes its 
18de0 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74  value whenever t
18df0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
18e00 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54  ma changes..** T
18e10 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  his operation is
18e20 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20   used to detect 
18e30 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f  when that the co
18e40 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64  okie has changed
18e50 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65  .** and that the
18e60 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
18e70 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64   needs to reread
18e80 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a   the schema..**.
18e90 2a 2a 20 45 69 74 68 65 72 20 61 20 74 72 61 6e  ** Either a tran
18ea0 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  saction needs to
18eb0 20 68 61 76 65 20 62 65 65 6e 20 73 74 61 72 74   have been start
18ec0 65 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e  ed or an OP_Open
18ed0 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20   needs.** to be 
18ee0 65 78 65 63 75 74 65 64 20 28 74 6f 20 65 73 74  executed (to est
18ef0 61 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f  ablish a read lo
18f00 63 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73 20  ck) before this 
18f10 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76  opcode is.** inv
18f20 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  oked..*/.case OP
18f30 5f 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b  _VerifyCookie: {
18f40 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
18f50 69 6e 74 20 69 47 65 6e 3b 0a 20 20 42 74 72 65  int iGen;.  Btre
18f60 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72  e *pBt;..  asser
18f70 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
18f80 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
18f90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
18fa0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
18fb0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
18fc0 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61  ->p1))!=0 );.  a
18fd0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
18fe0 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
18ff0 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b  , pOp->p1, 0) );
19000 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
19010 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70 42 74  sReader );.  pBt
19020 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
19030 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20 70  p1].pBt;.  if( p
19040 42 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  Bt ){.    sqlite
19050 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42  3BtreeGetMeta(pB
19060 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  t, BTREE_SCHEMA_
19070 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29  VERSION, (u32 *)
19080 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65  &iMeta);.    iGe
19090 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  n = db->aDb[pOp-
190a0 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47  >p1].pSchema->iG
190b0 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c  eneration;.  }el
190c0 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69  se{.    iGen = i
190d0 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Meta = 0;.  }.  
190e0 69 66 28 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e  if( iMeta!=pOp->
190f0 70 32 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d  p2 || iGen!=pOp-
19100 3e 70 33 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p3 ){.    sqlit
19110 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
19120 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d  zErrMsg);.    p-
19130 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74  >zErrMsg = sqlit
19140 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22  e3DbStrDup(db, "
19150 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
19160 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20  has changed");. 
19170 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68     /* If the sch
19180 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20  ema-cookie from 
19190 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
191a0 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f  e matches the co
191b0 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f  okie .    ** sto
191c0 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d  red with the in-
191d0 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74  memory represent
191e0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68  ation of the sch
191f0 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e  ema, do.    ** n
19200 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63  ot reload the sc
19210 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61  hema from the da
19220 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20  tabase file..   
19230 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69   **.    ** If vi
19240 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65  rtual-tables are
19250 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73   in use, this is
19260 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74   not just an opt
19270 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a  imization..    *
19280 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65  * Often, v-table
19290 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61  s store their da
192a0 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69  ta in other SQLi
192b0 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68  te tables, which
192c0 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72  .    ** are quer
192d0 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ied from within 
192e0 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65  xNext() and othe
192f0 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64  r v-table method
19300 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70  s using.    ** p
19310 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e  repared queries.
19320 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79   If such a query
19330 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c   is out-of-date,
19340 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20   we do not want 
19350 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72  to.    ** discar
19360 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  d the database s
19370 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73  chema, as the us
19380 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e  er code implemen
19390 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20  ting the.    ** 
193a0 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61  v-table would ha
193b0 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66  ve to be ready f
193c0 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  or the sqlite3_v
193d0 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74  tab structure it
193e0 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62  self.    ** to b
193f0 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68  e invalidated wh
19400 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73  enever sqlite3_s
19410 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20  tep() is called 
19420 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20  from within .   
19430 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65   ** a v-table me
19440 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  thod..    */.   
19450 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70   if( db->aDb[pOp
19460 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  ->p1].pSchema->s
19470 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d  chema_cookie!=iM
19480 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  eta ){.      sql
19490 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
194a0 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ma(db, pOp->p1);
194b0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 65  .    }..    p->e
194c0 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20  xpired = 1;.    
194d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45  rc = SQLITE_SCHE
194e0 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  MA;.  }.  break;
194f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
19500 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33  penRead P1 P2 P3
19510 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65   P4 P5.**.** Ope
19520 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75  n a read-only cu
19530 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74  rsor for the dat
19540 61 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73  abase table whos
19550 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a  e root page is.*
19560 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61  * P2 in a databa
19570 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61  se file.  The da
19580 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64  tabase file is d
19590 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e  etermined by P3.
195a0 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73   .** P3==0 means
195b0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
195c0 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20  se, P3==1 means 
195d0 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
195e0 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72  d for .** tempor
195f0 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20  ary tables, and 
19600 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20  P3>1 means used 
19610 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
19620 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61  g attached.** da
19630 74 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68  tabase.  Give th
19640 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20  e new cursor an 
19650 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31  identifier of P1
19660 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c  .  The P1.** val
19670 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20  ues need not be 
19680 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61  contiguous but a
19690 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f  ll P1 values sho
196a0 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74  uld be small int
196b0 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20  egers..** It is 
196c0 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20  an error for P1 
196d0 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a  to be negative..
196e0 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74  **.** If P5!=0 t
196f0 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74  hen use the cont
19700 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
19710 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70  P2 as the root p
19720 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20  age, not.** the 
19730 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65  value of P2 itse
19740 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  lf..**.** There 
19750 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c  will be a read l
19760 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
19770 61 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  ase whenever the
19780 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e  re is an.** open
19790 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65   cursor.  If the
197a0 20 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e   database was un
197b0 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20  locked prior to 
197c0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
197d0 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20  .** then a read 
197e0 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
197f0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
19800 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41   instruction.  A
19810 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c   read.** lock al
19820 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65  lows other proce
19830 73 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65  sses to read the
19840 20 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72   database but pr
19850 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f  ohibits.** any o
19860 74 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f  ther process fro
19870 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20  m modifying the 
19880 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72  database.  The r
19890 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72  ead lock is.** r
198a0 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c  eleased when all
198b0 20 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f   cursors are clo
198c0 73 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e  sed.  If this in
198d0 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70  struction attemp
198e0 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72  ts.** to get a r
198f0 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69  ead lock but fai
19900 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74  ls, the script t
19910 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61  erminates with a
19920 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  n.** SQLITE_BUSY
19930 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a   error code..**.
19940 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
19950 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
19960 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
19970 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
19980 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
19990 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
199a0 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
199b0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
199c0 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72   KeyInfo .** str
199d0 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69  ucture, then sai
199e0 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69  d structure defi
199f0 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  nes the content 
19a00 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a  and collating .*
19a10 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  * sequence of th
19a20 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70  e index being op
19a30 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ened. Otherwise,
19a40 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
19a50 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
19a60 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  it is set to the
19a70 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
19a80 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
19a90 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
19aa0 4f 70 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a  OpenWrite..*/./*
19ab0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69   Opcode: OpenWri
19ac0 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
19ad0 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  5.**.** Open a r
19ae0 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
19af0 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65   named P1 on the
19b00 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
19b10 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61  whose root.** pa
19b20 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66  ge is P2.  Or if
19b30 20 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63   P5!=0 use the c
19b40 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
19b50 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68  er P2 to find th
19b60 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a  e.** root page..
19b70 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
19b80 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
19b90 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
19ba0 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
19bb0 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
19bc0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
19bd0 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
19be0 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
19bf0 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
19c00 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
19c10 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
19c20 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
19c30 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
19c40 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
19c50 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
19c60 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
19c70 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
19c80 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
19c90 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
19ca0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
19cb0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
19cc0 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a  le, or to the.**
19cd0 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f   largest index o
19ce0 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20  f any column of 
19cf0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
19d00 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e  s actually used.
19d10 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
19d20 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75  ruction works ju
19d30 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64  st like OpenRead
19d40 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
19d50 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72  opens the cursor
19d60 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74  .** in read/writ
19d70 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67  e mode.  For a g
19d80 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72  iven table, ther
19d90 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20  e can be one or 
19da0 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a  more read-only.*
19db0 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73  * cursors or a s
19dc0 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65  ingle read/write
19dd0 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20   cursor but not 
19de0 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  both..**.** See 
19df0 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a  also OpenRead..*
19e00 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  /.case OP_OpenRe
19e10 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
19e20 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  Write: {.  int n
19e30 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f  Field;.  KeyInfo
19e40 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
19e50 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b  t p2;.  int iDb;
19e60 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20  .  int wrFlag;. 
19e70 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64   Btree *pX;.  Vd
19e80 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
19e90 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73    Db *pDb;..  as
19ea0 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 26 28  sert( (pOp->p5&(
19eb0 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 7c 4f  OPFLAG_P2ISREG|O
19ec0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29 3d  PFLAG_BULKCSR))=
19ed0 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61 73  =pOp->p5 );.  as
19ee0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
19ef0 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
19f00 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  || pOp->p5==0 );
19f10 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
19f20 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73  sReader );.  ass
19f30 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
19f40 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c  ==OP_OpenRead ||
19f50 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
19f60 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70  );..  if( p->exp
19f70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d  ired ){.    rc =
19f80 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20   SQLITE_ABORT;. 
19f90 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
19fa0 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70   nField = 0;.  p
19fb0 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70  KeyInfo = 0;.  p
19fc0 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69  2 = pOp->p2;.  i
19fd0 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
19fe0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
19ff0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
1a000 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
1a010 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
1a020 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21  bMask)1)<<iDb))!
1a030 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
1a040 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70  b->aDb[iDb];.  p
1a050 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  X = pDb->pBt;.  
1a060 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b  assert( pX!=0 );
1a070 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1a080 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65  de==OP_OpenWrite
1a090 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d   ){.    wrFlag =
1a0a0 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   1;.    assert( 
1a0b0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
1a0c0 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20  exHeld(db, iDb, 
1a0d0 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44  0) );.    if( pD
1a0e0 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1a0f0 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e  _format < p->min
1a100 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1a110 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57  ){.      p->minW
1a120 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d  riteFileFormat =
1a130 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1a140 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20  ile_format;.    
1a150 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77  }.  }else{.    w
1a160 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20  rFlag = 0;.  }. 
1a170 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
1a180 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b  PFLAG_P2ISREG ){
1a190 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
1a1a0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
1a1b0 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a   p2<=p->nMem );.
1a1c0 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d      pIn2 = &aMem
1a1d0 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  [p2];.    assert
1a1e0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
1a1f0 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  2) );.    assert
1a200 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
1a210 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
1a220 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
1a230 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
1a240 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e  2);.    p2 = (in
1a250 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn2->u.i;.   
1a260 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65   /* The p2 value
1a270 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72   always comes fr
1a280 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72  om a prior OP_Cr
1a290 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
1a2a0 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74   and.    ** that
1a2b0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
1a2c0 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76  ays set the p2 v
1a2d0 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72  alue to 2 or mor
1a2e0 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a  e or else fail..
1a2f0 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20      ** If there 
1a300 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20  were a failure, 
1a310 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
1a320 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76  tement would hav
1a330 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20  e halted.    ** 
1a340 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20  before reaching 
1a350 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1a360 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56  . */.    if( NEV
1a370 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20  ER(p2<2) ) {.   
1a380 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
1a390 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
1a3a0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1a3b0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1a3c0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  }.  }.  if( pOp-
1a3d0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1a3e0 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49  NFO ){.    pKeyI
1a3f0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1a400 65 79 49 6e 66 6f 3b 0a 20 20 20 20 70 4b 65 79  eyInfo;.    pKey
1a410 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28  Info->enc = ENC(
1a420 70 2d 3e 64 62 29 3b 0a 20 20 20 20 6e 46 69 65  p->db);.    nFie
1a430 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
1a440 46 69 65 6c 64 2b 31 3b 0a 20 20 7d 65 6c 73 65  Field+1;.  }else
1a450 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
1a460 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20  ==P4_INT32 ){.  
1a470 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
1a480 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65  p4.i;.  }.  asse
1a490 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1a4a0 3b 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  ;.  pCur = alloc
1a4b0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1a4c0 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44  ->p1, nField, iD
1a4d0 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75  b, 1);.  if( pCu
1a4e0 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  r==0 ) goto no_m
1a4f0 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  em;.  pCur->null
1a500 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  Row = 1;.  pCur-
1a510 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a  >isOrdered = 1;.
1a520 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1a530 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
1a540 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
1a550 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f  fo, pCur->pCurso
1a560 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
1a570 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
1a580 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
1a590 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45  G_BULKCSR==BTREE
1a5a0 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 73  _BULKLOAD );.  s
1a5b0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1a5c0 72 48 69 6e 74 73 28 70 43 75 72 2d 3e 70 43 75  rHints(pCur->pCu
1a5d0 72 73 6f 72 2c 20 28 70 4f 70 2d 3e 70 35 20 26  rsor, (pOp->p5 &
1a5e0 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29   OPFLAG_BULKCSR)
1a5f0 29 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69  );..  /* Since i
1a600 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65  t performs no me
1a610 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1a620 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20  or IO, the only 
1a630 76 61 6c 75 65 20 74 68 61 74 0a 20 20 2a 2a 20  value that.  ** 
1a640 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1a650 6f 72 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20  or() may return 
1a660 69 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 2a 2f  is SQLITE_OK. */
1a670 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
1a680 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f  QLITE_OK );..  /
1a690 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75  * Set the VdbeCu
1a6a0 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 61 6e 64  rsor.isTable and
1a6b0 20 69 73 49 6e 64 65 78 20 76 61 72 69 61 62 6c   isIndex variabl
1a6c0 65 73 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72  es. Previous ver
1a6d0 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51  sions of.  ** SQ
1a6e0 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68 65  Lite used to che
1a6f0 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70  ck if the root-p
1a700 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20 73  age flags were s
1a710 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e  ane at this poin
1a720 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72  t.  ** and repor
1a730 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  t database corru
1a740 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65  ption if they we
1a750 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73  re not, but this
1a760 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20   check has.  ** 
1a770 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f  since moved into
1a780 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72   the btree layer
1a790 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e  .  */  .  pCur->
1a7a0 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70  isTable = pOp->p
1a7b0 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46  4type!=P4_KEYINF
1a7c0 4f 3b 0a 20 20 70 43 75 72 2d 3e 69 73 49 6e 64  O;.  pCur->isInd
1a7d0 65 78 20 3d 20 21 70 43 75 72 2d 3e 69 73 54 61  ex = !pCur->isTa
1a7e0 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ble;.  break;.}.
1a7f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1a800 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20  Ephemeral P1 P2 
1a810 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70  * P4 P5.**.** Op
1a820 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1a830 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e  P1 to a transien
1a840 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  t table..** The 
1a850 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73  cursor is always
1a860 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69   opened read/wri
1a870 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74  te even if .** t
1a880 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1a890 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20   is read-only.  
1a8a0 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a  The ephemeral.**
1a8b0 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65   table is delete
1a8c0 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
1a8d0 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  when the cursor 
1a8e0 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a  is closed..**.**
1a8f0 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
1a900 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1a910 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61  the ephemeral ta
1a920 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
1a930 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42  or points to a B
1a940 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34  Tree table if P4
1a950 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72  ==0 and to a BTr
1a960 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50  ee index.** if P
1a970 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20  4 is not 0.  If 
1a980 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
1a990 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b  it points to a K
1a9a0 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
1a9b0 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73  .** that defines
1a9c0 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b   the format of k
1a9d0 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  eys in the index
1a9e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1a9f0 6f 64 65 20 77 61 73 20 6f 6e 63 65 20 63 61 6c  ode was once cal
1aa00 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42  led OpenTemp.  B
1aa10 75 74 20 74 68 61 74 20 63 72 65 61 74 65 64 0a  ut that created.
1aa20 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63  ** confusion bec
1aa30 61 75 73 65 20 74 68 65 20 74 65 72 6d 20 22 74  ause the term "t
1aa40 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69 67 68  emp table", migh
1aa50 74 20 72 65 66 65 72 20 65 69 74 68 65 72 0a 2a  t refer either.*
1aa60 2a 20 74 6f 20 61 20 54 45 4d 50 20 74 61 62 6c  * to a TEMP tabl
1aa70 65 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  e at the SQL lev
1aa80 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61 62 6c  el, or to a tabl
1aa90 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74  e opened by.** t
1aaa0 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  his opcode.  The
1aab0 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 61  n this opcode wa
1aac0 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75  s call OpenVirtu
1aad0 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  al.  But.** that
1aae0 20 63 72 65 61 74 65 64 20 63 6f 6e 66 75 73 69   created confusi
1aaf0 6f 6e 20 77 69 74 68 20 74 68 65 20 77 68 6f 6c  on with the whol
1ab00 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
1ab10 69 64 65 61 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  idea..**.** The 
1ab20 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e  P5 parameter can
1ab30 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68   be a mask of th
1ab40 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20  e BTREE_* flags 
1ab50 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74  defined.** in bt
1ab60 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c  ree.h.  These fl
1ab70 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65  ags control aspe
1ab80 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61  cts of the opera
1ab90 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62  tion of.** the b
1aba0 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45 45  tree.  The BTREE
1abb0 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e  _OMIT_JOURNAL an
1abc0 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66  d BTREE_SINGLE f
1abd0 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65  lags are.** adde
1abe0 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
1abf0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1ac00 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20  penAutoindex P1 
1ac10 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
1ac20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1ac30 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50  s the same as OP
1ac40 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20  _OpenEphemeral. 
1ac50 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66   It has a.** dif
1ac60 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64  ferent name to d
1ac70 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75  istinguish its u
1ac80 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61  se.  Tables crea
1ac90 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20  ted using.** by 
1aca0 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
1acb0 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74   be used for aut
1acc0 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
1acd0 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20  ed transient.** 
1ace0 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73  indices in joins
1acf0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1ad00 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73  nAutoindex: .cas
1ad10 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
1ad20 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  al: {.  VdbeCurs
1ad30 6f 72 20 2a 70 43 78 3b 0a 20 20 73 74 61 74 69  or *pCx;.  stati
1ad40 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46  c const int vfsF
1ad50 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51  lags = .      SQ
1ad60 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52  LITE_OPEN_READWR
1ad70 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ITE |.      SQLI
1ad80 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c  TE_OPEN_CREATE |
1ad90 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1ada0 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20  EN_EXCLUSIVE |. 
1adb0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1adc0 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c  _DELETEONCLOSE |
1add0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1ade0 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b  EN_TRANSIENT_DB;
1adf0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1ae00 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p1>=0 );.  pCx 
1ae10 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1ae20 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1ae30 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20  ->p2, -1, 1);.  
1ae40 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1ae50 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1ae60 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1ae70 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ae80 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20  eOpen(db->pVfs, 
1ae90 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74  0, db, &pCx->pBt
1aea0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
1aeb0 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45             BTREE
1aec0 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20  _OMIT_JOURNAL | 
1aed0 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70  BTREE_SINGLE | p
1aee0 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73  Op->p5, vfsFlags
1aef0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
1af00 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
1af10 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1af20 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70  eginTrans(pCx->p
1af30 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66  Bt, 1);.  }.  if
1af40 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1af50 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74  ){.    /* If a t
1af60 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
1af70 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
1af80 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
1af90 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  .    ** sqlite3B
1afa0 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1afb0 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  ) with the BTREE
1afc0 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65  _BLOBKEY flag be
1afd0 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
1afe0 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
1aff0 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
1b000 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
1b010 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
1b020 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1b030 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
1b040 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42  oot-page 1 (an B
1b050 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65  LOB_INTKEY table
1b060 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
1b070 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  ( pOp->p4.pKeyIn
1b080 66 6f 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  fo ){.      int 
1b090 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
1b0a0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1b0b0 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1b0c0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b0d0 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1b0e0 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e  e(pCx->pBt, &pgn
1b0f0 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  o, BTREE_BLOBKEY
1b100 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20   | pOp->p5); .  
1b110 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1b120 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1b130 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d   assert( pgno==M
1b140 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a  ASTER_ROOT+1 );.
1b150 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1b160 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1b170 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20  pCx->pBt, pgno, 
1b180 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  1, .            
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1a0 20 20 20 20 28 4b 65 79 49 6e 66 6f 2a 29 70 4f      (KeyInfo*)pO
1b1b0 70 2d 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e 70 43  p->p4.z, pCx->pC
1b1c0 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  ursor);.        
1b1d0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1b1e0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1b1f0 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70  ;.        pCx->p
1b200 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45  KeyInfo->enc = E
1b210 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20  NC(p->db);.     
1b220 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73   }.      pCx->is
1b230 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d  Table = 0;.    }
1b240 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
1b250 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1b260 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41  sor(pCx->pBt, MA
1b270 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c  STER_ROOT, 1, 0,
1b280 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a   pCx->pCursor);.
1b290 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62        pCx->isTab
1b2a0 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  le = 1;.    }.  
1b2b0 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72  }.  pCx->isOrder
1b2c0 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42  ed = (pOp->p5!=B
1b2d0 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b  TREE_UNORDERED);
1b2e0 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20  .  pCx->isIndex 
1b2f0 3d 20 21 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b  = !pCx->isTable;
1b300 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1b310 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70  Opcode: SorterOp
1b320 65 6e 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  en P1 P2 * P4 *.
1b330 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1b340 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f  e works like OP_
1b350 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78  OpenEphemeral ex
1b360 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65  cept that it ope
1b370 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e  ns.** a transien
1b380 74 20 69 6e 64 65 78 20 74 68 61 74 20 69 73 20  t index that is 
1b390 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73  specifically des
1b3a0 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61  igned to sort la
1b3b0 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73  rge.** tables us
1b3c0 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20  ing an external 
1b3d0 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72  merge-sort algor
1b3e0 69 74 68 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ithm..*/.case OP
1b3f0 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20  _SorterOpen: {. 
1b400 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1b410 3b 0a 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  ;..  pCx = alloc
1b420 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1b430 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
1b440 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 1);.  if( pCx
1b450 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1b460 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e  m;.  pCx->pKeyIn
1b470 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1b480 79 49 6e 66 6f 3b 0a 20 20 70 43 78 2d 3e 70 4b  yInfo;.  pCx->pK
1b490 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e  eyInfo->enc = EN
1b4a0 43 28 70 2d 3e 64 62 29 3b 0a 20 20 70 43 78 2d  C(p->db);.  pCx-
1b4b0 3e 69 73 53 6f 72 74 65 72 20 3d 20 31 3b 0a 20  >isSorter = 1;. 
1b4c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
1b4d0 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20  eSorterInit(db, 
1b4e0 70 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pCx);.  break;.}
1b4f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1b500 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33  nPseudo P1 P2 P3
1b510 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e   * P5.**.** Open
1b520 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68   a new cursor th
1b530 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  at points to a f
1b540 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  ake table that c
1b550 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
1b560 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e  .** row of data.
1b570 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66    The content of
1b580 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 6e   that one row in
1b590 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1b5a0 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74  memory.** regist
1b5b0 65 72 20 50 32 20 77 68 65 6e 20 50 35 3d 3d 30  er P2 when P5==0
1b5c0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1b5d0 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65 63  s, cursor P1 bec
1b5e0 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  omes an alias fo
1b5f0 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c  r the .** MEM_Bl
1b600 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61  ob content conta
1b610 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ined in register
1b620 20 50 32 2e 20 20 57 68 65 6e 20 50 35 3d 3d 31   P2.  When P5==1
1b630 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 72 6f  , then the.** ro
1b640 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  w is represented
1b650 20 62 79 20 50 33 20 63 6f 6e 73 65 63 75 74 69   by P3 consecuti
1b660 76 65 20 72 65 67 69 73 74 65 72 73 20 62 65 67  ve registers beg
1b670 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 32 2e 0a  inning with P2..
1b680 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74  **.** A pseudo-t
1b690 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
1b6a0 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  this opcode is u
1b6b0 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69  sed to hold a si
1b6c0 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70  ngle.** row outp
1b6d0 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74  ut from the sort
1b6e0 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72  er so that the r
1b6f0 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70  ow can be decomp
1b700 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64  osed into.** ind
1b710 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20  ividual columns 
1b720 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c  using the OP_Col
1b730 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  umn opcode.  The
1b740 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1b750 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79  e.** is the only
1b760 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74   cursor opcode t
1b770 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61  hat works with a
1b780 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1b790 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e  *.** P3 is the n
1b7a0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
1b7b0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74  in the records t
1b7c0 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  hat will be stor
1b7d0 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65  ed by.** the pse
1b7e0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
1b7f0 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f  se OP_OpenPseudo
1b800 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1b810 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1b820 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1b830 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1b840 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1b850 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20  1, pOp->p3, -1, 
1b860 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  0);.  if( pCx==0
1b870 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1b880 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
1b890 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64   1;.  pCx->pseud
1b8a0 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d  oTableReg = pOp-
1b8b0 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61  >p2;.  pCx->isTa
1b8c0 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  ble = 1;.  pCx->
1b8d0 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20 20 70  isIndex = 0;.  p
1b8e0 43 78 2d 3e 6d 75 6c 74 69 50 73 65 75 64 6f 20  Cx->multiPseudo 
1b8f0 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 62 72 65  = pOp->p5;.  bre
1b900 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1b910 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a  : Close P1 * * *
1b920 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61   *.**.** Close a
1b930 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73   cursor previous
1b940 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e  ly opened as P1.
1b950 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a    If P1 is not.*
1b960 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  * currently open
1b970 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  , this instructi
1b980 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  on is a no-op..*
1b990 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a  /.case OP_Close:
1b9a0 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
1b9b0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1b9c0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1b9d0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  .  sqlite3VdbeFr
1b9e0 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1b9f0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  pCsr[pOp->p1]);.
1ba00 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
1ba10 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  p1] = 0;.  break
1ba20 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1ba30 53 65 65 6b 47 65 20 50 31 20 50 32 20 50 33 20  SeekGe P1 P2 P3 
1ba40 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
1ba50 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1ba60 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1ba70 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1ba80 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1ba90 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1baa0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1bab0 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66   as the key.  If
1bac0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1bad0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1bae0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1baf0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1bb00 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1bb10 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1bb20 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1bb30 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1bb40 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1bb50 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1bb60 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1bb70 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1bb80 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1bb90 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1bba0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1bbb0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1bbc0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1bbd0 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72  ords .** greater
1bbe0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1bbf0 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1bc00 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1bc10 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1bc20 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1bc30 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1bc40 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74  Distinct, SeekLt
1bc50 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65  , SeekGt, SeekLe
1bc60 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1bc70 65 65 6b 47 74 20 50 31 20 50 32 20 50 33 20 50  eekGt P1 P2 P3 P
1bc80 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  4 *.**.** If cur
1bc90 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1bca0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1bcb0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1bcc0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1bcd0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1bce0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1bcf0 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1bd00 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1bd10 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1bd20 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1bd30 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1bd40 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1bd50 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1bd60 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1bd70 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1bd80 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1bd90 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1bda0 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1bdb0 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
1bdc0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1bdd0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
1bde0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1bdf0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1be00 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61  ords greater tha
1be10 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
1be20 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1be30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1be40 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1be50 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1be60 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1be70 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekLt, SeekGe, Se
1be80 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1be90 65 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20  e: SeekLt P1 P2 
1bea0 50 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49  P3 P4 * .**.** I
1beb0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1bec0 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1bed0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1bee0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1bef0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1bf00 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1bf10 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1bf20 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1bf30 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1bf40 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1bf50 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1bf60 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1bf70 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1bf80 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1bf90 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1bfa0 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1bfb0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1bfc0 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1bfd0 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1bfe0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1bff0 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  * is less than t
1c000 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1c010 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1c020 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20  cords less than 
1c030 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
1c040 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1c050 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1c060 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1c070 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1c080 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
1c090 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
1c0a0 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1c0b0 20 53 65 65 6b 4c 65 20 50 31 20 50 32 20 50 33   SeekLe P1 P2 P3
1c0c0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63   P4 *.**.** If c
1c0d0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1c0e0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1c0f0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1c100 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1c110 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1c120 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1c130 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1c140 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1c150 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1c160 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1c170 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1c180 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1c190 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1c1a0 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1c1b0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1c1c0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1c1d0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1c1e0 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1c1f0 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
1c200 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1c210 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1c220 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
1c230 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1c240 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
1c250 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  * less than or e
1c260 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1c270 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1c280 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1c290 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
1c2a0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1c2b0 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
1c2c0 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1c2d0 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f  SeekLt.*/.case O
1c2e0 50 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20 20  P_SeekLt:       
1c2f0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1c300 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65  /.case OP_SeekLe
1c310 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1c320 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1c330 50 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20 20  P_SeekGe:       
1c340 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1c350 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 74  /.case OP_SeekGt
1c360 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
1c370 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
1c380 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20  res;.  int oc;. 
1c390 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1c3a0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1c3b0 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c  d r;.  int nFiel
1c3c0 64 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20  d;.  i64 iKey;  
1c3d0 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64      /* The rowid
1c3e0 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20   we are to seek 
1c3f0 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  to */..  assert(
1c400 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1c410 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1c420 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1c430 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70  Op->p2!=0 );.  p
1c440 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1c450 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1c460 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1c470 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
1c480 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
1c490 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 65  ssert( OP_SeekLe
1c4a0 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 31 20   == OP_SeekLt+1 
1c4b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1c4c0 53 65 65 6b 47 65 20 3d 3d 20 4f 50 5f 53 65 65  SeekGe == OP_See
1c4d0 6b 4c 74 2b 32 20 29 3b 0a 20 20 61 73 73 65 72  kLt+2 );.  asser
1c4e0 74 28 20 4f 50 5f 53 65 65 6b 47 74 20 3d 3d 20  t( OP_SeekGt == 
1c4f0 4f 50 5f 53 65 65 6b 4c 74 2b 33 20 29 3b 0a 20  OP_SeekLt+3 );. 
1c500 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f   assert( pC->isO
1c510 72 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28 20  rdered );.  if( 
1c520 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73  ALWAYS(pC->pCurs
1c530 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 6f 63  or!=0) ){.    oc
1c540 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
1c550 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
1c560 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  = 0;.    if( pC-
1c570 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
1c580 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76    /* The input v
1c590 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74  alue in P3 might
1c5a0 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a   be of any type:
1c5b0 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20   integer, real, 
1c5c0 73 74 72 69 6e 67 2c 0a 20 20 20 20 20 20 2a 2a  string,.      **
1c5d0 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20   blob, or NULL. 
1c5e0 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f   But it needs to
1c5f0 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62   be an integer b
1c600 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a  efore we can do.
1c610 20 20 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65        ** the see
1c620 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e  k, so covert it.
1c630 20 2a 2f 0a 20 20 20 20 20 20 70 49 6e 33 20 3d   */.      pIn3 =
1c640 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1c650 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  .      applyNume
1c660 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33  ricAffinity(pIn3
1c670 29 3b 0a 20 20 20 20 20 20 69 4b 65 79 20 3d 20  );.      iKey = 
1c680 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
1c690 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20 20 20 20  lue(pIn3);.     
1c6a0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1c6b0 64 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a  d = 0;..      /*
1c6c0 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
1c6d0 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f   could not be co
1c6e0 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
1c6f0 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a  integer without.
1c700 20 20 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66        ** loss of
1c710 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
1c720 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65  en special proce
1c730 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65  ssing is require
1c740 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66  d... */.      if
1c750 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1c760 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
1c770 20 20 20 20 20 20 20 20 69 66 28 20 28 70 49 6e          if( (pIn
1c780 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
1c790 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
1c7a0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50       /* If the P
1c7b0 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62  3 value cannot b
1c7c0 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1c7d0 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e   any kind of a n
1c7e0 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 20  umber,.         
1c7f0 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65   ** then the see
1c800 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  k is not possibl
1c810 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32  e, so jump to P2
1c820 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 70 63   */.          pc
1c830 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1c840 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1c850 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1c860 20 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63     /* If we reac
1c870 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68  h this point, th
1c880 65 6e 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  en the P3 value 
1c890 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69  must be a floati
1c8a0 6e 67 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 6f  ng.        ** po
1c8b0 69 6e 74 20 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20  int number. */. 
1c8c0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
1c8d0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1c8e0 4d 5f 52 65 61 6c 29 21 3d 30 20 29 3b 0a 0a 20  M_Real)!=0 );.. 
1c8f0 20 20 20 20 20 20 20 69 66 28 20 69 4b 65 79 3d         if( iKey=
1c900 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20  =SMALLEST_INT64 
1c910 26 26 20 28 70 49 6e 33 2d 3e 72 3c 28 64 6f 75  && (pIn3->r<(dou
1c920 62 6c 65 29 69 4b 65 79 20 7c 7c 20 70 49 6e 33  ble)iKey || pIn3
1c930 2d 3e 72 3e 30 29 20 29 7b 0a 20 20 20 20 20 20  ->r>0) ){.      
1c940 20 20 20 20 2f 2a 20 54 68 65 20 50 33 20 76 61      /* The P3 va
1c950 6c 75 65 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  lue is too large
1c960 20 69 6e 20 6d 61 67 6e 69 74 75 64 65 20 74 6f   in magnitude to
1c970 20 62 65 20 65 78 70 72 65 73 73 65 64 20 61 73   be expressed as
1c980 20 61 6e 0a 20 20 20 20 20 20 20 20 20 20 2a 2a   an.          **
1c990 20 69 6e 74 65 67 65 72 2e 20 2a 2f 0a 20 20 20   integer. */.   
1c9a0 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a         res = 1;.
1c9b0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
1c9c0 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20 20 20 20 20  n3->r<0 ){.     
1c9d0 20 20 20 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f         if( oc>=O
1c9e0 50 5f 53 65 65 6b 47 65 20 29 7b 20 20 61 73 73  P_SeekGe ){  ass
1c9f0 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1ca00 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Ge || oc==OP_See
1ca10 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20  kGt );.         
1ca20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1ca30 33 42 74 72 65 65 46 69 72 73 74 28 70 43 2d 3e  3BtreeFirst(pC->
1ca40 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ca60 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1ca70 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1ca80 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1ca90 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1caa0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1cab0 20 20 20 20 20 20 69 66 28 20 6f 63 3c 3d 4f 50        if( oc<=OP
1cac0 5f 53 65 65 6b 4c 65 20 29 7b 20 20 61 73 73 65  _SeekLe ){  asse
1cad0 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
1cae0 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
1caf0 4c 65 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Le );.          
1cb00 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1cb10 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43  BtreeLast(pC->pC
1cb20 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1cb30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
1cb40 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1cb50 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1cb60 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1cb70 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1cb80 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
1cb90 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20   res ){.        
1cba0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1cbb0 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   - 1;.          
1cbc0 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  }.          brea
1cbd0 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  k;.        }else
1cbe0 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
1cbf0 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Lt || oc==OP_See
1cc00 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  kGe ){.         
1cc10 20 2f 2a 20 55 73 65 20 74 68 65 20 63 65 69 6c   /* Use the ceil
1cc20 69 6e 67 28 29 20 66 75 6e 63 74 69 6f 6e 20 74  ing() function t
1cc30 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e  o convert real->
1cc40 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  int */.         
1cc50 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3e 20 28   if( pIn3->r > (
1cc60 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b  double)iKey ) iK
1cc70 65 79 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65  ey++;.        }e
1cc80 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  lse{.          /
1cc90 2a 20 55 73 65 20 74 68 65 20 66 6c 6f 6f 72 28  * Use the floor(
1cca0 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f  ) function to co
1ccb0 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20  nvert real->int 
1ccc0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  */.          ass
1ccd0 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1cce0 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Le || oc==OP_See
1ccf0 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20  kGt );.         
1cd00 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3c 20 28   if( pIn3->r < (
1cd10 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b  double)iKey ) iK
1cd20 65 79 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ey--;.        }.
1cd30 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20 20 72        } .      r
1cd40 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1cd50 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1cd60 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  C->pCursor, 0, (
1cd70 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65  u64)iKey, 0, &re
1cd80 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
1cd90 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1cda0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1cdb0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1cdc0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
1cdd0 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
1cde0 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1cdf0 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  alid = 1;.      
1ce00 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20    pC->lastRowid 
1ce10 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 7d 0a  = iKey;.      }.
1ce20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1ce30 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
1ce40 34 2e 69 3b 0a 20 20 20 20 20 20 61 73 73 65 72  4.i;.      asser
1ce50 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
1ce60 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20  P4_INT32 );.    
1ce70 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
1ce80 3e 30 20 29 3b 0a 20 20 20 20 20 20 72 2e 70 4b  >0 );.      r.pK
1ce90 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
1cea0 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e  yInfo;.      r.n
1ceb0 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69  Field = (u16)nFi
1cec0 65 6c 64 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 54  eld;..      /* T
1ced0 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20  he next line of 
1cee0 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73  code computes as
1cef0 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66   follows, only f
1cf00 61 73 74 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20  aster:.      ** 
1cf10 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
1cf20 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGt || oc==OP_Se
1cf30 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20 2a 2a  ekLe ){.      **
1cf40 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
1cf50 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 3b  NPACKED_INCRKEY;
1cf60 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73  .      **   }els
1cf70 65 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  e{.      **     
1cf80 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20  r.flags = 0;.   
1cf90 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 20 20     **   }.      
1cfa0 2a 2f 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  */.      r.flags
1cfb0 20 3d 20 28 75 38 29 28 55 4e 50 41 43 4b 45 44   = (u8)(UNPACKED
1cfc0 5f 49 4e 43 52 4b 45 59 20 2a 20 28 31 20 26 20  _INCRKEY * (1 & 
1cfd0 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 74 29  (oc - OP_SeekLt)
1cfe0 29 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ));.      assert
1cff0 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 74 20  ( oc!=OP_SeekGt 
1d000 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41  || r.flags==UNPA
1d010 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a  CKED_INCRKEY );.
1d020 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63        assert( oc
1d030 21 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 72  !=OP_SeekLe || r
1d040 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44  .flags==UNPACKED
1d050 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20 20  _INCRKEY );.    
1d060 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1d070 5f 53 65 65 6b 47 65 20 7c 7c 20 72 2e 66 6c 61  _SeekGe || r.fla
1d080 67 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  gs==0 );.      a
1d090 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1d0a0 65 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d  ekLt || r.flags=
1d0b0 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 72 2e 61  =0 );..      r.a
1d0c0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
1d0d0 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
1d0e0 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20 20  ITE_DEBUG.      
1d0f0 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
1d100 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
1d110 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
1d120 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
1d130 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
1d140 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72      ExpandBlob(r
1d150 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 20 20 72 63  .aMem);.      rc
1d160 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1d170 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1d180 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30  ->pCursor, &r, 0
1d190 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1d1a0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1d1b0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
1d1c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1d1d0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1d1e0 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1d1f0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1d200 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  }.    pC->deferr
1d210 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1d220 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1d230 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1d240 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1d250 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  EST.    sqlite3_
1d260 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
1d270 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 6f  #endif.    if( o
1d280 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20  c>=OP_SeekGe ){ 
1d290 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1d2a0 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGe || oc==OP
1d2b0 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20  _SeekGt );.     
1d2c0 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72   if( res<0 || (r
1d2d0 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
1d2e0 53 65 65 6b 47 74 29 20 29 7b 0a 20 20 20 20 20  SeekGt) ){.     
1d2f0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1d300 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43 75  treeNext(pC->pCu
1d310 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1d320 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1d330 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1d340 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1d350 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f  ;.        pC->ro
1d360 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1d370 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1d380 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1d390 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
1d3a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1d3b0 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20  c==OP_SeekLt || 
1d3c0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b  oc==OP_SeekLe );
1d3d0 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3e 30  .      if( res>0
1d3e0 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
1d3f0 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29 20 29 7b  c==OP_SeekLt) ){
1d400 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1d410 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
1d420 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  us(pC->pCursor, 
1d430 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69  &res);.        i
1d440 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1d450 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1d460 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1d470 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1d480 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20  alid = 0;.      
1d490 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
1d4a0 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e  * res might be n
1d4b0 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20  egative because 
1d4c0 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70  the table is emp
1d4d0 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20  ty.  Check to.  
1d4e0 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20        ** see if 
1d4f0 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65  this is the case
1d500 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
1d510 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74       res = sqlit
1d520 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70  e3BtreeEof(pC->p
1d530 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1d540 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
1d550 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
1d560 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1d570 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1d580 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  2 - 1;.    }.  }
1d590 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69  else{.    /* Thi
1d5a0 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61  s happens when a
1d5b0 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65  ttempting to ope
1d5c0 6e 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6d 61  n the sqlite3_ma
1d5d0 73 74 65 72 20 74 61 62 6c 65 0a 20 20 20 20 2a  ster table.    *
1d5e0 2a 20 66 6f 72 20 72 65 61 64 20 61 63 63 65 73  * for read acces
1d5f0 73 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  s returns SQLITE
1d600 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68 69 73 20  _EMPTY. In this 
1d610 63 61 73 65 20 61 6c 77 61 79 73 0a 20 20 20 20  case always.    
1d620 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  ** take the jump
1d630 20 28 73 69 6e 63 65 20 74 68 65 72 65 20 61 72   (since there ar
1d640 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 69 6e 20  e no records in 
1d650 74 68 65 20 74 61 62 6c 65 29 2e 0a 20 20 20 20  the table)..    
1d660 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  */.    pc = pOp-
1d670 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
1d680 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1d690 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32 20 2a  de: Seek P1 P2 *
1d6a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73   * *.**.** P1 is
1d6b0 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63   an open table c
1d6c0 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20  ursor and P2 is 
1d6d0 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e  a rowid integer.
1d6e0 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72    Arrange.** for
1d6f0 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74   P1 to move so t
1d700 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1d710 20 74 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e   the rowid given
1d720 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P2..**.** Th
1d730 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  is is actually a
1d740 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20   deferred seek. 
1d750 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c   Nothing actuall
1d760 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a  y happens until.
1d770 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  ** the cursor is
1d780 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20   used to read a 
1d790 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61  record.  That wa
1d7a0 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a  y, if no reads.*
1d7b0 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65  * occur, no unne
1d7c0 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70  cessary I/O happ
1d7d0 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ens..*/.case OP_
1d7e0 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e  Seek: {    /* in
1d7f0 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
1d800 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
1d810 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1d820 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1d830 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1d840 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1d850 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1d860 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
1d870 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20  pC->pCursor!=0) 
1d880 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1d890 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1d8a0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1d8b0 30 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61  0;.    pIn2 = &a
1d8c0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
1d8d0 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
1d8e0 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  et = sqlite3Vdbe
1d8f0 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
1d900 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1d910 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43  alid = 0;.    pC
1d920 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1d930 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
1d940 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f  k;.}.  ../* Opco
1d950 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20  de: Found P1 P2 
1d960 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
1d970 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
1d980 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
1d990 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1d9a0 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
1d9b0 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
1d9c0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
1d9d0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
1d9e0 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
1d9f0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
1da00 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a  ** record..**.**
1da10 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1da20 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1da30 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1da40 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1da50 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20   and P4.** is a 
1da60 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
1da70 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
1da80 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
1da90 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73   P2 and.** P1 is
1daa0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1dab0 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65  t the matching e
1dac0 6e 74 72 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  ntry..*/./* Opco
1dad0 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20  de: NotFound P1 
1dae0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1daf0 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1db00 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1db10 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1db20 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1db30 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1db40 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1db50 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1db60 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1db70 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1db80 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1db90 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
1dba0 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
1dbb0 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
1dbc0 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
1dbd0 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
1dbe0 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78  s not the prefix
1dbf0 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
1dc00 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
1dc10 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20  is made to P2.  
1dc20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63  If P1 .** does c
1dc30 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20  ontain an entry 
1dc40 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74  whose prefix mat
1dc50 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72  ches the P3/P4 r
1dc60 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72  ecord then contr
1dc70 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f  ol.** falls thro
1dc80 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
1dc90 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20  instruction and 
1dca0 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
1dcb0 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61  ing at the.** ma
1dcc0 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
1dcd0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1dce0 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
1dcf0 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65  IsUnique.*/.case
1dd00 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20   OP_NotFound:   
1dd10 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1dd20 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e   */.case OP_Foun
1dd30 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
1dd40 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
1dd50 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  t alreadyExists;
1dd60 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1dd70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
1dd80 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55  char *pFree;.  U
1dd90 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
1dda0 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b  IdxKey;.  Unpack
1ddb0 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68  edRecord r;.  ch
1ddc0 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e  ar aTempRec[ROUN
1ddd0 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b  D8(sizeof(Unpack
1dde0 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a  edRecord)) + siz
1ddf0 65 6f 66 28 4d 65 6d 29 2a 33 20 2b 20 37 5d 3b  eof(Mem)*3 + 7];
1de00 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1de10 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 66  TEST.  sqlite3_f
1de20 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  ound_count++;.#e
1de30 6e 64 69 66 0a 0a 20 20 61 6c 72 65 61 64 79 45  ndif..  alreadyE
1de40 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 61 73 73  xists = 0;.  ass
1de50 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1de60 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1de70 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1de80 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
1de90 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43  P4_INT32 );.  pC
1dea0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1deb0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1dec0 70 43 21 3d 30 20 29 3b 0a 20 20 70 49 6e 33 20  pC!=0 );.  pIn3 
1ded0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1dee0 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
1def0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29  C->pCursor!=0) )
1df00 7b 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  {..    assert( p
1df10 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
1df20 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
1df30 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 20 72 2e  .i>0 ){.      r.
1df40 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1df50 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72  KeyInfo;.      r
1df60 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
1df70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20  Op->p4.i;.      
1df80 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23  r.aMem = pIn3;.#
1df90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1dfa0 55 47 0a 20 20 20 20 20 20 7b 20 69 6e 74 20 69  UG.      { int i
1dfb0 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
1dfc0 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
1dfd0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
1dfe0 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
1dff0 23 65 6e 64 69 66 0a 20 20 20 20 20 20 72 2e 66  #endif.      r.f
1e000 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
1e010 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
1e020 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72      pIdxKey = &r
1e030 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1e040 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c     pIdxKey = sql
1e050 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70  ite3VdbeAllocUnp
1e060 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20 20 20  ackedRecord(.   
1e070 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49         pC->pKeyI
1e080 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73  nfo, aTempRec, s
1e090 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c  izeof(aTempRec),
1e0a0 20 26 70 46 72 65 65 0a 20 20 20 20 20 20 29 3b   &pFree.      );
1e0b0 20 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 78   .      if( pIdx
1e0c0 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Key==0 ) goto no
1e0d0 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 61 73 73 65  _mem;.      asse
1e0e0 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
1e0f0 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
1e100 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
1e110 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  3->flags & MEM_Z
1e120 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a  ero)==0 );  /* z
1e130 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79  eroblobs already
1e140 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20   expanded */.   
1e150 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
1e160 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
1e170 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
1e180 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b  , pIn3->z, pIdxK
1e190 65 79 29 3b 0a 20 20 20 20 20 20 70 49 64 78 4b  ey);.      pIdxK
1e1a0 65 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50  ey->flags |= UNP
1e1b0 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54  ACKED_PREFIX_MAT
1e1c0 43 48 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63  CH;.    }.    rc
1e1d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1e1e0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1e1f0 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b  ->pCursor, pIdxK
1e200 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  ey, 0, 0, &res);
1e210 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
1e220 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  .i==0 ){.      s
1e230 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
1e240 20 70 46 72 65 65 29 3b 0a 20 20 20 20 7d 0a 20   pFree);.    }. 
1e250 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1e260 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 72  E_OK ){.      br
1e270 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  eak;.    }.    a
1e280 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
1e290 72 65 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d  res==0);.    pC-
1e2a0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1e2b0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
1e2c0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1e2d0 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66  _STALE;.  }.  if
1e2e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1e2f0 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69  P_Found ){.    i
1e300 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  f( alreadyExists
1e310 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20   ) pc = pOp->p2 
1e320 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
1e330 20 20 69 66 28 20 21 61 6c 72 65 61 64 79 45 78    if( !alreadyEx
1e340 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d  ists ) pc = pOp-
1e350 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
1e360 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1e370 64 65 3a 20 49 73 55 6e 69 71 75 65 20 50 31 20  de: IsUnique P1 
1e380 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1e390 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 70   Cursor P1 is op
1e3a0 65 6e 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  en on an index b
1e3b0 2d 74 72 65 65 20 2d 20 74 68 61 74 20 69 73 20  -tree - that is 
1e3c0 74 6f 20 73 61 79 2c 20 61 20 62 74 72 65 65 20  to say, a btree 
1e3d0 77 68 69 63 68 0a 2a 2a 20 6e 6f 20 64 61 74 61  which.** no data
1e3e0 20 61 6e 64 20 77 68 65 72 65 20 74 68 65 20 6b   and where the k
1e3f0 65 79 20 61 72 65 20 72 65 63 6f 72 64 73 20 67  ey are records g
1e400 65 6e 65 72 61 74 65 64 20 62 79 20 4f 50 5f 4d  enerated by OP_M
1e410 61 6b 65 52 65 63 6f 72 64 20 77 69 74 68 0a 2a  akeRecord with.*
1e420 2a 20 74 68 65 20 6c 69 73 74 20 66 69 65 6c 64  * the list field
1e430 20 62 65 69 6e 67 20 74 68 65 20 69 6e 74 65 67   being the integ
1e440 65 72 20 52 4f 57 49 44 20 6f 66 20 74 68 65 20  er ROWID of the 
1e450 65 6e 74 72 79 20 74 68 61 74 20 74 68 65 20 69  entry that the i
1e460 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20 72 65  ndex.** entry re
1e470 66 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54  fers to..**.** T
1e480 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 63  he P3 register c
1e490 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e 74 65 67  ontains an integ
1e4a0 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
1e4b0 2e 20 43 61 6c 6c 20 74 68 69 73 20 72 65 63 6f  . Call this reco
1e4c0 72 64 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e  rd .** number R.
1e4d0 20 52 65 67 69 73 74 65 72 20 50 34 20 69 73 20   Register P4 is 
1e4e0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 20 73  the first in a s
1e4f0 65 74 20 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f  et of N contiguo
1e500 75 73 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  us registers.** 
1e510 74 68 61 74 20 6d 61 6b 65 20 75 70 20 61 6e 20  that make up an 
1e520 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1e530 65 79 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  ey that can be u
1e540 73 65 64 20 77 69 74 68 20 63 75 72 73 6f 72 20  sed with cursor 
1e550 50 31 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  P1..** The value
1e560 20 6f 66 20 4e 20 63 61 6e 20 62 65 20 69 6e 66   of N can be inf
1e570 65 72 72 65 64 20 66 72 6f 6d 20 74 68 65 20 63  erred from the c
1e580 75 72 73 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65  ursor. N include
1e590 73 20 74 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76  s the rowid.** v
1e5a0 61 6c 75 65 20 61 70 70 65 6e 64 65 64 20 74 6f  alue appended to
1e5b0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
1e5c0 69 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 54 68  index record. Th
1e5d0 69 73 20 72 6f 77 69 64 20 76 61 6c 75 65 20 6d  is rowid value m
1e5e0 61 79 0a 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74  ay.** or may not
1e5f0 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20   be the same as 
1e600 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20  R..**.** If any 
1e610 6f 66 20 74 68 65 20 4e 20 72 65 67 69 73 74 65  of the N registe
1e620 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  rs beginning wit
1e630 68 20 72 65 67 69 73 74 65 72 20 50 34 20 63 6f  h register P4 co
1e640 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a  ntains a NULL.**
1e650 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d   value, jump imm
1e660 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
1e670 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c  **.** Otherwise,
1e680 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1e690 6e 20 63 68 65 63 6b 73 20 69 66 20 63 75 72 73  n checks if curs
1e6a0 6f 72 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61  or P1 contains a
1e6b0 6e 20 65 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65  n entry.** where
1e6c0 20 74 68 65 20 66 69 72 73 74 20 28 4e 2d 31 29   the first (N-1)
1e6d0 20 66 69 65 6c 64 73 20 6d 61 74 63 68 20 62 75   fields match bu
1e6e0 74 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75  t the rowid valu
1e6f0 65 20 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20  e at the end.** 
1e700 6f 66 20 74 68 65 20 69 6e 64 65 78 20 65 6e 74  of the index ent
1e710 72 79 20 69 73 20 6e 6f 74 20 52 2e 20 49 66 20  ry is not R. If 
1e720 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
1e730 20 65 6e 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20   entry, control 
1e740 6a 75 6d 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74  jumps.** to inst
1e750 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
1e760 72 77 69 73 65 2c 20 74 68 65 20 72 6f 77 69 64  rwise, the rowid
1e770 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74   of the conflict
1e780 69 6e 67 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74  ing index.** ent
1e790 72 79 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20  ry is copied to 
1e7a0 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20  register P3 and 
1e7b0 63 6f 6e 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68  control falls th
1e7c0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1e7d0 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  t.** instruction
1e7e0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1e7f0 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45  : NotFound, NotE
1e800 78 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a  xists, Found.*/.
1e810 63 61 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65  case OP_IsUnique
1e820 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
1e830 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36  mp, in3 */.  u16
1e840 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f   ii;.  VdbeCurso
1e850 72 20 2a 70 43 78 3b 0a 20 20 42 74 43 75 72 73  r *pCx;.  BtCurs
1e860 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 31 36  or *pCrsr;.  u16
1e870 20 6e 46 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a   nField;.  Mem *
1e880 61 4d 78 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  aMx;.  UnpackedR
1e890 65 63 6f 72 64 20 72 3b 20 20 20 20 20 20 20 20  ecord r;        
1e8a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 2d 54            /* B-T
1e8b0 72 65 65 20 69 6e 64 65 78 20 73 65 61 72 63 68  ree index search
1e8c0 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b   key */.  i64 R;
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e8f0 52 6f 77 69 64 20 73 74 6f 72 65 64 20 69 6e 20  Rowid stored in 
1e900 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a  register P3 */..
1e910 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1e920 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 4d 78 20 3d  Op->p3];.  aMx =
1e930 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69   &aMem[pOp->p4.i
1e940 5d 3b 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74  ];.  /* Assert t
1e950 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 6f  hat the values o
1e960 66 20 70 61 72 61 6d 65 74 65 72 73 20 50 31 20  f parameters P1 
1e970 61 6e 64 20 50 34 20 61 72 65 20 69 6e 20 72 61  and P4 are in ra
1e980 6e 67 65 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74  nge. */.  assert
1e990 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1e9a0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73  4_INT32 );.  ass
1e9b0 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30  ert( pOp->p4.i>0
1e9c0 20 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70   && pOp->p4.i<=p
1e9d0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65  ->nMem );.  asse
1e9e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1e9f0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1ea00 72 73 6f 72 20 29 3b 0a 0a 20 20 2f 2a 20 46 69  rsor );..  /* Fi
1ea10 6e 64 20 74 68 65 20 69 6e 64 65 78 20 63 75 72  nd the index cur
1ea20 73 6f 72 2e 20 2a 2f 0a 20 20 70 43 78 20 3d 20  sor. */.  pCx = 
1ea30 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1ea40 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  ];.  assert( pCx
1ea50 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1ea60 3d 3d 30 20 29 3b 0a 20 20 70 43 78 2d 3e 73 65  ==0 );.  pCx->se
1ea70 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  ekResult = 0;.  
1ea80 70 43 78 2d 3e 63 61 63 68 65 53 74 61 74 75 73  pCx->cacheStatus
1ea90 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1eaa0 20 20 70 43 72 73 72 20 3d 20 70 43 78 2d 3e 70    pCrsr = pCx->p
1eab0 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66  Cursor;..  /* If
1eac0 20 61 6e 79 20 6f 66 20 74 68 65 20 76 61 6c 75   any of the valu
1ead0 65 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 61 6b  es are NULL, tak
1eae0 65 20 74 68 65 20 6a 75 6d 70 2e 20 2a 2f 0a 20  e the jump. */. 
1eaf0 20 6e 46 69 65 6c 64 20 3d 20 70 43 78 2d 3e 70   nField = pCx->p
1eb00 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 3b  KeyInfo->nField;
1eb10 0a 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c  .  for(ii=0; ii<
1eb20 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20  nField; ii++){. 
1eb30 20 20 20 69 66 28 20 61 4d 78 5b 69 69 5d 2e 66     if( aMx[ii].f
1eb40 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
1eb50 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
1eb60 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
1eb70 20 70 43 72 73 72 20 3d 20 30 3b 0a 20 20 20 20   pCrsr = 0;.    
1eb80 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
1eb90 20 7d 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d   }.  assert( (aM
1eba0 78 5b 6e 46 69 65 6c 64 5d 2e 66 6c 61 67 73 20  x[nField].flags 
1ebb0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
1ebc0 3b 0a 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d  ;..  if( pCrsr!=
1ebd0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 50 6f 70 75  0 ){.    /* Popu
1ebe0 6c 61 74 65 20 74 68 65 20 69 6e 64 65 78 20 73  late the index s
1ebf0 65 61 72 63 68 20 6b 65 79 2e 20 2a 2f 0a 20 20  earch key. */.  
1ec00 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1ec10 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  Cx->pKeyInfo;.  
1ec20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 6e 46 69    r.nField = nFi
1ec30 65 6c 64 20 2b 20 31 3b 0a 20 20 20 20 72 2e 66  eld + 1;.    r.f
1ec40 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
1ec50 50 52 45 46 49 58 5f 53 45 41 52 43 48 3b 0a 20  PREFIX_SEARCH;. 
1ec60 20 20 20 72 2e 61 4d 65 6d 20 3d 20 61 4d 78 3b     r.aMem = aMx;
1ec70 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1ec80 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69  EBUG.    { int i
1ec90 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
1eca0 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
1ecb0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
1ecc0 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
1ecd0 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 45  #endif..    /* E
1ece0 78 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  xtract the value
1ecf0 20 6f 66 20 52 20 66 72 6f 6d 20 72 65 67 69 73   of R from regis
1ed00 74 65 72 20 50 33 2e 20 2a 2f 0a 20 20 20 20 73  ter P3. */.    s
1ed10 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
1ed20 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20  egerify(pIn3);. 
1ed30 20 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75 2e 69     R = pIn3->u.i
1ed40 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63 68  ;..    /* Search
1ed50 20 74 68 65 20 42 2d 54 72 65 65 20 69 6e 64 65   the B-Tree inde
1ed60 78 2e 20 49 66 20 6e 6f 20 63 6f 6e 66 6c 69 63  x. If no conflic
1ed70 74 69 6e 67 20 72 65 63 6f 72 64 20 69 73 20 66  ting record is f
1ed80 6f 75 6e 64 2c 20 6a 75 6d 70 0a 20 20 20 20 2a  ound, jump.    *
1ed90 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69  * to P2. Otherwi
1eda0 73 65 2c 20 63 6f 70 79 20 74 68 65 20 72 6f 77  se, copy the row
1edb0 69 64 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69  id of the confli
1edc0 63 74 69 6e 67 20 72 65 63 6f 72 64 20 74 6f 0a  cting record to.
1edd0 20 20 20 20 2a 2a 20 72 65 67 69 73 74 65 72 20      ** register 
1ede0 50 33 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  P3 and fall thro
1edf0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
1ee00 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 2a 2f  instruction.  */
1ee10 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1ee20 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1ee30 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20  cked(pCrsr, &r, 
1ee40 30 2c 20 30 2c 20 26 70 43 78 2d 3e 73 65 65 6b  0, 0, &pCx->seek
1ee50 52 65 73 75 6c 74 29 3b 0a 20 20 20 20 69 66 28  Result);.    if(
1ee60 20 28 72 2e 66 6c 61 67 73 20 26 20 55 4e 50 41   (r.flags & UNPA
1ee70 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52  CKED_PREFIX_SEAR
1ee80 43 48 29 20 7c 7c 20 72 2e 72 6f 77 69 64 3d 3d  CH) || r.rowid==
1ee90 52 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  R ){.      pc = 
1eea0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1eeb0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 49   }else{.      pI
1eec0 6e 33 2d 3e 75 2e 69 20 3d 20 72 2e 72 6f 77 69  n3->u.i = r.rowi
1eed0 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  d;.    }.  }.  b
1eee0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1eef0 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
1ef00 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1ef10 20 55 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   Use the content
1ef20 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
1ef30 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6b 65  as an integer ke
1ef40 79 2e 20 20 49 66 20 61 20 72 65 63 6f 72 64 20  y.  If a record 
1ef50 0a 2a 2a 20 77 69 74 68 20 74 68 61 74 20 6b 65  .** with that ke
1ef60 79 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  y does not exist
1ef70 20 69 6e 20 74 61 62 6c 65 20 6f 66 20 50 31 2c   in table of P1,
1ef80 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1ef90 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63  . .** If the rec
1efa0 6f 72 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  ord does exist, 
1efb0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
1efc0 68 2e 20 20 54 68 65 20 63 75 72 73 6f 72 20 69  h.  The cursor i
1efd0 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74  s left .** point
1efe0 69 6e 67 20 74 6f 20 74 68 65 20 72 65 63 6f 72  ing to the recor
1eff0 64 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  d if it exists..
1f000 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72  **.** The differ
1f010 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 69  ence between thi
1f020 73 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  s operation and 
1f030 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74 68 61 74  NotFound is that
1f040 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
1f050 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 65 20 6b  on assumes the k
1f060 65 79 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  ey is an integer
1f070 20 61 6e 64 20 74 68 61 74 20 50 31 20 69 73 20   and that P1 is 
1f080 61 20 74 61 62 6c 65 20 77 68 65 72 65 61 73 0a  a table whereas.
1f090 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75  ** NotFound assu
1f0a0 6d 65 73 20 6b 65 79 20 69 73 20 61 20 62 6c 6f  mes key is a blo
1f0b0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72  b constructed fr
1f0c0 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e  om MakeRecord an
1f0d0 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e  d.** P1 is an in
1f0e0 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  dex..**.** See a
1f0f0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1f100 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a  ound, IsUnique.*
1f110 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
1f120 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  sts: {        /*
1f130 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1f140 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1f150 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1f160 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
1f170 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e  u64 iKey;..  pIn
1f180 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1f190 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  3];.  assert( pI
1f1a0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1f1b0 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
1f1c0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1f1d0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1f1e0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1f1f0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1f200 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1f210 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1f220 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
1f230 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
1f240 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
1f250 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1f260 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  sor;.  if( ALWAY
1f270 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20  S(pCrsr!=0) ){. 
1f280 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
1f290 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  iKey = pIn3->u.i
1f2a0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1f2b0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1f2c0 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20  acked(pCrsr, 0, 
1f2d0 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
1f2e0 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69      pC->lastRowi
1f2f0 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  d = pIn3->u.i;. 
1f300 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1f310 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a  lid = res==0 ?1:
1f320 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  0;.    pC->nullR
1f330 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  ow = 0;.    pC->
1f340 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1f350 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70  CHE_STALE;.    p
1f360 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1f370 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72  o = 0;.    if( r
1f380 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  es!=0 ){.      p
1f390 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1f3a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1f3b0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d  C->rowidIsValid=
1f3c0 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  =0 );.    }.    
1f3d0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
1f3e0 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   res;.  }else{. 
1f3f0 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
1f400 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74 65 6d  ns when an attem
1f410 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72 65 61  pt to open a rea
1f420 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65 20  d cursor on the 
1f430 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d  .    ** sqlite_m
1f440 61 73 74 65 72 20 74 61 62 6c 65 20 72 65 74 75  aster table retu
1f450 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59  rns SQLITE_EMPTY
1f460 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63 20  ..    */.    pc 
1f470 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1f480 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72     assert( pC->r
1f490 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29  owidIsValid==0 )
1f4a0 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65  ;.    pC->seekRe
1f4b0 73 75 6c 74 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  sult = 0;.  }.  
1f4c0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1f4d0 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31  ode: Sequence P1
1f4e0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1f4f0 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76  Find the next av
1f500 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65  ailable sequence
1f510 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73   number for curs
1f520 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20  or P1..** Write 
1f530 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  the sequence num
1f540 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ber into registe
1f550 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71  r P2..** The seq
1f560 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20  uence number on 
1f570 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e  the cursor is in
1f580 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20  cremented after 
1f590 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74  this.** instruct
1f5a0 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ion.  .*/.case O
1f5b0 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20  P_Sequence: {   
1f5c0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1f5d0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1f5e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1f5f0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1f600 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1f610 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
1f620 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
1f630 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61  pOut->u.i = p->a
1f640 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73  pCsr[pOp->p1]->s
1f650 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65  eqCount++;.  bre
1f660 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
1f670 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50  e: NewRowid P1 P
1f680 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47  2 P3 * *.**.** G
1f690 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72  et a new integer
1f6a0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
1f6b0 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75  a.k.a "rowid") u
1f6c0 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74  sed as the key t
1f6d0 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  o a table..** Th
1f6e0 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  e record number 
1f6f0 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
1f700 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20  y used as a key 
1f710 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
1f720 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75  ** table that cu
1f730 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
1f740 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f  o.  The new reco
1f750 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69  rd number is wri
1f760 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20  tten.** written 
1f770 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
1f780 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68  **.** If P3>0 th
1f790 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73  en P3 is a regis
1f7a0 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
1f7b0 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44  frame of this VD
1f7c0 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a  BE that holds .*
1f7d0 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72  * the largest pr
1f7e0 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74  eviously generat
1f7f0 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
1f800 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20  . No new record 
1f810 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61  numbers are.** a
1f820 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73  llowed to be les
1f830 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75  s than this valu
1f840 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c  e. When this val
1f850 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20 6d  ue reaches its m
1f860 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53  aximum, .** an S
1f870 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72  QLITE_FULL error
1f880 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54   is generated. T
1f890 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69  he P3 register i
1f8a0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
1f8b0 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65  he '.** generate
1f8c0 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
1f8d0 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69   This P3 mechani
1f8e0 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65  sm is used to he
1f8f0 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  lp implement the
1f900 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .** AUTOINCREMEN
1f910 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61  T feature..*/.ca
1f920 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20  se OP_NewRowid: 
1f930 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
1f940 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
1f950 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20  /.  i64 v;      
1f960 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1f970 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
1f980 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1f990 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
1f9a0 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65  r of table to ge
1f9b0 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20  t the new rowid 
1f9c0 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1f9e0 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69  esult of an sqli
1f9f0 74 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a  te3BtreeLast() *
1fa00 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20  /.  int cnt;    
1fa10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1fa20 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74  unter to limit t
1fa30 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61  he number of sea
1fa40 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  rches */.  Mem *
1fa50 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
1fa60 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1fa70 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f  lding largest ro
1fa80 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52  wid for AUTOINCR
1fa90 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46  EMENT */.  VdbeF
1faa0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
1fab0 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20    /* Root frame 
1fac0 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20  of VDBE */..  v 
1fad0 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  = 0;.  res = 0;.
1fae0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1faf0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1fb00 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1fb10 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1fb20 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1fb30 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
1fb40 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75 72 73   NEVER(pC->pCurs
1fb50 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a  or==0) ){.    /*
1fb60 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69 61   The zero initia
1fb70 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20 69  lization above i
1fb80 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e 65  s all that is ne
1fb90 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  eded */.  }else{
1fba0 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
1fbb0 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64   rowid or record
1fbc0 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65   number (differe
1fbd0 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65  nt terms for the
1fbe0 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69   same.    ** thi
1fbf0 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ng) is obtained 
1fc00 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c  in a two-step al
1fc10 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a  gorithm..    **.
1fc20 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20      ** First we 
1fc30 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
1fc40 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
1fc50 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61  ting rowid and a
1fc60 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f  dd one.    ** to
1fc70 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74   that.  But if t
1fc80 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
1fc90 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72  ing rowid is alr
1fca0 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d  eady the maximum
1fcb0 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65  .    ** positive
1fcc0 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76   integer, we hav
1fcd0 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67  e to fall throug
1fce0 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a  h to the second.
1fcf0 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69      ** probabili
1fd00 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20  stic algorithm. 
1fd10 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
1fd20 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68   second algorith
1fd30 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61  m is to select a
1fd40 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d   rowid at random
1fd50 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20   and see if.    
1fd60 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  ** it already ex
1fd70 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ists in the tabl
1fd80 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  e.  If it does n
1fd90 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76  ot exist, we hav
1fda0 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64  e.    ** succeed
1fdb0 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64  ed.  If the rand
1fdc0 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78  om rowid does ex
1fdd0 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61  ist, we select a
1fde0 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   new one.    ** 
1fdf0 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75  and try again, u
1fe00 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a  p to 100 times..
1fe10 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
1fe20 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1fe30 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
1fe40 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
1fe50 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
1fe60 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
1fe70 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
1fe80 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
1fe90 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
1fea0 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
1feb0 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
1fec0 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
1fed0 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
1fee0 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
1fef0 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
1ff00 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
1ff10 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
1ff20 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
1ff30 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
1ff40 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
1ff50 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
1ff60 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
1ff70 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
1ff80 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
1ff90 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
1ffa0 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
1ffb0 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
1ffc0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 76  Rowid ){.      v
1ffd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47   = sqlite3BtreeG
1ffe0 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43  etCachedRowid(pC
1fff0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
20000 20 20 69 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20    if( v==0 ){.  
20010 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
20020 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e  e3BtreeLast(pC->
20030 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
20040 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
20050 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
20060 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
20070 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
20080 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
20090 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
200a0 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20         v = 1;   
200b0 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d  /* IMP: R-61914-
200c0 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 20  48074 */.       
200d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
200e0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
200f0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
20100 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  lid(pC->pCursor)
20110 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63   );.          rc
20120 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
20130 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73  eySize(pC->pCurs
20140 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  or, &v);.       
20150 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
20160 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
20170 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c   Cannot fail fol
20180 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74  lowing BtreeLast
20190 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  () */.          
201a0 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44  if( v>=MAX_ROWID
201b0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
201c0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
201d0 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
201e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
201f0 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49       v++;   /* I
20200 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38  MP: R-29538-3498
20210 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7d  7 */.          }
20220 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
20230 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   }..#ifndef SQLI
20240 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
20250 45 4d 45 4e 54 0a 20 20 20 20 20 20 69 66 28 20  EMENT.      if( 
20260 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20  pOp->p3 ){.     
20270 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
20280 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
20290 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
202a0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
202b0 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
202c0 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61       if( p->pFra
202d0 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  me ){.          
202e0 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
202f0 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
20300 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
20310 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
20320 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73            /* Ass
20330 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
20340 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
20350 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ll. */.         
20360 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
20370 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29  <=pFrame->nMem )
20380 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d  ;.          pMem
20390 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
203a0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
203b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
203c0 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
203d0 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
203e0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
203f0 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
20400 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
20410 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Mem );.         
20420 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
20430 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
20440 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
20450 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ge(p, pMem);.   
20460 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61       }.        a
20470 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
20480 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20  d(pMem) );..    
20490 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
204a0 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d  CE(pOp->p3, pMem
204b0 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
204c0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
204d0 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20  ify(pMem);.     
204e0 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d     assert( (pMem
204f0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
20500 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d  t)!=0 );  /* mem
20510 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e  (P3) holds an in
20520 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  teger */.       
20530 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
20540 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
20550 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
20560 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
20570 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
20580 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35   /* IMP: R-12275
20590 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20  -61338 */.      
205a0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
205b0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
205c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
205d0 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31  f( v<pMem->u.i+1
205e0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20   ){.          v 
205f0 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b  = pMem->u.i + 1;
20600 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
20610 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76     pMem->u.i = v
20620 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
20630 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ..      sqlite3B
20640 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
20650 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
20660 76 3c 4d 41 58 5f 52 4f 57 49 44 20 3f 20 76 2b  v<MAX_ROWID ? v+
20670 31 20 3a 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  1 : 0);.    }.  
20680 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e    if( pC->useRan
20690 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
206a0 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    /* IMPLEMENTAT
206b0 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d  ION-OF: R-07677-
206c0 34 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72  41881 If the lar
206d0 67 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71  gest ROWID is eq
206e0 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20  ual to the.     
206f0 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73   ** largest poss
20700 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32  ible integer (92
20710 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
20720 37 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  7) then the data
20730 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e  base.      ** en
20740 67 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b  gine starts pick
20750 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e  ing positive can
20760 64 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74  didate ROWIDs at
20770 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20   random until.  
20780 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20      ** it finds 
20790 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  one that is not 
207a0 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e  previously used.
207b0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
207c0 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20  ( pOp->p3==0 ); 
207d0 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65   /* We cannot be
207e0 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64   in random rowid
207f0 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73   mode if this is
20800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
20820 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
20830 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20  T table. */.    
20840 20 20 2f 2a 20 6f 6e 20 74 68 65 20 66 69 72 73    /* on the firs
20850 74 20 61 74 74 65 6d 70 74 2c 20 73 69 6d 70 6c  t attempt, simpl
20860 79 20 64 6f 20 6f 6e 65 20 6d 6f 72 65 20 74 68  y do one more th
20870 61 6e 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  an previous */. 
20880 20 20 20 20 20 76 20 3d 20 6c 61 73 74 52 6f 77       v = lastRow
20890 69 64 3b 0a 20 20 20 20 20 20 76 20 26 3d 20 28  id;.      v &= (
208a0 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f  MAX_ROWID>>1); /
208b0 2a 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74  * ensure doesn't
208c0 20 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a   go negative */.
208d0 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e        v++; /* en
208e0 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f  sure non-zero */
208f0 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a  .      cnt = 0;.
20900 20 20 20 20 20 20 77 68 69 6c 65 28 20 20 20 28        while(   (
20910 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72  (rc = sqlite3Btr
20920 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
20930 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
20940 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20   (u64)v,.       
20950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20970 20 20 20 20 20 20 20 20 20 20 30 2c 20 26 72 65            0, &re
20980 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a  s))==SQLITE_OK).
20990 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
209a0 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20  res==0).        
209b0 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30      && (++cnt<10
209c0 30 29 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0)){.        /* 
209d0 63 6f 6c 6c 69 73 69 6f 6e 20 2d 20 74 72 79 20  collision - try 
209e0 61 6e 6f 74 68 65 72 20 72 61 6e 64 6f 6d 20 72  another random r
209f0 6f 77 69 64 20 2a 2f 0a 20 20 20 20 20 20 20 20  owid */.        
20a00 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65  sqlite3_randomne
20a10 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76  ss(sizeof(v), &v
20a20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63  );.        if( c
20a30 6e 74 3c 35 20 29 7b 0a 20 20 20 20 20 20 20 20  nt<5 ){.        
20a40 20 20 2f 2a 20 74 72 79 20 22 73 6d 61 6c 6c 22    /* try "small"
20a50 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 73 20 66   random rowids f
20a60 6f 72 20 74 68 65 20 69 6e 69 74 69 61 6c 20 61  or the initial a
20a70 74 74 65 6d 70 74 73 20 2a 2f 0a 20 20 20 20 20  ttempts */.     
20a80 20 20 20 20 20 76 20 26 3d 20 30 78 66 66 66 66       v &= 0xffff
20a90 66 66 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ff;.        }els
20aa0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 26  e{.          v &
20ab0 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29  = (MAX_ROWID>>1)
20ac0 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f 65 73  ; /* ensure does
20ad0 6e 27 74 20 67 6f 20 6e 65 67 61 74 69 76 65 20  n't go negative 
20ae0 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  */.        }.   
20af0 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73       v++; /* ens
20b00 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a  ure non-zero */.
20b10 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
20b20 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
20b30 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  && res==0 ){.   
20b40 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
20b50 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
20b60 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a   R-38219-53002 *
20b70 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  /.        goto a
20b80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
20b90 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
20ba0 20 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20   assert( v>0 ); 
20bb0 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d   /* EV: R-40812-
20bc0 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20  03570 */.    }. 
20bd0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
20be0 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  lid = 0;.    pC-
20bf0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
20c00 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
20c10 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
20c20 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f  _STALE;.  }.  pO
20c30 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62  ut->u.i = v;.  b
20c40 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
20c50 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32  de: Insert P1 P2
20c60 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
20c70 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69  Write an entry i
20c80 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66  nto the table of
20c90 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e   cursor P1.  A n
20ca0 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63  ew entry is.** c
20cb0 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65  reated if it doe
20cc0 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69  sn't already exi
20cd0 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66  st or the data f
20ce0 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a  or an existing.*
20cf0 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77  * entry is overw
20d00 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74  ritten.  The dat
20d10 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d  a is the value M
20d20 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69  EM_Blob stored i
20d30 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75  n register.** nu
20d40 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79  mber P2. The key
20d50 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
20d60 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b  gister P3. The k
20d70 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20  ey must.** be a 
20d80 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49  MEM_Int..**.** I
20d90 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
20da0 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20  ANGE flag of P5 
20db0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
20dc0 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e   row change coun
20dd0 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  t is.** incremen
20de0 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
20df0 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ot).  If the OPF
20e00 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c  LAG_LASTROWID fl
20e10 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
20e20 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69  .** then rowid i
20e30 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62  s stored for sub
20e40 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62  sequent return b
20e50 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
20e60 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
20e70 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f  id() function (o
20e80 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75  therwise it is u
20e90 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a  nmodified)..**.*
20ea0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
20eb0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
20ec0 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  ag of P5 is set 
20ed0 61 6e 64 20 69 66 20 74 68 65 20 72 65 73 75 6c  and if the resul
20ee0 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74  t of.** the last
20ef0 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20   seek operation 
20f00 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77  (OP_NotExists) w
20f10 61 73 20 61 20 73 75 63 63 65 73 73 2c 20 74 68  as a success, th
20f20 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61  en this.** opera
20f30 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74  tion will not at
20f40 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68  tempt to find th
20f50 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f  e appropriate ro
20f60 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a  w before doing.*
20f70 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62 75 74  * the insert but
20f80 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76   will instead ov
20f90 65 72 77 72 69 74 65 20 74 68 65 20 72 6f 77 20  erwrite the row 
20fa0 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20  that the cursor 
20fb0 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  is.** currently 
20fc0 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72  pointing to.  Pr
20fd0 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72  esumably, the pr
20fe0 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  ior OP_NotExists
20ff0 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61   opcode.** has a
21000 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65  lready positione
21010 64 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72  d the cursor cor
21020 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73  rectly.  This is
21030 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
21040 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20  .** that boosts 
21050 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61  performance by a
21060 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e  voiding redundan
21070 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49  t seeks..**.** I
21080 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55  f the OPFLAG_ISU
21090 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65  PDATE flag is se
210a0 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  t, then this opc
210b0 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61  ode is part of a
210c0 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72  n.** UPDATE oper
210d0 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73  ation.  Otherwis
210e0 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69  e (if the flag i
210f0 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68  s clear) then th
21100 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  is opcode.** is 
21110 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52  part of an INSER
21120 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68  T operation.  Th
21130 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20  e difference is 
21140 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74  only important t
21150 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20  o.** the update 
21160 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61  hook..**.** Para
21170 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69  meter P4 may poi
21180 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63  nt to a string c
21190 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
211a0 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20  ble-name, or.** 
211b0 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20  may be NULL. If 
211c0 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  it is not NULL, 
211d0 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d  then the update-
211e0 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65  hook .** (sqlite
211f0 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  3.xUpdateCallbac
21200 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f  k) is invoked fo
21210 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73  llowing a succes
21220 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a  sful insert..**.
21230 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f  ** (WARNING/TODO
21240 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65  : If P1 is a pse
21250 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50  udo-cursor and P
21260 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79  2 is dynamically
21270 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74  .** allocated, t
21280 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66  hen ownership of
21290 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72   P2 is transferr
212a0 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f  ed to the pseudo
212b0 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72  -cursor.** and r
212c0 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d  egister P2 becom
212d0 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49  es ephemeral.  I
212e0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
212f0 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20  changed, the.** 
21300 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
21310 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63  r P2 will then c
21320 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72  hange.  Make sur
21330 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a  e this does not.
21340 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f  ** cause any pro
21350 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68  blems.).**.** Th
21360 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
21370 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62  nly works on tab
21380 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  les.  The equiva
21390 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
213a0 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20  .** for indices 
213b0 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e  is OP_IdxInsert.
213c0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
213d0 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50  nsertInt P1 P2 P
213e0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
213f0 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  is works exactly
21400 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20   like OP_Insert 
21410 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
21420 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e  key is the.** in
21430 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20  teger value P3, 
21440 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  not the value of
21450 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f   the integer sto
21460 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
21470 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P3..*/.case OP_I
21480 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f  nsert: .case OP_
21490 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d  InsertInt: {.  M
214a0 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20  em *pData;      
214b0 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
214c0 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68  ding data for th
214d0 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
214e0 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d  nserted */.  Mem
214f0 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f   *pKey;        /
21500 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
21510 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20  ng key  for the 
21520 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20  record */.  i64 
21530 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  iKey;         /*
21540 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57   The integer ROW
21550 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68  ID or key for th
21560 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
21570 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62  nserted */.  Vdb
21580 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f  eCursor *pC;   /
21590 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c  * Cursor to tabl
215a0 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73  e into which ins
215b0 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a  ert is written *
215c0 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20  /.  int nZero;  
215d0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
215e0 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f  of zero-bytes to
215f0 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74   append */.  int
21600 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f   seekResult;   /
21610 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f  * Result of prio
21620 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e  r seek or 0 if n
21630 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  o USESEEKRESULT 
21640 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  flag */.  const 
21650 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64  char *zDb;  /* d
21660 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75  atabase name - u
21670 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74  sed by the updat
21680 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73  e hook */.  cons
21690 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a  t char *zTbl; /*
216a0 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73   Table name - us
216b0 65 64 20 62 79 20 74 68 65 20 6f 70 64 61 74 65  ed by the opdate
216c0 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f   hook */.  int o
216d0 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
216e0 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74  Opcode for updat
216f0 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55  e hook: SQLITE_U
21700 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f  PDATE or SQLITE_
21710 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61  INSERT */..  pDa
21720 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ta = &aMem[pOp->
21730 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
21740 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21750 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21760 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
21770 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29  IsValid(pData) )
21780 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21790 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
217a0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
217b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
217c0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
217d0 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
217e0 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
217f0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
21800 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ble );.  REGISTE
21810 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
21820 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20   pData);..  if( 
21830 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21840 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b  Insert ){.    pK
21850 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ey = &aMem[pOp->
21860 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p3];.    assert(
21870 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d   pKey->flags & M
21880 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73  EM_Int );.    as
21890 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
218a0 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45  (pKey) );.    RE
218b0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
218c0 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20  ->p3, pKey);.   
218d0 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e   iKey = pKey->u.
218e0 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  i;.  }else{.    
218f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
21900 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e  ode==OP_InsertIn
21910 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  t );.    iKey = 
21920 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20  pOp->p3;.  }..  
21930 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
21940 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
21950 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69  ->nChange++;.  i
21960 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
21970 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20  LAG_LASTROWID ) 
21980 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
21990 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79  lastRowid = iKey
219a0 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
219b0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
219c0 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20  ){.    pData->z 
219d0 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e  = 0;.    pData->
219e0 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n = 0;.  }else{.
219f0 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
21a00 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
21a10 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
21a20 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c  .  }.  seekResul
21a30 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  t = ((pOp->p5 & 
21a40 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
21a50 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
21a60 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69  Result : 0);.  i
21a70 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
21a80 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
21a90 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d    nZero = pData-
21aa0 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73  >u.nZero;.  }els
21ab0 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  e{.    nZero = 0
21ac0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42  ;.  }.  sqlite3B
21ad0 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
21ae0 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
21af0 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  0);.  rc = sqlit
21b00 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
21b10 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b  ->pCursor, 0, iK
21b20 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey,.            
21b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
21b40 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e  ata->z, pData->n
21b50 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20  , nZero,.       
21b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b70 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46     pOp->p5 & OPF
21b80 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65 65 6b  LAG_APPEND, seek
21b90 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43  Result.  );.  pC
21ba0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
21bb0 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   0;.  pC->deferr
21bc0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
21bd0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
21be0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
21bf0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
21c00 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
21c10 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
21c20 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21c30 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
21c40 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
21c50 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d  4.z ){.    zDb =
21c60 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
21c70 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62  ].zName;.    zTb
21c80 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
21c90 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70     op = ((pOp->p
21ca0 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  5 & OPFLAG_ISUPD
21cb0 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
21cc0 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e  DATE : SQLITE_IN
21cd0 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72  SERT);.    asser
21ce0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
21cf0 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  ;.    db->xUpdat
21d00 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
21d10 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44  pdateArg, op, zD
21d20 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
21d30 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
21d40 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
21d50 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
21d60 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50  ode: Delete P1 P
21d70 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 * P4 *.**.** D
21d80 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64  elete the record
21d90 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31   at which the P1
21da0 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65   cursor is curre
21db0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  ntly pointing..*
21dc0 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  *.** The cursor 
21dd0 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69  will be left poi
21de0 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65 72 20  nting at either 
21df0 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
21e00 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
21e10 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
21e20 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
21e30 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
21e40 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
21e50 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
21e60 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
21e70 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20  ll be a no-op.  
21e80 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74  Hence it is OK t
21e90 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65  o delete.** a re
21ea0 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  cord from within
21eb0 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a   an Next loop..*
21ec0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
21ed0 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
21ee0 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20 74 68  of P2 is set, th
21ef0 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
21f00 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
21f10 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
21f20 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a  wise not)..**.**
21f30 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P1 must not be 
21f40 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
21f50 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65  t has to be a re
21f60 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a  al table with.**
21f70 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a   multiple rows..
21f80 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
21f90 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74  ot NULL, then it
21fa0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
21fb0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 50  the table that P
21fc0 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67  1 is.** pointing
21fd0 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65   to.  The update
21fe0 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e   hook will be in
21ff0 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69  voked, if it exi
22000 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73  sts..** If P4 is
22010 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74   not NULL then t
22020 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
22030 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69  t have been posi
22040 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20  tioned.** using 
22050 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f  OP_NotFound prio
22060 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68  r to invoking th
22070 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  is opcode..*/.ca
22080 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a  se OP_Delete: {.
22090 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20 56 64    i64 iKey;.  Vd
220a0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
220b0 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61 73 73   iKey = 0;.  ass
220c0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
220d0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
220e0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
220f0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
22100 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
22110 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
22120 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
22130 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64  ;  /* Only valid
22140 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73   for real tables
22150 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65  , no pseudotable
22160 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68  s */..  /* If th
22170 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69  e update-hook wi
22180 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73  ll be invoked, s
22190 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65 20 72  et iKey to the r
221a0 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a  owid of the.  **
221b0 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65 74   row being delet
221c0 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ed..  */.  if( d
221d0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
221e0 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
221f0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
22200 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
22210 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
22220 77 69 64 49 73 56 61 6c 69 64 20 29 3b 20 20 2f  widIsValid );  /
22230 2a 20 6c 61 73 74 52 6f 77 69 64 20 73 65 74 20  * lastRowid set 
22240 62 79 20 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e  by previous OP_N
22250 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69  otFound */.    i
22260 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f  Key = pC->lastRo
22270 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54  wid;.  }..  /* T
22280 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63  he OP_Delete opc
22290 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  ode always follo
222a0 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73  ws an OP_NotExis
222b0 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72  ts or OP_Last or
222c0 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  .  ** OP_Column 
222d0 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  on the same tabl
222e0 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e  e without any in
222f0 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72 61 74  tervening operat
22300 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d  ions that.  ** m
22310 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76  ight move or inv
22320 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73  alidate the curs
22330 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72 73 6f  or.  Hence curso
22340 72 20 70 43 20 69 73 20 61 6c 77 61 79 73 20 70  r pC is always p
22350 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20  ointing.  ** to 
22360 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 64 65  the row to be de
22370 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
22380 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
22390 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74 69 6f  oveto() operatio
223a0 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20  n.  ** below is 
223b0 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61  always a no-op a
223c0 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20  nd cannot fail. 
223d0 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69 74 20   We will run it 
223e0 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a  anyhow, though,.
223f0 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20 61 67    ** to guard ag
22400 61 69 6e 73 74 20 66 75 74 75 72 65 20 63 68 61  ainst future cha
22410 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f 64 65  nges to the code
22420 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a   generator..  **
22430 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
22440 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
22450 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
22460 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
22470 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e  eto(pC);.  if( N
22480 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
22490 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  OK) ) goto abort
224a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
224b0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
224c0 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
224d0 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20  >pCursor, 0);.  
224e0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
224f0 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72  eDelete(pC->pCur
22500 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  sor);.  pC->cach
22510 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
22520 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
22530 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
22540 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
22550 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
22560 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
22570 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
22580 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
22590 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
225a0 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
225b0 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
225c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62   const char *zTb
225d0 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
225e0 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
225f0 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
22600 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45  teArg, SQLITE_DE
22610 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  LETE, zDb, zTbl,
22620 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
22630 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
22640 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
22650 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p2 & OPFLAG_NCH
22660 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
22670 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  e++;.  break;.}.
22680 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
22690 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a  Count * * * * *.
226a0 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
226b0 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
226c0 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
226d0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
226e0 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
226f0 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
22700 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
22710 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
22720 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a  3_changes())..**
22730 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e   Then the VMs in
22740 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f  ternal change co
22750 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20  unter resets to 
22760 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73  0..** This is us
22770 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
22780 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20  ograms..*/.case 
22790 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b  OP_ResetCount: {
227a0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
227b0 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
227c0 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e  nChange);.  p->n
227d0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72  Change = 0;.  br
227e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
227f0 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  e: SorterCompare
22800 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
22810 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63  P1 is a sorter c
22820 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74  ursor. This inst
22830 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73  ruction compares
22840 20 74 68 65 20 72 65 63 6f 72 64 20 62 6c 6f 62   the record blob
22850 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   in .** register
22860 20 50 33 20 77 69 74 68 20 74 68 65 20 65 6e 74   P3 with the ent
22870 72 79 20 74 68 61 74 20 74 68 65 20 73 6f 72 74  ry that the sort
22880 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e  er cursor curren
22890 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 0a 2a  tly points to..*
228a0 2a 20 49 66 2c 20 65 78 63 6c 75 64 69 6e 67 20  * If, excluding 
228b0 74 68 65 20 72 6f 77 69 64 20 66 69 65 6c 64 73  the rowid fields
228c0 20 61 74 20 74 68 65 20 65 6e 64 2c 20 74 68 65   at the end, the
228d0 20 74 77 6f 20 72 65 63 6f 72 64 73 20 61 72 65   two records are
228e0 20 61 20 6d 61 74 63 68 2c 0a 2a 2a 20 66 61 6c   a match,.** fal
228f0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
22900 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
22910 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 6a 75  n. Otherwise, ju
22920 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
22930 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
22940 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20  _SorterCompare: 
22950 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
22960 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  pC;.  int res;..
22970 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22980 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22990 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
229a0 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
229b0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 72  em[pOp->p3];.  r
229c0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
229d0 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c  orterCompare(pC,
229e0 20 70 49 6e 33 2c 20 26 72 65 73 29 3b 0a 20 20   pIn3, &res);.  
229f0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
22a00 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
22a10 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a   }.  break;.};..
22a20 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
22a30 72 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20  rData P1 P2 * * 
22a40 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  *.**.** Write in
22a50 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
22a60 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65  he current sorte
22a70 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65  r data for sorte
22a80 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  r cursor P1..*/.
22a90 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61  case OP_SorterDa
22aa0 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
22ab0 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20  or *pC;..  pOut 
22ac0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
22ad0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22ae0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22af0 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74  sert( pC->isSort
22b00 65 72 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  er );.  rc = sql
22b10 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f  ite3VdbeSorterRo
22b20 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a  wkey(pC, pOut);.
22b30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22b40 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
22b50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
22b60 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
22b70 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
22b80 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f  lete row data fo
22b90 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
22ba0 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
22bb0 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
22bc0 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20  e data.  .** It 
22bd0 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f  is just copied o
22be0 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73  nto the P2 regis
22bf0 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
22c00 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
22c10 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
22c20 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ile..**.** If th
22c30 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
22c40 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   be pointing to 
22c50 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74  a valid row (not
22c60 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20   a NULL row).** 
22c70 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  of a real table,
22c80 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
22c90 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ble..*/./* Opcod
22ca0 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20  e: RowKey P1 P2 
22cb0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
22cc0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
22cd0 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
22ce0 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73  row key for curs
22cf0 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
22d00 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
22d10 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
22d20 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69  .  .** The key i
22d30 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  s copied onto th
22d40 65 20 50 33 20 72 65 67 69 73 74 65 72 20 65 78  e P3 register ex
22d50 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
22d60 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
22d70 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
22d80 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
22d90 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
22da0 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
22db0 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
22dc0 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
22dd0 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
22de0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
22df0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79  /.case OP_RowKey
22e00 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74  :.case OP_RowDat
22e10 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  a: {.  VdbeCurso
22e20 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
22e30 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20  r *pCrsr;.  u32 
22e40 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20  n;.  i64 n64;.. 
22e50 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
22e60 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p2];.  memAbo
22e70 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
22e80 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20  ut);..  /* Note 
22e90 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20  that RowKey and 
22ea0 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c  RowData are real
22eb0 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  ly exactly the s
22ec0 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ame instruction 
22ed0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
22ee0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
22ef0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
22f00 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
22f10 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
22f20 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65  ert( pC->isSorte
22f30 72 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r==0 );.  assert
22f40 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c  ( pC->isTable ||
22f50 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
22f60 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73  _RowData );.  as
22f70 73 65 72 74 28 20 70 43 2d 3e 69 73 49 6e 64 65  sert( pC->isInde
22f80 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  x || pOp->opcode
22f90 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a  ==OP_RowData );.
22fa0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
22fb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
22fc0 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20  >nullRow==0 );. 
22fd0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
22fe0 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
22ff0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
23000 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
23010 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
23020 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 73  sor;.  assert( s
23030 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
23040 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
23050 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f  );..  /* The OP_
23060 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f  RowKey and OP_Ro
23070 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c  wData opcodes al
23080 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e  ways follow OP_N
23090 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a  otExists or.  **
230a0 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65   OP_Rewind/Op_Ne
230b0 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72  xt with no inter
230c0 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69  vening instructi
230d0 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 69  ons that might i
230e0 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74  nvalidate.  ** t
230f0 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63  he cursor.  Henc
23100 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
23110 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
23120 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 69  rMoveto() call i
23130 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61 20  s always.  ** a 
23140 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e 65  no-op and can ne
23150 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74 20 77  ver fail.  But w
23160 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20 70 6c  e leave it in pl
23170 61 63 65 20 61 73 20 61 20 73 61 66 65 74 79 2e  ace as a safety.
23180 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
23190 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
231a0 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  to==0 );.  rc = 
231b0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
231c0 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
231d0 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
231e0 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61  ITE_OK) ) goto a
231f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23200 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  r;..  if( pC->is
23210 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 61 73 73  Index ){.    ass
23220 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c  ert( !pC->isTabl
23230 65 20 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c  e );.    VVA_ONL
23240 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
23250 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73  treeKeySize(pCrs
23260 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61 73  r, &n64);.    as
23270 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
23280 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72 75  _OK );    /* Tru
23290 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72  e because of Cur
232a0 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c  sorMoveto() call
232b0 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66   above */.    if
232c0 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74  ( n64>db->aLimit
232d0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
232e0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
232f0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
23300 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32 29   }.    n = (u32)
23310 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  n64;.  }else{.  
23320 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
23330 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
23340 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29  aSize(pCrsr, &n)
23350 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
23360 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
23370 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20    /* DataSize() 
23380 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
23390 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62     if( n>(u32)db
233a0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
233b0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
233c0 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
233d0 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  big;.    }.  }. 
233e0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
233f0 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c  MemGrow(pOut, n,
23400 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
23410 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f  no_mem;.  }.  pO
23420 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d  ut->n = n;.  Mem
23430 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
23440 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69  , MEM_Blob);.  i
23450 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
23460 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
23470 65 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72  e3BtreeKey(pCrsr
23480 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29  , 0, n, pOut->z)
23490 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
234a0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
234b0 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e  Data(pCrsr, 0, n
234c0 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a  , pOut->z);.  }.
234d0 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
234e0 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49  LITE_UTF8;  /* I
234f0 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20  n case the blob 
23500 69 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20  is ever cast to 
23510 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45  text */.  UPDATE
23520 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
23530 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
23540 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69  ./* Opcode: Rowi
23550 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
23560 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
23570 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
23580 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
23590 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c   key of the tabl
235a0 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20  e entry that.** 
235b0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
235c0 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20  point to..**.** 
235d0 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  P1 can be either
235e0 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
235f0 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20  le or a virtual 
23600 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73  table.  There us
23610 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65  ed to.** be a se
23620 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64  parate OP_VRowid
23630 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20   opcode for use 
23640 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62  with virtual tab
23650 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a  les, but this.**
23660 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20   one opcode now 
23670 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74  works for both t
23680 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63  able types..*/.c
23690 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20  ase OP_Rowid: { 
236a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236b0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
236c0 73 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  se */.  VdbeCurs
236d0 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b  or *pC;.  i64 v;
236e0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
236f0 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
23700 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
23710 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65  pModule;..  asse
23720 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
23730 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
23740 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
23750 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
23760 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
23770 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23780 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
23790 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c  g==0 || pC->null
237a0 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  Row );.  if( pC-
237b0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
237c0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
237d0 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61  M_Null;.    brea
237e0 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  k;.  }else if( p
237f0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
23800 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d  o ){.    v = pC-
23810 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23  >movetoTarget;.#
23820 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
23830 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
23840 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
23850 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20  pVtabCursor ){. 
23860 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70     pVtab = pC->p
23870 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
23880 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d  b;.    pModule =
23890 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
238a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f  .    assert( pMo
238b0 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a  dule->xRowid );.
238c0 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
238d0 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56 74  ->xRowid(pC->pVt
238e0 61 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  abCursor, &v);. 
238f0 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72     importVtabErr
23900 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23  Msg(p, pVtab);.#
23910 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
23920 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
23930 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  E */.  }else{.  
23940 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
23950 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
23960 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
23970 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
23980 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
23990 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
239a0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20  _error;.    if( 
239b0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
239c0 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 70 43   ){.      v = pC
239d0 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  ->lastRowid;.   
239e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
239f0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
23a00 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73  eySize(pC->pCurs
23a10 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 61  or, &v);.      a
23a20 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
23a30 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61  E_OK );  /* Alwa
23a40 79 73 20 73 6f 20 62 65 63 61 75 73 65 20 6f 66  ys so because of
23a50 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
23a60 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20  above */.    }. 
23a70 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
23a80 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
23a90 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52  /* Opcode: NullR
23aa0 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ow P1 * * * *.**
23ab0 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72  .** Move the cur
23ac0 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c  sor P1 to a null
23ad0 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f   row.  Any OP_Co
23ae0 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a  lumn operations.
23af0 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68  ** that occur wh
23b00 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69  ile the cursor i
23b10 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f  s on the null ro
23b20 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a  w will always.**
23b30 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a   write a NULL..*
23b40 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f  /.case OP_NullRo
23b50 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  w: {.  VdbeCurso
23b60 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
23b70 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
23b80 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
23b90 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
23ba0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23bb0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23bc0 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
23bd0 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69   = 1;.  pC->rowi
23be0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
23bf0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
23c00 73 6f 72 20 7c 7c 20 70 43 2d 3e 70 56 74 61 62  sor || pC->pVtab
23c10 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
23c20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20  pC->pCursor ){. 
23c30 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
23c40 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70  learCursor(pC->p
23c50 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
23c60 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23c70 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a  de: Last P1 P2 *
23c80 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
23c90 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
23ca0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
23cb0 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
23cc0 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
23cd0 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
23ce0 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
23cf0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
23d00 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
23d10 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
23d20 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
23d30 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
23d40 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
23d50 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
23d60 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
23d70 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
23d80 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
23d90 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
23da0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
23db0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
23dc0 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Last: {       
23dd0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
23de0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
23df0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
23e00 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
23e10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
23e20 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
23e30 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
23e40 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23e50 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
23e60 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
23e70 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
23e80 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 66 28 20   res = 0;.  if( 
23e90 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
23ea0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
23eb0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
23ec0 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a  rsr, &res);.  }.
23ed0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
23ee0 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64  (u8)res;.  pC->d
23ef0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
23f00 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  0;.  pC->rowidIs
23f10 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
23f20 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
23f30 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
23f40 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 72  ( pOp->p2>0 && r
23f50 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
23f60 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
23f70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
23f80 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20  Opcode: Sort P1 
23f90 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
23fa0 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
23fb0 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
23fc0 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77   thing as OP_Rew
23fd0 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a  ind except that.
23fe0 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73  ** it increments
23ff0 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   an undocumented
24000 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
24010 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
24020 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67  g..**.** Sorting
24030 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64   is accomplished
24040 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f   by writing reco
24050 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69  rds into a sorti
24060 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65  ng index,.** the
24070 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74  n rewinding that
24080 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69   index and playi
24090 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20  ng it back from 
240a0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20  beginning to.** 
240b0 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65  end.  We use the
240c0 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20   OP_Sort opcode 
240d0 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65  instead of OP_Re
240e0 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a  wind to do the.*
240f0 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74  * rewinding so t
24100 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hat the global v
24110 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  ariable will be 
24120 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a  incremented and.
24130 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ** regression te
24140 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e  sts can determin
24150 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
24160 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69   the optimizer i
24170 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f  s.** correctly o
24180 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f  ptimizing out so
24190 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rts..*/.case OP_
241a0 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f  SorterSort:    /
241b0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
241c0 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
241d0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
241e0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
241f0 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
24200 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
24210 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
24220 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
24230 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
24240 54 53 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b  TSTATUS_SORT-1]+
24250 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
24260 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
24270 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
24280 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
24290 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
242a0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
242b0 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
242c0 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
242d0 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
242e0 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
242f0 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
24300 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
24310 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
24320 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
24330 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
24340 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a  and P2>0, then j
24350 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
24360 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20  to P2..** If P2 
24370 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74  is 0 or if the t
24380 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
24390 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
243a0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
243b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
243c0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
243d0 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20  e OP_Rewind: {  
243e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
243f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
24400 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
24410 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
24420 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
24430 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
24440 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
24450 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24460 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24470 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
24480 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72  ssert( pC->isSor
24490 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  ter==(pOp->opcod
244a0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  e==OP_SorterSort
244b0 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a  ) );.  res = 1;.
244c0 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
244d0 43 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  C) ){.    rc = s
244e0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
244f0 52 65 77 69 6e 64 28 64 62 2c 20 70 43 2c 20 26  Rewind(db, pC, &
24500 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  res);.  }else{. 
24510 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70     pCrsr = pC->p
24520 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65  Cursor;.    asse
24530 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
24540 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
24550 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
24560 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74  res);.    pC->at
24570 46 69 72 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f  First = res==0 ?
24580 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  1:0;.    pC->def
24590 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
245a0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
245b0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
245c0 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  LE;.    pC->rowi
245d0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
245e0 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
245f0 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
24600 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
24610 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
24620 20 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b   );.  if( res ){
24630 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
24640 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
24650 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
24660 3a 20 4e 65 78 74 20 50 31 20 50 32 20 2a 20 50  : Next P1 P2 * P
24670 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e  4 P5.**.** Advan
24680 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  ce cursor P1 so 
24690 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
246a0 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64  o the next key/d
246b0 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
246c0 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
246d0 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
246e0 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c   no more key/val
246f0 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
24700 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
24710 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
24720 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
24730 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61   if the cursor a
24740 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65  dvance was succe
24750 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
24760 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
24770 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
24780 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
24790 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
247a0 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
247b0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  le..**.** P4 is 
247c0 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
247d0 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
247e0 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
247f0 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
24800 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e  ite3BtreeNext().
24810 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
24820 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65  positive and the
24830 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
24840 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74  then event count
24850 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d  er.** number P5-
24860 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  1 in the prepare
24870 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69  d statement is i
24880 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a  ncremented..**.*
24890 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76  * See also: Prev
248a0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
248b0 72 65 76 20 50 31 20 50 32 20 2a 20 2a 20 50 35  rev P1 P2 * * P5
248c0 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63  .**.** Back up c
248d0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
248e0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
248f0 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64  e previous key/d
24900 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
24910 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
24920 78 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  x.  If there is 
24930 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f  no previous key/
24940 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
24950 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
24960 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
24970 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
24980 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
24990 72 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63  r backup was suc
249a0 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
249b0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
249c0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  P2..**.** The P1
249d0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
249e0 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
249f0 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
24a00 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  able..**.** P4 i
24a10 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
24a20 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
24a30 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
24a40 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
24a50 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
24a60 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ous()..**.** If 
24a70 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
24a80 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
24a90 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
24aa0 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
24ab0 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
24ac0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
24ad0 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
24ae0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
24af0 74 65 72 4e 65 78 74 3a 20 20 20 20 2f 2a 20 6a  terNext:    /* j
24b00 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  ump */.case OP_P
24b10 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  rev:          /*
24b20 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
24b30 5f 4e 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20  _Next: {        
24b40 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
24b50 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
24b60 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
24b70 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
24b80 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
24b90 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
24ba0 20 70 4f 70 2d 3e 70 35 3c 3d 41 72 72 61 79 53   pOp->p5<=ArrayS
24bb0 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29  ize(p->aCounter)
24bc0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
24bd0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
24be0 69 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20 20  if( pC==0 ){.   
24bf0 20 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65 20   break;  /* See 
24c00 74 69 63 6b 65 74 20 23 32 32 37 33 20 2a 2f 0a  ticket #2273 */.
24c10 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43    }.  assert( pC
24c20 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70 4f 70  ->isSorter==(pOp
24c30 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
24c40 74 65 72 4e 65 78 74 29 20 29 3b 0a 20 20 69 66  terNext) );.  if
24c50 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
24c60 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
24c70 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
24c80 72 74 65 72 4e 65 78 74 20 29 3b 0a 20 20 20 20  rterNext );.    
24c90 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
24ca0 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70  SorterNext(db, p
24cb0 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73  C, &res);.  }els
24cc0 65 7b 0a 20 20 20 20 72 65 73 20 3d 20 31 3b 0a  e{.    res = 1;.
24cd0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
24ce0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
24cf0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
24d00 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a   pC->pCursor );.
24d10 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
24d20 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74  >opcode!=OP_Next
24d30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
24d40 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
24d50 65 65 4e 65 78 74 20 29 3b 0a 20 20 20 20 61 73  eeNext );.    as
24d60 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
24d70 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f  e!=OP_Prev || pO
24d80 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
24d90 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
24da0 69 6f 75 73 20 29 3b 0a 20 20 20 20 72 63 20 3d  ious );.    rc =
24db0 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
24dc0 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
24dd0 72 65 73 29 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e  res);.  }.  pC->
24de0 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
24df0 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  s;.  pC->cacheSt
24e00 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
24e10 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  LE;.  if( res==0
24e20 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
24e30 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 69 66  ->p2 - 1;.    if
24e40 28 20 70 4f 70 2d 3e 70 35 20 29 20 70 2d 3e 61  ( pOp->p5 ) p->a
24e50 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 2d  Counter[pOp->p5-
24e60 31 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c  1]++;.#ifdef SQL
24e70 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c  ITE_TEST.    sql
24e80 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
24e90 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a  t++;.#endif.  }.
24ea0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
24eb0 69 64 20 3d 20 30 3b 0a 20 20 67 6f 74 6f 20 63  id = 0;.  goto c
24ec0 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
24ed0 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
24ee0 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
24ef0 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
24f00 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64  Register P2 hold
24f10 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b  s an SQL index k
24f20 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  ey made using th
24f30 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20  e.** MakeRecord 
24f40 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54  instructions.  T
24f50 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65  his opcode write
24f60 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e  s that key.** in
24f70 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e  to the index P1.
24f80 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65    Data for the e
24f90 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a  ntry is nil..**.
24fa0 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20  ** P3 is a flag 
24fb0 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20  that provides a 
24fc0 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72  hint to the b-tr
24fd0 65 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68  ee layer that th
24fe0 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20  is.** insert is 
24ff0 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20  likely to be an 
25000 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  append..**.** Th
25010 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
25020 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e  nly works for in
25030 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69  dices.  The equi
25040 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
25050 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73  on.** for tables
25060 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a   is OP_Insert..*
25070 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
25080 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a  Insert:       /*
25090 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in2 */.case OP_
250a0 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
250b0 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
250c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
250d0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
250e0 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  r;.  int nKey;. 
250f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
25100 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  y;..  assert( pO
25110 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
25120 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
25130 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
25140 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
25150 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
25160 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53   assert( pC->isS
25170 6f 72 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63  orter==(pOp->opc
25180 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e  ode==OP_SorterIn
25190 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20  sert) );.  pIn2 
251a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
251b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32  ;.  assert( pIn2
251c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
251d0 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  ob );.  pCrsr = 
251e0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
251f0 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21  f( ALWAYS(pCrsr!
25200 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  =0) ){.    asser
25210 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
25220 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78  0 );.    rc = Ex
25230 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a  pandBlob(pIn2);.
25240 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
25250 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69  TE_OK ){.      i
25260 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
25270 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
25280 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
25290 72 57 72 69 74 65 28 64 62 2c 20 70 43 2c 20 70  rWrite(db, pC, p
252a0 49 6e 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  In2);.      }els
252b0 65 7b 0a 20 20 20 20 20 20 20 20 6e 4b 65 79 20  e{.        nKey 
252c0 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20  = pIn2->n;.     
252d0 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     zKey = pIn2->
252e0 7a 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  z;.        rc = 
252f0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
25300 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20  rt(pCrsr, zKey, 
25310 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20  nKey, "", 0, 0, 
25320 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20  pOp->p3, .      
25330 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20        ((pOp->p5 
25340 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
25350 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
25360 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20  ekResult : 0).  
25370 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20            );.   
25380 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
25390 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
253a0 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43  =0 );.        pC
253b0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
253c0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
253d0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
253e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
253f0 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20  code: IdxDelete 
25400 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
25410 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
25420 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
25430 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
25440 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
25450 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
25460 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
25470 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
25480 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
25490 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
254a0 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
254b0 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
254c0 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
254d0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
254e0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
254f0 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
25500 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
25510 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
25520 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25530 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
25540 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
25550 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
25560 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25570 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25580 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
25590 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
255a0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
255b0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
255c0 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c  Cursor;.  if( AL
255d0 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29  WAYS(pCrsr!=0) )
255e0 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  {.    r.pKeyInfo
255f0 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
25600 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
25610 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20  (u16)pOp->p3;.  
25620 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20    r.flags = 0;. 
25630 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65     r.aMem = &aMe
25640 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64  m[pOp->p2];.#ifd
25650 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
25660 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72      { int i; for
25670 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
25680 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
25690 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
256a0 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
256b0 66 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  f.    rc = sqlit
256c0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
256d0 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c  acked(pCrsr, &r,
256e0 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
256f0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
25700 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b  _OK && res==0 ){
25710 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
25720 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
25730 43 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  Crsr);.    }.   
25740 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
25750 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
25760 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
25770 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
25780 41 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ALE;.  }.  break
25790 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
257a0 49 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a  IdxRowid P1 P2 *
257b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
257c0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
257d0 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
257e0 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
257f0 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
25800 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
25810 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
25820 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
25830 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
25840 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
25850 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
25860 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
25870 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
25880 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
25890 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
258a0 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
258b0 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
258c0 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20  OP_IdxRowid: {  
258d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
258e0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
258f0 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
25900 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  rsr;.  VdbeCurso
25910 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77  r *pC;.  i64 row
25920 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  id;..  assert( p
25930 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
25940 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
25950 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
25960 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
25970 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
25980 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
25990 75 72 73 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 66  ursor;.  pOut->f
259a0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
259b0 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
259c0 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72  rsr!=0) ){.    r
259d0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
259e0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
259f0 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 72  .    if( NEVER(r
25a00 63 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  c) ) goto abort_
25a10 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
25a20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
25a30 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
25a40 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
25a50 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
25a60 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 6e 75  .    if( !pC->nu
25a70 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 72  llRow ){.      r
25a80 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
25a90 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73  dxRowid(db, pCrs
25aa0 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  r, &rowid);.    
25ab0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
25ac0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
25ad0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
25ae0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
25af0 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20        pOut->u.i 
25b00 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70  = rowid;.      p
25b10 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
25b20 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _Int;.    }.  }.
25b30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
25b40 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20  pcode: IdxGE P1 
25b50 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
25b60 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
25b70 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
25b80 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
25b90 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
25ba0 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
25bb0 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20  mits the ROWID. 
25bc0 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
25bd0 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20  y value against 
25be0 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68  the index .** th
25bf0 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
25c00 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
25c10 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57  ignoring the ROW
25c20 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
25c30 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
25c40 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
25c50 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
25c60 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
25c70 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
25c80 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
25c90 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
25ca0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
25cb0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
25cc0 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
25cd0 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20  n-zero then the 
25ce0 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63  key value is inc
25cf0 72 65 61 73 65 64 20 62 79 20 61 6e 20 65 70 73  reased by an eps
25d00 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72 20 74  ilon .** prior t
25d10 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
25d20 2e 20 20 54 68 69 73 20 6d 61 6b 65 20 74 68 65  .  This make the
25d30 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b   opcode work lik
25d40 65 20 49 64 78 47 54 20 65 78 63 65 70 74 0a 2a  e IdxGT except.*
25d50 2a 20 74 68 61 74 20 69 66 20 74 68 65 20 6b 65  * that if the ke
25d60 79 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  y from register 
25d70 50 33 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  P3 is a prefix o
25d80 66 20 74 68 65 20 6b 65 79 20 69 6e 20 74 68 65  f the key in the
25d90 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 20   cursor,.** the 
25da0 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 20  result is false 
25db0 77 68 65 72 65 61 73 20 69 74 20 77 6f 75 6c 64  whereas it would
25dc0 20 62 65 20 74 72 75 65 20 77 69 74 68 20 49 64   be true with Id
25dd0 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  xGT..*/./* Opcod
25de0 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20 50  e: IdxLT P1 P2 P
25df0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
25e00 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
25e10 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
25e20 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
25e30 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
25e40 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
25e50 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d   the ROWID.  Com
25e60 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
25e70 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
25e80 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
25e90 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
25ea0 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
25eb0 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f  ring the ROWID o
25ec0 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
25ed0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
25ee0 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
25ef0 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
25f00 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
25f10 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72   to P2..** Other
25f20 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
25f30 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
25f40 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
25f50 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65   If P5 is non-ze
25f60 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20  ro then the key 
25f70 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73  value is increas
25f80 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e  ed by an epsilon
25f90 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20 74 68   prior .** to th
25fa0 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54  e comparison.  T
25fb0 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20 6f 70  his makes the op
25fc0 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49  code work like I
25fd0 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  dxLE..*/.case OP
25fe0 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20  _IdxLT:         
25ff0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
26000 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20 20 20   OP_IdxGE: {    
26010 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
26020 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
26030 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e  .  int res;.  Un
26040 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
26050 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26060 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
26070 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
26080 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
26090 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
260a0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
260b0 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65  sert( pC->isOrde
260c0 72 65 64 20 29 3b 0a 20 20 69 66 28 20 41 4c 57  red );.  if( ALW
260d0 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21  AYS(pC->pCursor!
260e0 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  =0) ){.    asser
260f0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
26100 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
26110 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
26120 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
26130 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
26140 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
26150 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 72 2e 70  INT32 );.    r.p
26160 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
26170 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
26180 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
26190 3e 70 34 2e 69 3b 0a 20 20 20 20 69 66 28 20 70  >p4.i;.    if( p
261a0 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
261b0 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
261c0 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55 4e 50  ED_INCRKEY | UNP
261d0 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54  ACKED_PREFIX_MAT
261e0 43 48 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  CH;.    }else{. 
261f0 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
26200 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d  NPACKED_PREFIX_M
26210 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ATCH;.    }.    
26220 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
26230 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
26240 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
26250 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
26260 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
26270 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
26280 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
26290 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
262a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
262b0 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65  dbeIdxKeyCompare
262c0 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a  (pC, &r, &res);.
262d0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
262e0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 7b  ode==OP_IdxLT ){
262f0 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d 72 65  .      res = -re
26300 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  s;.    }else{.  
26310 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
26320 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
26330 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73 2b 2b  E );.      res++
26340 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
26350 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 70  res>0 ){.      p
26360 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20  c = pOp->p2 - 1 
26370 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
26380 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26390 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32  e: Destroy P1 P2
263a0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65   P3 * *.**.** De
263b0 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64  lete an entire d
263c0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
263d0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
263e0 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61  t page in the da
263f0 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69  tabase.** file i
26400 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a  s given by P1..*
26410 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62  *.** The table b
26420 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69  eing destroyed i
26430 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
26440 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
26450 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d  3==0.  If.** P3=
26460 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
26470 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
26480 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
26490 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
264a0 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
264b0 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
264c0 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
264d0 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
264e0 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55  BLE..**.** If AU
264f0 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62  TOVACUUM is enab
26500 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70  led then it is p
26510 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
26520 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a  ther root page.*
26530 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64  * might be moved
26540 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20   into the newly 
26550 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67  deleted root pag
26560 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  e in order to ke
26570 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70  ep all.** root p
26580 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20  ages contiguous 
26590 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
265a0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
265b0 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a  .  The former.**
265c0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
265d0 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76  ot page that mov
265e0 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62  ed - its value b
265f0 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f  efore the move o
26600 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20  ccurred -.** is 
26610 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
26620 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61  er P2.  If no pa
26630 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20  ge .** movement 
26640 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65  was required (be
26650 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
26660 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61  being dropped wa
26670 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68  s already .** th
26680 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68  e last one in th
26690 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e  e database) then
266a0 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65   a zero is store
266b0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
266c0 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  ..** If AUTOVACU
266d0 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74  UM is disabled t
266e0 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74  hen a zero is st
266f0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
26700 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
26710 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61  lso: Clear.*/.ca
26720 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b  se OP_Destroy: {
26730 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
26740 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
26750 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69   iMoved;.  int i
26760 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56 64  Cnt;.  Vdbe *pVd
26770 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a  be;.  int iDb;..
26780 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
26790 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 23 69 66 6e  dOnly==0 );.#ifn
267a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
267b0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
267c0 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70  Cnt = 0;.  for(p
267d0 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20  Vdbe=db->pVdbe; 
267e0 70 56 64 62 65 3b 20 70 56 64 62 65 20 3d 20 70  pVdbe; pVdbe = p
267f0 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  Vdbe->pNext){.  
26800 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d 61 67    if( pVdbe->mag
26810 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
26820 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 62 49 73  UN && pVdbe->bIs
26830 52 65 61 64 65 72 20 0a 20 20 20 20 20 26 26 20  Reader .     && 
26840 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74  pVdbe->inVtabMet
26850 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e  hod<2 && pVdbe->
26860 70 63 3e 3d 30 20 0a 20 20 20 20 29 7b 0a 20 20  pc>=0 .    ){.  
26870 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20      iCnt++;.    
26880 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43  }.  }.#else.  iC
26890 6e 74 20 3d 20 64 62 2d 3e 6e 56 64 62 65 52 65  nt = db->nVdbeRe
268a0 61 64 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75  ad;.#endif.  pOu
268b0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
268c0 75 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e  ull;.  if( iCnt>
268d0 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  1 ){.    rc = SQ
268e0 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
268f0 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
26900 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65  = OE_Abort;.  }e
26910 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70  lse{.    iDb = p
26920 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65  Op->p3;.    asse
26930 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20  rt( iCnt==1 );. 
26940 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62     assert( (p->b
26950 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
26960 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21  bMask)1)<<iDb))!
26970 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =0 );.    rc = s
26980 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
26990 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
269a0 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
269b0 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f  &iMoved);.    pO
269c0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
269d0 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
269e0 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66  .i = iMoved;.#if
269f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26a00 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20  _AUTOVACUUM.    
26a10 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
26a20 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29  K && iMoved!=0 )
26a30 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
26a40 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c  ootPageMoved(db,
26a50 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f   iDb, iMoved, pO
26a60 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a  p->p1);.      /*
26a70 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20   All OP_Destroy 
26a80 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72  operations occur
26a90 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72   on the same btr
26aa0 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  ee */.      asse
26ab0 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  rt( resetSchemaO
26ac0 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73  nFault==0 || res
26ad0 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
26ae0 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20  =iDb+1 );.      
26af0 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
26b00 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20  lt = iDb+1;.    
26b10 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
26b20 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
26b30 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20  de: Clear P1 P2 
26b40 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  P3.**.** Delete 
26b50 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  all contents of 
26b60 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
26b70 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
26b80 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69  e root page.** i
26b90 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
26ba0 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
26bb0 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65  P1.  But, unlike
26bc0 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74   Destroy, do not
26bd0 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74  .** remove the t
26be0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72  able or index fr
26bf0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
26c00 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  file..**.** The 
26c10 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
26c20 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  r is in the main
26c30 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
26c40 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P2==0.  If.** 
26c50 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P2==1 then the t
26c60 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
26c70 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
26c80 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
26c90 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
26ca0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
26cb0 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
26cc0 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
26cd0 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
26ce0 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   the P3 value is
26cf0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
26d00 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72  the table referr
26d10 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e  ed to must be an
26d20 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65  .** intkey table
26d30 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20   (an SQL table, 
26d40 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49  not an index). I
26d50 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
26d60 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63  row change .** c
26d70 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
26d80 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
26d90 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
26da0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
26db0 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20  ared. .** If P3 
26dc0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
26dd0 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76  zero, then the v
26de0 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72  alue stored in r
26df0 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a  egister P3 is.**
26e00 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65   also incremente
26e10 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
26e20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
26e30 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
26e40 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
26e50 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63  so: Destroy.*/.c
26e60 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a  ase OP_Clear: {.
26e70 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20    int nChange;. 
26e80 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  .  nChange = 0;.
26e90 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
26ea0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73  dOnly==0 );.  as
26eb0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
26ec0 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
26ed0 29 31 29 3c 3c 70 4f 70 2d 3e 70 32 29 29 21 3d  )1)<<pOp->p2))!=
26ee0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
26ef0 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
26f00 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44  le(.      db->aD
26f10 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20  b[pOp->p2].pBt, 
26f20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70  pOp->p1, (pOp->p
26f30 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30  3 ? &nChange : 0
26f40 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  ).  );.  if( pOp
26f50 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  ->p3 ){.    p->n
26f60 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67  Change += nChang
26f70 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  e;.    if( pOp->
26f80 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73  p3>0 ){.      as
26f90 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
26fa0 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
26fb0 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
26fc0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
26fd0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
26fe0 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70       aMem[pOp->p
26ff0 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67  3].u.i += nChang
27000 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  e;.    }.  }.  b
27010 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
27020 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20  de: CreateTable 
27030 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
27040 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
27050 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61   table in the ma
27060 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
27070 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
27080 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
27090 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
270a0 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
270b0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
270c0 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
270d0 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
270e0 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
270f0 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
27100 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a  .** register P2.
27110 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72  **.** The differ
27120 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 74  ence between a t
27130 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65  able and an inde
27140 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61  x is this:  A ta
27150 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65  ble must.** have
27160 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65   a 4-byte intege
27170 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61  r key and can ha
27180 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61 74  ve arbitrary dat
27190 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20  a.  An index.** 
271a0 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79  has an arbitrary
271b0 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61   key but no data
271c0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
271d0 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f  : CreateIndex.*/
271e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
271f0 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20  teIndex P1 P2 * 
27200 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  * *.**.** Alloca
27210 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69  te a new index i
27220 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
27230 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
27240 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
27250 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
27260 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
27270 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
27280 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
27290 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
272a0 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
272b0 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
272c0 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
272d0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  ster P2..**.** S
272e0 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
272f0 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62   on OP_CreateTab
27300 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
27310 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
27320 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
27330 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20 20  Index:          
27340 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
27350 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  ease */.case OP_
27360 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20  CreateTable: {  
27370 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
27380 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
27390 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20  int pgno;.  int 
273a0 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62  flags;.  Db *pDb
273b0 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20  ;..  pgno = 0;. 
273c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
273d0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
273e0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
273f0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
27400 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
27410 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  )<<pOp->p1))!=0 
27420 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
27430 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
27440 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
27450 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
27460 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
27470 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
27480 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54  code==OP_CreateT
27490 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66  able ){.    /* f
274a0 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54  lags = BTREE_INT
274b0 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67  KEY; */.    flag
274c0 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
274d0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66  ;.  }else{.    f
274e0 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f  lags = BTREE_BLO
274f0 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  BKEY;.  }.  rc =
27500 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
27510 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42  ateTable(pDb->pB
27520 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29  t, &pgno, flags)
27530 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
27540 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pgno;.  break;.}
27550 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
27560 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20  seSchema P1 * * 
27570 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20  P4 *.**.** Read 
27580 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e  and parse all en
27590 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53  tries from the S
275a0 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62  QLITE_MASTER tab
275b0 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  le of database P
275c0 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20  1.** that match 
275d0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
275e0 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4. .**.** This
275f0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
27600 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72  the parser to cr
27610 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75  eate a new virtu
27620 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74  al machine,.** t
27630 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77  hen runs the new
27640 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
27650 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20  .  It is thus a 
27660 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64  re-entrant opcod
27670 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  e..*/.case OP_Pa
27680 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69  rseSchema: {.  i
27690 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20  nt iDb;.  const 
276a0 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20  char *zMaster;. 
276b0 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49   char *zSql;.  I
276c0 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61  nitData initData
276d0 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70  ;..  /* Any prep
276e0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74  ared statement t
276f0 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73  hat invokes this
27700 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c   opcode will hol
27710 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f  d mutexes.  ** o
27720 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e 20 20  n every btree.  
27730 54 68 69 73 20 69 73 20 61 20 70 72 65 72 65 71  This is a prereq
27740 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b  uisite for invok
27750 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65  ing .  ** sqlite
27760 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e  3InitCallback().
27770 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  .  */.#ifdef SQL
27780 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28  ITE_DEBUG.  for(
27790 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e  iDb=0; iDb<db->n
277a0 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20  Db; iDb++){.    
277b0 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c  assert( iDb==1 |
277c0 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f  | sqlite3BtreeHo
277d0 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62  ldsMutex(db->aDb
277e0 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20  [iDb].pBt) );.  
277f0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20  }.#endif..  iDb 
27800 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
27810 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
27820 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
27830 61 73 73 65 72 74 28 20 44 62 48 61 73 50 72 6f  assert( DbHasPro
27840 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44  perty(db, iDb, D
27850 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20  B_SchemaLoaded) 
27860 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20  );.  /* Used to 
27870 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c  be a conditional
27880 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65   */ {.    zMaste
27890 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  r = SCHEMA_TABLE
278a0 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44  (iDb);.    initD
278b0 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20  ata.db = db;.   
278c0 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20   initData.iDb = 
278d0 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69  pOp->p1;.    ini
278e0 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d  tData.pzErrMsg =
278f0 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20   &p->zErrMsg;.  
27900 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
27910 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20  MPrintf(db,.    
27920 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
27930 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46   rootpage, sql F
27940 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52  ROM '%q'.%s WHER
27950 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f  E %s ORDER BY ro
27960 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d  wid",.       db-
27970 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c  >aDb[iDb].zName,
27980 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70   zMaster, pOp->p
27990 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53  4.z);.    if( zS
279a0 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  ql==0 ){.      r
279b0 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
279c0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
279d0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69     assert( db->i
279e0 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20  nit.busy==0 );. 
279f0 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
27a00 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e  sy = 1;.      in
27a10 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49  itData.rc = SQLI
27a20 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73  TE_OK;.      ass
27a30 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
27a40 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20  Failed );.      
27a50 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
27a60 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69  c(db, zSql, sqli
27a70 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c  te3InitCallback,
27a80 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a   &initData, 0);.
27a90 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
27aa0 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69  LITE_OK ) rc = i
27ab0 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20  nitData.rc;.    
27ac0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
27ad0 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  db, zSql);.     
27ae0 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
27af0 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
27b00 69 66 28 20 72 63 20 29 20 73 71 6c 69 74 65 33  if( rc ) sqlite3
27b10 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
27b20 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
27b30 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
27b40 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67  E_NOMEM ){.    g
27b50 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
27b60 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69    break;  .}..#i
27b70 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
27b80 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a  E_OMIT_ANALYZE).
27b90 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41  /* Opcode: LoadA
27ba0 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a  nalysis P1 * * *
27bb0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68   *.**.** Read th
27bc0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
27bd0 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  able for databas
27be0 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68  e P1 and load th
27bf0 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20  e content.** of 
27c00 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20  that table into 
27c10 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64  the internal ind
27c20 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ex hash table.  
27c30 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a  This will cause.
27c40 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  ** the analysis 
27c50 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
27c60 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75  preparing all su
27c70 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73  bsequent queries
27c80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61  ..*/.case OP_Loa
27c90 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61  dAnalysis: {.  a
27ca0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
27cb0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
27cc0 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73  >nDb );.  rc = s
27cd0 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
27ce0 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ad(db, pOp->p1);
27cf0 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
27d00 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
27d10 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
27d20 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  LYZE) */../* Opc
27d30 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
27d40 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
27d50 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
27d60 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
27d70 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
27d80 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
27d90 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
27da0 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
27db0 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
27dc0 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
27dd0 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
27de0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
27df0 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
27e00 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
27e10 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
27e20 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
27e30 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
27e40 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
27e50 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  able: {.  sqlite
27e60 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
27e70 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70  Table(db, pOp->p
27e80 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
27e90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
27ea0 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20  code: DropIndex 
27eb0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
27ec0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
27ed0 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
27ee0 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
27ef0 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
27f00 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d  ** the index nam
27f10 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
27f20 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
27f30 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69  alled after an i
27f40 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70  ndex.** is dropp
27f50 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ed in order to k
27f60 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
27f70 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
27f80 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
27f90 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
27fa0 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
27fb0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
27fc0 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69  pIndex: {.  sqli
27fd0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
27fe0 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d  teIndex(db, pOp-
27ff0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
28000 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
28010 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67  Opcode: DropTrig
28020 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ger P1 * * P4 *.
28030 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
28040 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
28050 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
28060 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
28070 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67  ibe.** the trigg
28080 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  er named P4 in d
28090 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
280a0 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
280b0 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69  r a trigger.** i
280c0 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64  s dropped in ord
280d0 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
280e0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
280f0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
28100 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
28110 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
28120 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
28130 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a   OP_DropTrigger:
28140 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
28150 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
28160 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  er(db, pOp->p1, 
28170 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
28180 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
28190 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
281a0 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20  EGRITY_CHECK./* 
281b0 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74  Opcode: Integrit
281c0 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50  yCk P1 P2 P3 * P
281d0 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e  5.**.** Do an an
281e0 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75  alysis of the cu
281f0 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74  rrently open dat
28200 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e  abase.  Store in
28210 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
28220 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65  the text of an e
28230 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73  rror message des
28240 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62  cribing any prob
28250 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70  lems..** If no p
28260 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e  roblems are foun
28270 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  d, store a NULL 
28280 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
28290 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
282a0 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
282b0 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
282c0 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72  r of allowed err
282d0 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20  ors..** At most 
282e0 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77  reg(P3) errors w
282f0 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e  ill be reported.
28300 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
28310 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73  ds, the analysis
28320 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61   stops as soon a
28330 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73  s reg(P1) errors
28340 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20   are .** seen.  
28350 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74  Reg(P1) is updat
28360 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62  ed with the numb
28370 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  er of errors rem
28380 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  aining..**.** Th
28390 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
283a0 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  ers of all table
283b0 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
283c0 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a  e are integer.**
283d0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50   stored in reg(P
283e0 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72  1), reg(P1+1), r
283f0 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20  eg(P1+2), ....  
28400 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62  There are P2 tab
28410 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a  les.** total..**
28420 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
28430 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b   zero, the check
28440 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20   is done on the 
28450 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
28460 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20  se.** file, not 
28470 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
28480 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
28490 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
284a0 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
284b0 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  he integrity_che
284c0 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61  ck pragma..*/.ca
284d0 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43  se OP_IntegrityC
284e0 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74  k: {.  int nRoot
284f0 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
28500 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68   of tables to ch
28510 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66  eck.  (Number of
28520 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f   root pages.) */
28530 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20  .  int *aRoot;  
28540 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72     /* Array of r
28550 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ootpage numbers 
28560 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65  for tables to be
28570 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e   checked */.  in
28580 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  t j;          /*
28590 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
285a0 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
285b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
285c0 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20  errors reported 
285d0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20  */.  char *z;   
285e0 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
285f0 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74  the error report
28600 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72   */.  Mem *pnErr
28610 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  ;     /* Registe
28620 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20  r keeping track 
28630 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
28640 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  ing */..  assert
28650 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
28660 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d  ;.  nRoot = pOp-
28670 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
28680 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f  Root>0 );.  aRoo
28690 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  t = sqlite3DbMal
286a0 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f  locRaw(db, sizeo
286b0 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29  f(int)*(nRoot+1)
286c0 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d   );.  if( aRoot=
286d0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
286e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
286f0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
28700 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
28710 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  nErr = &aMem[pOp
28720 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
28730 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
28740 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
28750 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
28760 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
28770 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
28780 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
28790 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66  em[pOp->p1];.  f
287a0 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b  or(j=0; j<nRoot;
287b0 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74   j++){.    aRoot
287c0 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74  [j] = (int)sqlit
287d0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26  e3VdbeIntValue(&
287e0 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20  pIn1[j]);.  }.  
287f0 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20  aRoot[j] = 0;.  
28800 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
28810 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
28820 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
28830 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
28840 31 29 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30  1)<<pOp->p5))!=0
28850 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65   );.  z = sqlite
28860 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43  3BtreeIntegrityC
28870 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70  heck(db->aDb[pOp
28880 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74  ->p5].pBt, aRoot
28890 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20  , nRoot,.       
288a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288b0 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70            (int)p
288c0 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72  nErr->u.i, &nErr
288d0 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
288e0 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20  ee(db, aRoot);. 
288f0 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e   pnErr->u.i -= n
28900 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Err;.  sqlite3Vd
28910 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
28920 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d  1);.  if( nErr==
28930 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
28940 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65   z==0 );.  }else
28950 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20   if( z==0 ){.   
28960 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
28970 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
28980 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
28990 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c  pIn1, z, -1, SQL
289a0 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65  ITE_UTF8, sqlite
289b0 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55  3_free);.  }.  U
289c0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
289d0 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ZE(pIn1);.  sqli
289e0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
289f0 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f  oding(pIn1, enco
28a00 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
28a10 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
28a20 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
28a30 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f  Y_CHECK */../* O
28a40 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64  pcode: RowSetAdd
28a50 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
28a60 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
28a70 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
28a80 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
28a90 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69  into a boolean i
28aa0 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ndex.** held in 
28ab0 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
28ac0 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
28ad0 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
28ae0 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
28af0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
28b00 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
28b10 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49  in1, in2 */.  pI
28b20 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
28b30 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
28b40 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
28b50 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
28b60 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
28b70 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  =0 );.  if( (pIn
28b80 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
28b90 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
28ba0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
28bb0 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
28bc0 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
28bd0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
28be0 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
28bf0 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  mem;.  }.  sqlit
28c00 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
28c10 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
28c20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn2->u.i);.  br
28c30 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28c40 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31  e: RowSetRead P1
28c50 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
28c60 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61   Extract the sma
28c70 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d  llest value from
28c80 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
28c90 31 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76  1 and put that v
28ca0 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  alue into.** reg
28cb0 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69  ister P3.  Or, i
28cc0 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  f boolean index 
28cd0 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  P1 is initially 
28ce0 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a  empty, leave P3.
28cf0 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  ** unchanged and
28d00 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
28d10 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  tion P2..*/.case
28d20 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20   OP_RowSetRead: 
28d30 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
28d40 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in1, out3 */.  
28d50 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31  i64 val;..  pIn1
28d60 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
28d70 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
28d80 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
28d90 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71  et)==0 .   || sq
28da0 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
28db0 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
28dc0 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20   &val)==0.  ){. 
28dd0 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61     /* The boolea
28de0 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  n index is empty
28df0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
28e00 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
28e10 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f  n1);.    pc = pO
28e20 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p2 - 1;.  }el
28e30 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c  se{.    /* A val
28e40 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72  ue was pulled fr
28e50 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  om the index */.
28e60 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
28e70 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
28e80 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b  [pOp->p3], val);
28e90 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63  .  }.  goto chec
28ea0 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
28eb0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
28ec0 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20  owSetTest P1 P2 
28ed0 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69  P3 P4.**.** Regi
28ee0 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d  ster P3 is assum
28ef0 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d  ed to hold a 64-
28f00 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
28f10 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50  e. If register P
28f20 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20  1.** contains a 
28f30 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e  RowSet object an
28f40 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62  d that RowSet ob
28f50 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  ject contains.**
28f60 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20   the value held 
28f70 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72  in P3, jump to r
28f80 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65  egister P2. Othe
28f90 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68  rwise, insert th
28fa0 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20  e.** integer in 
28fb0 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53  P3 into the RowS
28fc0 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  et and continue 
28fd0 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78  on to the.** nex
28fe0 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  t opcode..**.** 
28ff0 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  The RowSet objec
29000 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66  t is optimized f
29010 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72  or the case wher
29020 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74  e successive set
29030 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  s.** of integers
29040 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74  , where each set
29050 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70   contains no dup
29060 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65  licates. Each se
29070 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69  t.** of values i
29080 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
29090 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75  a unique P4 valu
290a0 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74  e. The first set
290b0 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34  .** must have P4
290c0 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73  ==0, the final s
290d0 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75  et P4=-1.  P4 mu
290e0 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20  st be either -1 
290f0 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69  or.** non-negati
29100 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67  ve.  For non-neg
29110 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20  ative values of 
29120 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65  P4 only the lowe
29130 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20  r 4.** bits are 
29140 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a  significant..**.
29150 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f  ** This allows o
29160 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61  ptimizations: (a
29170 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65  ) when P4==0 the
29180 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
29190 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77   test.** the row
291a0 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50  set object for P
291b0 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72  3, as it is guar
291c0 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f  anteed not to co
291d0 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29  ntain it,.** (b)
291e0 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65   when P4==-1 the
291f0 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
29200 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75   insert the valu
29210 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a  e, as it will.**
29220 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64   never be tested
29230 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68   for, and (c) wh
29240 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  en a value that 
29250 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  is part of set X
29260 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c   is.** inserted,
29270 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
29280 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73  d to search to s
29290 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76  ee if the same v
292a0 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76  alue was.** prev
292b0 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20  iously inserted 
292c0 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  as part of set X
292d0 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73   (only if it was
292e0 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69   previously.** i
292f0 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
29300 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65  of some other se
29310 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  t)..*/.case OP_R
29320 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20  owSetTest: {    
29330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29340 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69   /* jump, in1, i
29350 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74  n3 */.  int iSet
29360 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a  ;.  int exists;.
29370 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
29380 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
29390 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
293a0 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d  ];.  iSet = pOp-
293b0 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  >p4.i;.  assert(
293c0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn3->flags&MEM
293d0 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  _Int );..  /* If
293e0 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69   there is anythi
293f0 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  ng other than a 
29400 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e  rowset object in
29410 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c   memory cell P1,
29420 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20  .  ** delete it 
29430 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  now and initiali
29440 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d  ze P1 with an em
29450 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a  pty rowset.  */.
29460 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
29470 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
29480 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
29490 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
294a0 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
294b0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
294c0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
294d0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
294e0 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
294f0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
29500 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
29510 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65   iSet==-1 || iSe
29520 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53  t>=0 );.  if( iS
29530 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73  et ){.    exists
29540 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74   = sqlite3RowSet
29550 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Test(pIn1->u.pRo
29560 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20  wSet, .         
29570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29580 20 20 20 20 20 20 28 75 38 29 28 69 53 65 74 3e        (u8)(iSet>
29590 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78 66 20  =0 ? iSet & 0xf 
295a0 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20  : 0xff),.       
295b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295c0 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e          pIn3->u.
295d0 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73  i);.    if( exis
295e0 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ts ){.      pc =
295f0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
29600 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
29610 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
29620 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
29630 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
29640 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
29650 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20  In3->u.i);.  }. 
29660 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
29670 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29680 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f  TRIGGER../* Opco
29690 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50  de: Program P1 P
296a0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
296b0 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67  Execute the trig
296c0 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73  ger program pass
296d0 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50  ed as P4 (type P
296e0 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a  4_SUBPROGRAM). .
296f0 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e  **.** P1 contain
29700 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
29710 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
29720 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
29730 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20  he first memory 
29740 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61  .** cell in an a
29750 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75  rray of values u
29760 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73  sed as arguments
29770 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67   to the sub-prog
29780 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74  ram. P2 .** cont
29790 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
297a0 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74   to jump to if t
297b0 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  he sub-program t
297c0 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20  hrows an IGNORE 
297d0 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73  .** exception us
297e0 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20  ing the RAISE() 
297f0 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74  function. Regist
29800 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
29810 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f  he address .** o
29820 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  f a memory cell 
29830 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72  in this (the par
29840 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20  ent) VM that is 
29850 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65  used to allocate
29860 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
29870 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
29880 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74  sub-vdbe at runt
29890 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ime..**.** P4 is
298a0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
298b0 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20  e VM containing 
298c0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
298d0 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ram..*/.case OP_
298e0 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20  Program: {      
298f0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
29900 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
29910 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
29920 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73   of memory regis
29930 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f  ters for sub-pro
29940 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  gram */.  int nB
29950 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
29960 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75    /* Bytes of ru
29970 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75  ntime space requ
29980 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f  ired for sub-pro
29990 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  gram */.  Mem *p
299a0 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Rt;             
299b0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
299c0 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d   allocate runtim
299d0 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d  e space */.  Mem
299e0 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
299f0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
29a00 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
29a10 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a  memory cells */.
29a20 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20    Mem *pEnd;    
29a30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
29a40 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  t memory cell in
29a50 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20   new array */.  
29a60 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
29a70 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76  e;      /* New v
29a80 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65  dbe frame to exe
29a90 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62  cute in */.  Sub
29aa0 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
29ab0 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67  m;   /* Sub-prog
29ac0 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a  ram to execute *
29ad0 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20  /.  void *t;    
29ae0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
29af0 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67  oken identifying
29b00 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70   trigger */..  p
29b10 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70  Program = pOp->p
29b20 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52  4.pProgram;.  pR
29b30 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
29b40 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50  3];.  assert( pP
29b50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b  rogram->nOp>0 );
29b60 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  .  .  /* If the 
29b70 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  p5 flag is clear
29b80 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
29b90 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
29ba0 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a  riggers is .  **
29bb0 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61   disabled for ba
29bc0 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62  ckwards compatib
29bd0 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74  ility (p5 is set
29be0 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f   if this sub-pro
29bf0 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61  gram.  ** is rea
29c00 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e  lly a trigger, n
29c10 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  ot a foreign key
29c20 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65   action, and the
29c30 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61   flag set.  ** a
29c40 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68  nd cleared by th
29c50 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73  e "PRAGMA recurs
29c60 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f  ive_triggers" co
29c70 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e  mmand is clear).
29c80 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69  .  ** .  ** It i
29c90 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  s recursive invo
29ca0 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
29cb0 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c  rs, at the SQL l
29cc0 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20  evel, that is . 
29cd0 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e   ** disabled. In
29ce0 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69   some cases a si
29cf0 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79  ngle trigger may
29d00 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74   generate more t
29d10 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75  han one .  ** Su
29d20 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65  bProgram (if the
29d30 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20   trigger may be 
29d40 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f  executed with mo
29d50 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66  re than one diff
29d60 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43  erent .  ** ON C
29d70 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
29d80 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73  m). SubProgram s
29d90 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69  tructures associ
29da0 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a  ated with a.  **
29db0 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
29dc0 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d  all have the sam
29dd0 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
29de0 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e  SubProgram.token
29df0 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e   .  ** variable.
29e00 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
29e10 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50  p5 ){.    t = pP
29e20 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20  rogram->token;. 
29e30 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
29e40 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20  >pFrame; pFrame 
29e50 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e  && pFrame->token
29e60 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  !=t; pFrame=pFra
29e70 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
29e80 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62    if( pFrame ) b
29e90 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
29ea0 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e   p->nFrame>=db->
29eb0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
29ec0 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54  MIT_TRIGGER_DEPT
29ed0 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  H] ){.    rc = S
29ee0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
29ef0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
29f00 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
29f10 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76  b, "too many lev
29f20 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72  els of trigger r
29f30 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20  ecursion");.    
29f40 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
29f50 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73   Register pRt is
29f60 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
29f70 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
29f80 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73  ed to save the s
29f90 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65  tate.  ** of the
29fa0 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d   current program
29fb0 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79  , and the memory
29fc0 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e   required at run
29fd0 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a  time to execute.
29fe0 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72    ** the trigger
29ff0 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69   program. If thi
2a000 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65  s trigger has be
2a010 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c  en fired before,
2a020 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20   then pRt .  ** 
2a030 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  is already alloc
2a040 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ated. Otherwise,
2a050 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74   it must be init
2a060 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69  ialized.  */.  i
2a070 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d  f( (pRt->flags&M
2a080 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a  EM_Frame)==0 ){.
2a090 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61      /* SubProgra
2a0a0 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f  m.nMem is set to
2a0b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
2a0c0 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
2a0d0 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   by the .    ** 
2a0e0 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69  program stored i
2a0f0 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70  n SubProgram.aOp
2a100 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65  . As well as the
2a110 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20  se, one memory. 
2a120 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65     ** cell is re
2a130 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20  quired for each 
2a140 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
2a150 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20  he program. Set 
2a160 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72  local.    ** var
2a170 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20  iable nMem (and 
2a180 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65  later, VdbeFrame
2a190 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74  .nChildMem) to t
2a1a0 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  his value..    *
2a1b0 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72  /.    nMem = pPr
2a1c0 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50  ogram->nMem + pP
2a1d0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
2a1e0 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38    nByte = ROUND8
2a1f0 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d  (sizeof(VdbeFram
2a200 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)).            
2a210 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f    + nMem * sizeo
2a220 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20  f(Mem).         
2a230 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
2a240 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56  >nCsr * sizeof(V
2a250 64 62 65 43 75 72 73 6f 72 20 2a 29 0a 20 20 20  dbeCursor *).   
2a260 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
2a270 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73  ogram->nOnce * s
2a280 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20 20 20 70  izeof(u8);.    p
2a290 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
2a2a0 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
2a2b0 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
2a2c0 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
2a2d0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2a2e0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
2a2f0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
2a300 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
2a310 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a  gs = MEM_Frame;.
2a320 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d      pRt->u.pFram
2a330 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20  e = pFrame;..   
2a340 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a   pFrame->v = p;.
2a350 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
2a360 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20  ldMem = nMem;.  
2a370 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
2a380 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Csr = pProgram->
2a390 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  nCsr;.    pFrame
2a3a0 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70  ->pc = pc;.    p
2a3b0 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d  Frame->aMem = p-
2a3c0 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >aMem;.    pFram
2a3d0 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65  e->nMem = p->nMe
2a3e0 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  m;.    pFrame->a
2a3f0 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b  pCsr = p->apCsr;
2a400 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75  .    pFrame->nCu
2a410 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f  rsor = p->nCurso
2a420 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  r;.    pFrame->a
2a430 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
2a440 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70   pFrame->nOp = p
2a450 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->nOp;.    pFram
2a460 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67  e->token = pProg
2a470 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
2a480 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61  pFrame->aOnceFla
2a490 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  g = p->aOnceFlag
2a4a0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
2a4b0 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e  nceFlag = p->nOn
2a4c0 63 65 46 6c 61 67 3b 0a 0a 20 20 20 20 70 45 6e  ceFlag;..    pEn
2a4d0 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  d = &VdbeFrameMe
2a4e0 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65  m(pFrame)[pFrame
2a4f0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20  ->nChildMem];.  
2a500 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46    for(pMem=VdbeF
2a510 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
2a520 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65   pMem!=pEnd; pMe
2a530 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d  m++){.      pMem
2a540 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
2a550 76 61 6c 69 64 3b 0a 20 20 20 20 20 20 70 4d 65  valid;.      pMe
2a560 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  m->db = db;.    
2a570 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  }.  }else{.    p
2a580 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70  Frame = pRt->u.p
2a590 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72  Frame;.    asser
2a5a0 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65  t( pProgram->nMe
2a5b0 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  m+pProgram->nCsr
2a5c0 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
2a5d0 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Mem );.    asser
2a5e0 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  t( pProgram->nCs
2a5f0 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
2a600 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65  dCsr );.    asse
2a610 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e  rt( pc==pFrame->
2a620 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e  pc );.  }..  p->
2a630 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61  nFrame++;.  pFra
2a640 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d  me->pParent = p-
2a650 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d  >pFrame;.  pFram
2a660 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  e->lastRowid = l
2a670 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61  astRowid;.  pFra
2a680 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d  me->nChange = p-
2a690 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e  >nChange;.  p->n
2a6a0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d  Change = 0;.  p-
2a6b0 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
2a6c0 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d  ;.  p->aMem = aM
2a6d0 65 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d  em = &VdbeFrameM
2a6e0 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a  em(pFrame)[-1];.
2a6f0 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61    p->nMem = pFra
2a700 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20  me->nChildMem;. 
2a710 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75   p->nCursor = (u
2a720 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  16)pFrame->nChil
2a730 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72  dCsr;.  p->apCsr
2a740 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a   = (VdbeCursor *
2a750 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b  *)&aMem[p->nMem+
2a760 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61  1];.  p->aOp = a
2a770 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61  Op = pProgram->a
2a780 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70  Op;.  p->nOp = p
2a790 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20  Program->nOp;.  
2a7a0 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28  p->aOnceFlag = (
2a7b0 75 38 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70  u8 *)&p->apCsr[p
2a7c0 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d  ->nCursor];.  p-
2a7d0 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50 72  >nOnceFlag = pPr
2a7e0 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20  ogram->nOnce;.  
2a7f0 70 63 20 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73 65  pc = -1;.  memse
2a800 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20  t(p->aOnceFlag, 
2a810 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29  0, p->nOnceFlag)
2a820 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
2a830 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20  * Opcode: Param 
2a840 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2a850 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
2a860 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65   only ever prese
2a870 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61  nt in sub-progra
2a880 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68  ms called via th
2a890 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d  e .** OP_Program
2a8a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f   instruction. Co
2a8b0 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65  py a value curre
2a8c0 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ntly stored in a
2a8d0 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
2a8e0 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
2a8f0 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74  (parent) frame t
2a900 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65  o cell P2 in the
2a910 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20   current frames 
2a920 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63  .** address spac
2a930 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  e. This is used 
2a940 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
2a950 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68  ams to access th
2a960 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20  e new.* .** and 
2a970 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a  old.* values..**
2a980 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20  .** The address 
2a990 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74  of the cell in t
2a9a0 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20  he parent frame 
2a9b0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
2a9c0 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76   adding.** the v
2a9d0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
2a9e0 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76  rgument to the v
2a9f0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
2aa00 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a  rgument to the.*
2aa10 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  * calling OP_Pro
2aa20 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
2aa30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
2aa40 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  am: {           
2aa50 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
2aa60 73 65 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  se */.  VdbeFram
2aa70 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d  e *pFrame;.  Mem
2aa80 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20   *pIn;.  pFrame 
2aa90 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70  = p->pFrame;.  p
2aaa0 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  In = &pFrame->aM
2aab0 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72  em[pOp->p1 + pFr
2aac0 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d  ame->aOp[pFrame-
2aad0 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73  >pc].p1];   .  s
2aae0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
2aaf0 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
2ab00 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  In, MEM_Ephem);.
2ab10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64    break;.}..#end
2ab20 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
2ab30 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2ab40 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  R */..#ifndef SQ
2ab50 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2ab60 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a  N_KEY./* Opcode:
2ab70 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32   FkCounter P1 P2
2ab80 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63   * * *.**.** Inc
2ab90 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72  rement a "constr
2aba0 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79  aint counter" by
2abb0 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e   P2 (P2 may be n
2abc0 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74  egative or posit
2abd0 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69  ive)..** If P1 i
2abe0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20  s non-zero, the 
2abf0 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
2ac00 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  int counter is i
2ac10 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28  ncremented .** (
2ac20 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
2ac30 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2ac40 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  ). Otherwise, if
2ac50 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
2ac60 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63   .** statement c
2ac70 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d  ounter is increm
2ac80 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65  ented (immediate
2ac90 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2aca0 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61  straints)..*/.ca
2acb0 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a  se OP_FkCounter:
2acc0 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61   {.  if( db->fla
2acd0 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65  gs & SQLITE_Defe
2ace0 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e  rFKs ){.    db->
2acf0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2ad00 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
2ad10 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31  else if( pOp->p1
2ad20 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
2ad30 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70  erredCons += pOp
2ad40 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->p2;.  }else{. 
2ad50 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61     p->nFkConstra
2ad60 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  int += pOp->p2;.
2ad70 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2ad80 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a  /* Opcode: FkIfZ
2ad90 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
2ada0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2adb0 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f 72  e tests if a for
2adc0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2add0 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63  int-counter is c
2ade0 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a  urrently zero..*
2adf0 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f  * If so, jump to
2ae00 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
2ae10 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
2ae20 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2ae30 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63  next .** instruc
2ae40 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
2ae50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
2ae60 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hen the jump is 
2ae70 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74  taken if the dat
2ae80 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
2ae90 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a  -counter.** is z
2aea0 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61  ero (the one tha
2aeb0 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65  t counts deferre
2aec0 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  d constraint vio
2aed0 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20  lations). If P1 
2aee0 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20  is.** zero, the 
2aef0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
2af00 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63   the statement c
2af10 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
2af20 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d  r is zero.** (im
2af30 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
2af40 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  key constraint v
2af50 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63  iolations)..*/.c
2af60 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a  ase OP_FkIfZero:
2af70 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75   {         /* ju
2af80 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  mp */.  if( pOp-
2af90 3e 70 31 20 29 7b 0a 20 20 20 20 69 66 28 20 64  >p1 ){.    if( d
2afa0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
2afb0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
2afc0 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29  rredImmCons==0 )
2afd0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
2afe0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66  .  }else{.    if
2aff0 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69  ( p->nFkConstrai
2b000 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  nt==0 && db->nDe
2b010 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
2b020 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d   ) pc = pOp->p2-
2b030 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2b040 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  }.#endif /* #ifn
2b050 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2b060 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a  FOREIGN_KEY */..
2b070 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2b080 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
2b090 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d  T./* Opcode: Mem
2b0a0 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Max P1 P2 * * *.
2b0b0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65  **.** P1 is a re
2b0c0 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
2b0d0 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
2b0e0 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72   VM (the root fr
2b0f0 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72  ame is.** differ
2b100 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ent from the cur
2b110 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68  rent frame if th
2b120 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
2b130 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64  s being executed
2b140 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62  .** within a sub
2b150 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74  -program). Set t
2b160 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2b170 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d  ster P1 to the m
2b180 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74  aximum of .** it
2b190 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  s current value 
2b1a0 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  and the value in
2b1b0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
2b1c0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
2b1d0 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65  tion throws an e
2b1e0 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f  rror if the memo
2b1f0 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69  ry cell is not i
2b200 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69  nitially.** an i
2b210 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
2b220 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20  OP_MemMax: {    
2b230 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
2b240 4d 65 6d 20 2a 70 49 6e 31 3b 0a 20 20 56 64 62  Mem *pIn1;.  Vdb
2b250 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
2b260 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
2b270 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  ){.    for(pFram
2b280 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
2b290 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46  ame->pParent; pF
2b2a0 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
2b2b0 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20  rent);.    pIn1 
2b2c0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
2b2d0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73  pOp->p1];.  }els
2b2e0 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61  e{.    pIn1 = &a
2b2f0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2b300 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  }.  assert( memI
2b310 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
2b320 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2b330 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
2b340 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2b350 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
2b360 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
2b370 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69  erify(pIn2);.  i
2b380 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e  f( pIn1->u.i<pIn
2b390 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e  2->u.i){.    pIn
2b3a0 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75  1->u.i = pIn2->u
2b3b0 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  .i;.  }.  break;
2b3c0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2b3d0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
2b3e0 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  REMENT */../* Op
2b3f0 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50  code: IfPos P1 P
2b400 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  2 * * *.**.** If
2b410 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
2b420 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f  gister P1 is 1 o
2b430 72 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20  r greater, jump 
2b440 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20  to P2..**.** It 
2b450 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73  is illegal to us
2b460 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  e this instructi
2b470 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72  on on a register
2b480 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f   that does.** no
2b490 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2b4a0 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74  eger.  An assert
2b4b0 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72  ion fault will r
2b4c0 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79  esult if you try
2b4d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50  ..*/.case OP_IfP
2b4e0 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  os: {        /* 
2b4f0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
2b500 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2b510 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2b520 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
2b530 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e  Int );.  if( pIn
2b540 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20  1->u.i>0 ){.    
2b550 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2b560 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2b570 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
2b580 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Neg P1 P2 * * *.
2b590 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  **.** If the val
2b5a0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2b5b0 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a  1 is less than z
2b5c0 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ero, jump to P2.
2b5d0 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c   .**.** It is il
2b5e0 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69  legal to use thi
2b5f0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
2b600 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
2b610 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e   does.** not con
2b620 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2b630 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66    An assertion f
2b640 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74  ault will result
2b650 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a   if you try..*/.
2b660 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b  case OP_IfNeg: {
2b670 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2b680 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2b690 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2b6a0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2b6b0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2b6c0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2b6d0 69 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  i<0 ){.     pc =
2b6e0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2b6f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2b700 20 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20   Opcode: IfZero 
2b710 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2b720 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20  ** The register 
2b730 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  P1 must contain 
2b740 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 64 64  an integer.  Add
2b750 20 6c 69 74 65 72 61 6c 20 50 33 20 74 6f 20 74   literal P3 to t
2b760 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72  he.** value in r
2b770 65 67 69 73 74 65 72 20 50 31 2e 20 20 49 66 20  egister P1.  If 
2b780 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 65 78  the result is ex
2b790 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f  actly 0, jump to
2b7a0 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69   P2. .**.** It i
2b7b0 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
2b7c0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
2b7d0 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
2b7e0 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
2b7f0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2b800 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
2b810 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
2b820 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
2b830 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65  .*/.case OP_IfZe
2b840 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ro: {        /* 
2b850 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
2b860 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2b870 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2b880 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
2b890 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  Int );.  pIn1->u
2b8a0 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  .i += pOp->p3;. 
2b8b0 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d   if( pIn1->u.i==
2b8c0 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2b8d0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2b8e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2b8f0 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a  pcode: AggStep *
2b900 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2b910 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73  ** Execute the s
2b920 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  tep function for
2b930 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
2b940 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  The.** function 
2b950 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
2b960 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .   P4 is a poin
2b970 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
2b980 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  ef.** structure 
2b990 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
2b9a0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73  he function.  Us
2b9b0 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  e register.** P3
2b9c0 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   as the accumula
2b9d0 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  tor..**.** The P
2b9e0 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  5 arguments are 
2b9f0 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
2ba00 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a  ter P2 and its.*
2ba10 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f  * successors..*/
2ba20 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70  .case OP_AggStep
2ba30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  : {.  int n;.  i
2ba40 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65  nt i;.  Mem *pMe
2ba50 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a  m;.  Mem *pRec;.
2ba60 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2ba70 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33  t ctx;.  sqlite3
2ba80 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a  _value **apVal;.
2ba90 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
2baa0 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29    assert( n>=0 )
2bab0 3b 0a 20 20 70 52 65 63 20 3d 20 26 61 4d 65 6d  ;.  pRec = &aMem
2bac0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56  [pOp->p2];.  apV
2bad0 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  al = p->apArg;. 
2bae0 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c   assert( apVal |
2baf0 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28  | n==0 );.  for(
2bb00 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70  i=0; i<n; i++, p
2bb10 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  Rec++){.    asse
2bb20 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2bb30 52 65 63 29 20 29 3b 0a 20 20 20 20 61 70 56 61  Rec) );.    apVa
2bb40 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20  l[i] = pRec;.   
2bb50 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
2bb60 65 28 70 2c 20 70 52 65 63 29 3b 0a 20 20 20 20  e(p, pRec);.    
2bb70 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
2bb80 6f 72 65 54 79 70 65 28 70 52 65 63 29 3b 0a 20  oreType(pRec);. 
2bb90 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d   }.  ctx.pFunc =
2bba0 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
2bbb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2bbc0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
2bbd0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78  p->nMem );.  ctx
2bbe0 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26  .pMem = pMem = &
2bbf0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2bc00 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74   pMem->n++;.  ct
2bc10 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  x.s.flags = MEM_
2bc20 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20  Null;.  ctx.s.z 
2bc30 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61  = 0;.  ctx.s.zMa
2bc40 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e  lloc = 0;.  ctx.
2bc50 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
2bc60 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63  x.s.db = db;.  c
2bc70 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a  tx.isError = 0;.
2bc80 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b    ctx.pColl = 0;
2bc90 0a 20 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20  .  ctx.skipFlag 
2bca0 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70  = 0;.  if( ctx.p
2bcb0 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51  Func->flags & SQ
2bcc0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
2bcd0 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  LL ){.    assert
2bce0 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a  ( pOp>p->aOp );.
2bcf0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
2bd00 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43  -1].p4type==P4_C
2bd10 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73  OLLSEQ );.    as
2bd20 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
2bd30 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
2bd40 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c   );.    ctx.pCol
2bd50 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70  l = pOp[-1].p4.p
2bd60 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78  Coll;.  }.  (ctx
2bd70 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26  .pFunc->xStep)(&
2bd80 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20  ctx, n, apVal); 
2bd90 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d  /* IMP: R-24505-
2bda0 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 63  23230 */.  if( c
2bdb0 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  tx.isError ){.  
2bdc0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2bdd0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2bde0 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
2bdf0 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74  3_value_text(&ct
2be00 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20  x.s));.    rc = 
2be10 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ctx.isError;.  }
2be20 0a 20 20 69 66 28 20 63 74 78 2e 73 6b 69 70 46  .  if( ctx.skipF
2be30 6c 61 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72  lag ){.    asser
2be40 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
2be50 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b  e==OP_CollSeq );
2be60 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d  .    i = pOp[-1]
2be70 2e 70 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29  .p1;.    if( i )
2be80 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2be90 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d  etInt64(&aMem[i]
2bea0 2c 20 31 29 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c  , 1);.  }..  sql
2beb0 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
2bec0 73 65 28 26 63 74 78 2e 73 29 3b 0a 0a 20 20 62  se(&ctx.s);..  b
2bed0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2bee0 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20  de: AggFinal P1 
2bef0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
2bf00 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61  Execute the fina
2bf10 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66  lizer function f
2bf20 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
2bf30 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d    P1 is.** the m
2bf40 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
2bf50 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d  hat is the accum
2bf60 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61  ulator for the a
2bf70 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20  ggregate..**.** 
2bf80 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
2bf90 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68   of arguments th
2bfa0 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  at the step func
2bfb0 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a  tion takes and.*
2bfc0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
2bfd0 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
2bfe0 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69   for this functi
2bff0 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61  on.  The P2.** a
2c000 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75  rgument is not u
2c010 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
2c020 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  de.  It is only 
2c030 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69  there to disambi
2c040 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f  guate.** functio
2c050 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65  ns that can take
2c060 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73   varying numbers
2c070 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
2c080 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65  The.** P4 argume
2c090 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65  nt is only neede
2c0a0 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65  d for the degene
2c0b0 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a  rate case where.
2c0c0 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  ** the step func
2c0d0 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65  tion was not pre
2c0e0 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a  viously called..
2c0f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69  */.case OP_AggFi
2c100 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  nal: {.  Mem *pM
2c110 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
2c120 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
2c130 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p1<=p->nMem );. 
2c140 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
2c150 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2c160 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
2c170 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f   ~(MEM_Null|MEM_
2c180 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63  Agg))==0 );.  rc
2c190 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
2c1a0 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20  mFinalize(pMem, 
2c1b0 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
2c1c0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
2c1d0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2c1e0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2c1f0 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
2c200 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29  value_text(pMem)
2c210 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
2c220 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2c230 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e  ng(pMem, encodin
2c240 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  g);.  UPDATE_MAX
2c250 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b  _BLOBSIZE(pMem);
2c260 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
2c270 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d  beMemTooBig(pMem
2c280 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
2c290 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65  o_big;.  }.  bre
2c2a0 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
2c2b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f  QLITE_OMIT_WAL./
2c2c0 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70  * Opcode: Checkp
2c2d0 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20  oint P1 P2 P3 * 
2c2e0 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69  *.**.** Checkpoi
2c2f0 6e 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  nt database P1. 
2c300 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20  This is a no-op 
2c310 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72  if P1 is not cur
2c320 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c  rently in.** WAL
2c330 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72   mode. Parameter
2c340 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51   P2 is one of SQ
2c350 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2c360 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 0a 2a 2a  PASSIVE, FULL.**
2c370 20 6f 72 20 52 45 53 54 41 52 54 2e 20 20 57 72   or RESTART.  Wr
2c380 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20  ite 1 or 0 into 
2c390 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63  mem[P3] if the c
2c3a0 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e  heckpoint return
2c3b0 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  s.** SQLITE_BUSY
2c3c0 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74   or not, respect
2c3d0 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68  ively.  Write th
2c3e0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
2c3f0 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20  s in the.** WAL 
2c400 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
2c410 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  oint into mem[P3
2c420 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62  +1] and the numb
2c430 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69  er of pages.** i
2c440 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68  n the WAL that h
2c450 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f  ave been checkpo
2c460 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20  inted after the 
2c470 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f  checkpoint.** co
2c480 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d  mpletes into mem
2c490 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72  [P3+2].  However
2c4a0 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65   on an error, me
2c4b0 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d  m[P3+1] and.** m
2c4c0 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69  em[P3+2] are ini
2c4d0 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a  tialized to -1..
2c4e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b  */.case OP_Check
2c4f0 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69  point: {.  int i
2c500 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2c510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
2c520 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
2c530 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20  int aRes[3];    
2c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c550 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20  /* Results */.  
2c560 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
2c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c580 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73  /* Write results
2c590 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65   here */..  asse
2c5a0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2c5b0 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20  =0 );.  aRes[0] 
2c5c0 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d  = 0;.  aRes[1] =
2c5d0 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20   aRes[2] = -1;. 
2c5e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
2c5f0 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2c600 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20  INT_PASSIVE.    
2c610 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
2c620 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2c630 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20  _FULL.       || 
2c640 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2c650 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41  CHECKPOINT_RESTA
2c660 52 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73  RT.  );.  rc = s
2c670 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
2c680 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2c690 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c  p->p2, &aRes[1],
2c6a0 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66   &aRes[2]);.  if
2c6b0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
2c6c0 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  Y ){.    rc = SQ
2c6d0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65  LITE_OK;.    aRe
2c6e0 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  s[0] = 1;.  }.  
2c6f0 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20  for(i=0, pMem = 
2c700 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20  &aMem[pOp->p3]; 
2c710 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b  i<3; i++, pMem++
2c720 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2c730 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d  beMemSetInt64(pM
2c740 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d  em, (i64)aRes[i]
2c750 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65  );.  }    .  bre
2c760 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a  ak;.};  .#endif.
2c770 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2c780 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f  OMIT_PRAGMA./* O
2c790 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f  pcode: JournalMo
2c7a0 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  de P1 P2 P3 * P5
2c7b0 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  .**.** Change th
2c7c0 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
2c7d0 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  f database P1 to
2c7e0 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20   P3. P3 must be 
2c7f0 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41  one of the.** PA
2c800 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2c810 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63  XXX values. If c
2c820 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20  hanging between 
2c830 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c  the various roll
2c840 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64  back.** modes (d
2c850 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c  elete, truncate,
2c860 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e   persist, off an
2c870 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20  d memory), this 
2c880 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f  is a simple.** o
2c890 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20  peration. No IO 
2c8a0 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a  is required..**.
2c8b0 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69  ** If changing i
2c8c0 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41  nto or out of WA
2c8d0 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65  L mode the proce
2c8e0 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d  dure is more com
2c8f0 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  plicated..**.** 
2c900 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63  Write a string c
2c910 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69  ontaining the fi
2c920 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  nal journal-mode
2c930 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
2c940 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72  .*/.case OP_Jour
2c950 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a  nalMode: {    /*
2c960 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
2c970 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
2c980 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2c990 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74        /* Btree t
2c9a0 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c  o change journal
2c9b0 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61   mode of */.  Pa
2c9c0 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20  ger *pPager;    
2c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2c9e0 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74 65   Pager associate
2c9f0 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20  d with pBt */.  
2ca00 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20  int eNew;       
2ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d  /* New journal m
2ca30 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c  ode */.  int eOl
2ca40 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
2ca50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2ca60 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  old journal mode
2ca70 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
2ca80 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f  TE_OMIT_WAL.  co
2ca90 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e  nst char *zFilen
2caa0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
2cab0 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
2cac0 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65  e file for pPage
2cad0 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65  r */.#endif..  e
2cae0 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  New = pOp->p3;. 
2caf0 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50   assert( eNew==P
2cb00 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2cb10 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20  _DELETE .       
2cb20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2cb30 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43  OURNALMODE_TRUNC
2cb40 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  ATE .       || e
2cb50 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2cb60 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a  ALMODE_PERSIST .
2cb70 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2cb80 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2cb90 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20  E_OFF.       || 
2cba0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2cbb0 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20  NALMODE_MEMORY. 
2cbc0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2cbd0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2cbe0 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65  _WAL.       || e
2cbf0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2cc00 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29  ALMODE_QUERY.  )
2cc10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2cc20 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2cc30 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
2cc40 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2cc50 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20  ly==0 );..  pBt 
2cc60 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
2cc70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72  1].pBt;.  pPager
2cc80 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
2cc90 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c  ager(pBt);.  eOl
2cca0 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  d = sqlite3Pager
2ccb0 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  GetJournalMode(p
2ccc0 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e  Pager);.  if( eN
2ccd0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2cce0 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e  LMODE_QUERY ) eN
2ccf0 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28  ew = eOld;.  if(
2cd00 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b   !sqlite3PagerOk
2cd10 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d  ToChangeJournalM
2cd20 6f 64 65 28 70 50 61 67 65 72 29 20 29 20 65 4e  ode(pPager) ) eN
2cd30 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e  ew = eOld;..#ifn
2cd40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2cd50 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20  WAL.  zFilename 
2cd60 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
2cd70 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31  lename(pPager, 1
2cd80 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  );..  /* Do not 
2cd90 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69  allow a transiti
2cda0 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  on to journal_mo
2cdb0 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74  de=WAL for a dat
2cdc0 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65  abase.  ** in te
2cdd0 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20  mporary storage 
2cde0 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f  or if the VFS do
2cdf0 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73  es not support s
2ce00 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20  hared memory .  
2ce10 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  */.  if( eNew==P
2ce20 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2ce30 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69  _WAL.   && (sqli
2ce40 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c  te3Strlen30(zFil
2ce50 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20  ename)==0       
2ce60 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65      /* Temp file
2ce70 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73   */.       || !s
2ce80 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75  qlite3PagerWalSu
2ce90 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29  pported(pPager))
2cea0 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d     /* No shared-
2ceb0 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a  memory support *
2cec0 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20  /.  ){.    eNew 
2ced0 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69  = eOld;.  }..  i
2cee0 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a  f( (eNew!=eOld).
2cef0 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47     && (eOld==PAG
2cf00 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2cf10 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45  AL || eNew==PAGE
2cf20 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2cf30 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20  L).  ){.    if( 
2cf40 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  !db->autoCommit 
2cf50 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  || db->nVdbeRead
2cf60 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  >1 ){.      rc =
2cf70 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
2cf80 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
2cf90 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2cfa0 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20  g, db, .        
2cfb0 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65    "cannot change
2cfc0 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f   %s wal mode fro
2cfd0 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  m within a trans
2cfe0 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20  action",.       
2cff0 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f     (eNew==PAGER_
2d000 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
2d010 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20  ? "into" : "out 
2d020 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20  of").      );.  
2d030 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
2d040 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66  else{. .      if
2d050 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f  ( eOld==PAGER_JO
2d060 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b  URNALMODE_WAL ){
2d070 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c  .        /* If l
2d080 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c  eaving WAL mode,
2d090 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66   close the log f
2d0a0 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66  ile. If successf
2d0b0 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20  ul, the call.   
2d0c0 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72       ** to Pager
2d0d0 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b  CloseWal() check
2d0e0 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74  points and delet
2d0f0 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65  es the write-ahe
2d100 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20  ad-log .        
2d110 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c  ** file. An EXCL
2d120 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73  USIVE lock may s
2d130 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20  till be held on 
2d140 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2d150 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66  e .        ** af
2d160 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c  ter a successful
2d170 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20   return. .      
2d180 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20    */.        rc 
2d190 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c  = sqlite3PagerCl
2d1a0 6f 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a  oseWal(pPager);.
2d1b0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
2d1c0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2d1d0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
2d1e0 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
2d1f0 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b  e(pPager, eNew);
2d200 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2d210 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d   }else if( eOld=
2d220 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2d230 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20  DE_MEMORY ){.   
2d240 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74       /* Cannot t
2d250 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74  ransition direct
2d260 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74  ly from MEMORY t
2d270 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65  o WAL.  Use mode
2d280 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20   OFF.        ** 
2d290 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61  as an intermedia
2d2a0 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71  te */.        sq
2d2b0 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
2d2c0 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
2d2d0 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
2d2e0 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d  DE_OFF);.      }
2d2f0 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65  .  .      /* Ope
2d300 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
2d310 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
2d320 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73  file. Regardless
2d330 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a   of the journal.
2d340 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74        ** mode, t
2d350 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  his transaction 
2d360 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f  always uses a ro
2d370 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a  llback journal..
2d380 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
2d390 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
2d3a0 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
2d3b0 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
2d3c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2d3d0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
2d3e0 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56  sqlite3BtreeSetV
2d3f0 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65  ersion(pBt, (eNe
2d400 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2d410 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31  MODE_WAL ? 2 : 1
2d420 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
2d430 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
2d440 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2d450 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28  IT_WAL */..  if(
2d460 20 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20   rc ){.    eNew 
2d470 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e  = eOld;.  }.  eN
2d480 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  ew = sqlite3Page
2d490 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
2d4a0 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a  pPager, eNew);..
2d4b0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
2d4c0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d  Op->p2];.  pOut-
2d4d0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
2d4e0 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
2d4f0 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
2d500 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65  = (char *)sqlite
2d510 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
2d520 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e  (eNew);.  pOut->
2d530 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  n = sqlite3Strle
2d540 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20  n30(pOut->z);.  
2d550 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
2d560 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74  TE_UTF8;.  sqlit
2d570 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2d580 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
2d590 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
2d5a0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
2d5b0 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a  TE_OMIT_PRAGMA *
2d5c0 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  /..#if !defined(
2d5d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
2d5e0 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  UM) && !defined(
2d5f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41  SQLITE_OMIT_ATTA
2d600 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  CH)./* Opcode: V
2d610 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a  acuum * * * * *.
2d620 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65  **.** Vacuum the
2d630 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
2d640 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
2d650 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20  ill cause other 
2d660 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69  virtual.** machi
2d670 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65  nes to be create
2d680 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d  d and run.  It m
2d690 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64  ay not be called
2d6a0 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20   from within.** 
2d6b0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  a transaction..*
2d6c0 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d  /.case OP_Vacuum
2d6d0 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  : {.  assert( p-
2d6e0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2d6f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75    rc = sqlite3Ru
2d700 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72  nVacuum(&p->zErr
2d710 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61  Msg, db);.  brea
2d720 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
2d730 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2d740 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
2d750 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63  )./* Opcode: Inc
2d760 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20  rVacuum P1 P2 * 
2d770 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72  * *.**.** Perfor
2d780 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20  m a single step 
2d790 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74  of the increment
2d7a0 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64  al vacuum proced
2d7b0 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31  ure on.** the P1
2d7c0 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68   database. If th
2d7d0 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e  e vacuum has fin
2d7e0 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69  ished, jump to i
2d7f0 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32  nstruction.** P2
2d800 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
2d810 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2d820 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
2d830 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  n..*/.case OP_In
2d840 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20  crVacuum: {     
2d850 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2d860 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61  Btree *pBt;..  a
2d870 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2d880 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
2d890 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2d8a0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
2d8b0 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
2d8c0 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
2d8d0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2d8e0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
2d8f0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
2d900 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20  ->p1].pBt;.  rc 
2d910 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
2d920 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20  crVacuum(pBt);. 
2d930 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2d940 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d  DONE ){.    pc =
2d950 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2d960 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
2d970 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2d980 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
2d990 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20  de: Expire P1 * 
2d9a0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73  * * *.**.** Caus
2d9b0 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74  e precompiled st
2d9c0 61 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f  atements to beco
2d9d0 6d 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65  me expired. An e
2d9e0 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74  xpired statement
2d9f0 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61  .** fails with a
2da00 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20  n error code of 
2da10 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66  SQLITE_SCHEMA if
2da20 20 69 74 20 69 73 20 65 76 65 72 20 65 78 65 63   it is ever exec
2da30 75 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71  uted .** (via sq
2da40 6c 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a  lite3_step())..*
2da50 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30  * .** If P1 is 0
2da60 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73  , then all SQL s
2da70 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65  tatements become
2da80 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20   expired. If P1 
2da90 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20  is non-zero,.** 
2daa0 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75  then only the cu
2dab0 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
2dac0 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  g statement is a
2dad0 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73  ffected. .*/.cas
2dae0 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20  e OP_Expire: {. 
2daf0 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b   if( !pOp->p1 ){
2db00 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
2db10 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
2db20 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73  ents(db);.  }els
2db30 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  e{.    p->expire
2db40 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 1;.  }.  bre
2db50 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
2db60 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
2db70 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64  D_CACHE./* Opcod
2db80 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20  e: TableLock P1 
2db90 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
2dba0 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f   Obtain a lock o
2dbb0 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  n a particular t
2dbc0 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72  able. This instr
2dbd0 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75  uction is only u
2dbe0 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  sed when.** the 
2dbf0 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61  shared-cache fea
2dc00 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e  ture is enabled.
2dc10 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68   .**.** P1 is th
2dc20 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
2dc30 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74  atabase in sqlit
2dc40 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20  e3.aDb[] of the 
2dc50 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77  database.** on w
2dc60 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73  hich the lock is
2dc70 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65   acquired.  A re
2dc80 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e  adlock is obtain
2dc90 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a  ed if P3==0 or.*
2dca0 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69  * a write lock i
2dcb0 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50  f P3==1..**.** P
2dcc0 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72  2 contains the r
2dcd0 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20  oot-page of the 
2dce0 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a  table to lock..*
2dcf0 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73  *.** P4 contains
2dd00 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
2dd10 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
2dd20 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64  ble being locked
2dd30 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a  . This is only.*
2dd40 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  * used to genera
2dd50 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  te an error mess
2dd60 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20  age if the lock 
2dd70 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e  cannot be obtain
2dd80 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ed..*/.case OP_T
2dd90 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38  ableLock: {.  u8
2dda0 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28   isWriteLock = (
2ddb0 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66  u8)pOp->p3;.  if
2ddc0 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c  ( isWriteLock ||
2ddd0 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53   0==(db->flags&S
2dde0 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
2ddf0 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e  itted) ){.    in
2de00 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20  t p1 = pOp->p1; 
2de10 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
2de20 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62  =0 && p1<db->nDb
2de30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2de40 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
2de50 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70  (((yDbMask)1)<<p
2de60 31 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73  1))!=0 );.    as
2de70 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63  sert( isWriteLoc
2de80 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c  k==0 || isWriteL
2de90 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63  ock==1 );.    rc
2dea0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
2deb0 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ockTable(db->aDb
2dec0 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  [p1].pBt, pOp->p
2ded0 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b  2, isWriteLock);
2dee0 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46  .    if( (rc&0xF
2def0 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  F)==SQLITE_LOCKE
2df00 44 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  D ){.      const
2df10 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e   char *z = pOp->
2df20 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69  p4.z;.      sqli
2df30 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2df40 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64  >zErrMsg, db, "d
2df50 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73  atabase table is
2df60 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29   locked: %s", z)
2df70 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
2df80 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2df90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
2dfa0 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69  RED_CACHE */..#i
2dfb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2dfc0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2dfd0 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e  * Opcode: VBegin
2dfe0 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
2dff0 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f  * P4 may be a po
2e000 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
2e010 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
2e020 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20  re. If so, call 
2e030 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d  the .** xBegin m
2e040 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
2e050 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f  able..**.** Also
2e060 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  , whether or not
2e070 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63   P4 is set, chec
2e080 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e  k that this is n
2e090 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20  ot being called 
2e0a0 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61  from.** within a
2e0b0 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76   callback to a v
2e0c0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79  irtual table xSy
2e0d0 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20  nc() method. If 
2e0e0 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72  it is, the error
2e0f0 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65  .** code will be
2e100 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c   set to SQLITE_L
2e110 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OCKED..*/.case O
2e120 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54  P_VBegin: {.  VT
2e130 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70  able *pVTab;.  p
2e140 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  VTab = pOp->p4.p
2e150 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Vtab;.  rc = sql
2e160 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62  ite3VtabBegin(db
2e170 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20  , pVTab);.  if( 
2e180 70 56 54 61 62 20 29 20 69 6d 70 6f 72 74 56 74  pVTab ) importVt
2e190 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 54 61  abErrMsg(p, pVTa
2e1a0 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65  b->pVtab);.  bre
2e1b0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2e1c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2e1d0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2e1e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e1f0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2e200 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65   Opcode: VCreate
2e210 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2e220 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
2e230 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
2e240 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
2e250 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43   P1. Call the xC
2e260 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20  reate method.** 
2e270 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
2e280 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61  */.case OP_VCrea
2e290 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c  te: {.  rc = sql
2e2a0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
2e2b0 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  te(db, pOp->p1, 
2e2c0 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a  pOp->p4.z, &p->z
2e2d0 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b  ErrMsg);.  break
2e2e0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2e2f0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2e300 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2e310 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2e320 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2e330 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20  pcode: VDestroy 
2e340 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2e350 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
2e360 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
2e370 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
2e380 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44  P1.  Call the xD
2e390 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a  estroy method.**
2e3a0 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a   of that table..
2e3b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74  */.case OP_VDest
2e3c0 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74  roy: {.  p->inVt
2e3d0 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20  abMethod = 2;.  
2e3e0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
2e3f0 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20  CallDestroy(db, 
2e400 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2e410 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  .z);.  p->inVtab
2e420 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72  Method = 0;.  br
2e430 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2e440 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2e450 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2e460 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e470 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2e480 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20  * Opcode: VOpen 
2e490 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2e4a0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
2e4b0 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
2e4c0 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
2e4d0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
2e4e0 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73  ucture..** P1 is
2e4f0 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   a cursor number
2e500 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  .  This opcode o
2e510 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f  pens a cursor to
2e520 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
2e530 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73  table and stores
2e540 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20   that cursor in 
2e550 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P1..*/.case OP_V
2e560 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
2e570 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71  rsor *pCur;.  sq
2e580 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
2e590 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r *pVtabCursor;.
2e5a0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2e5b0 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33  pVtab;.  sqlite3
2e5c0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2e5d0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
2e5e0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70  bIsReader );.  p
2e5f0 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62  Cur = 0;.  pVtab
2e600 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56  Cursor = 0;.  pV
2e610 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
2e620 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  tab->pVtab;.  pM
2e630 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33  odule = (sqlite3
2e640 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d  _module *)pVtab-
2e650 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
2e660 72 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f 64  rt(pVtab && pMod
2e670 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f  ule);.  rc = pMo
2e680 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61  dule->xOpen(pVta
2e690 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72 29  b, &pVtabCursor)
2e6a0 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72  ;.  importVtabEr
2e6b0 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rMsg(p, pVtab);.
2e6c0 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d    if( SQLITE_OK=
2e6d0 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e  =rc ){.    /* In
2e6e0 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33  itialize sqlite3
2e6f0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73  _vtab_cursor bas
2e700 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70  e class */.    p
2e710 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
2e720 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20 20  b = pVtab;..    
2e730 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64  /* Initialize vd
2e740 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74  be cursor object
2e750 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20 61   */.    pCur = a
2e760 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
2e770 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c   pOp->p1, 0, -1,
2e780 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75   0);.    if( pCu
2e790 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d  r ){.      pCur-
2e7a0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70  >pVtabCursor = p
2e7b0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20 20  VtabCursor;.    
2e7c0 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c 65 20    pCur->pModule 
2e7d0 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  = pVtabCursor->p
2e7e0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2e7f0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2e800 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
2e810 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64   = 1;.      pMod
2e820 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61  ule->xClose(pVta
2e830 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  bCursor);.    }.
2e840 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2e850 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2e860 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2e870 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2e880 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2e890 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2e8a0 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20  : VFilter P1 P2 
2e8b0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31  P3 P4 *.**.** P1
2e8c0 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65   is a cursor ope
2e8d0 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e  ned using VOpen.
2e8e0 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65    P2 is an addre
2e8f0 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
2e900 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64  .** the filtered
2e910 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
2e920 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  mpty..**.** P4 i
2e930 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72  s either NULL or
2e940 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77   a string that w
2e950 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  as generated by 
2e960 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a  the xBestIndex.*
2e970 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  * method of the 
2e980 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74  module.  The int
2e990 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
2e9a0 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20  he P4 string is 
2e9b0 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d  left.** to the m
2e9c0 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
2e9d0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
2e9e0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
2e9f0 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
2ea00 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  od on the virtua
2ea10 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65  l table specifie
2ea20 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65  d.** by P1.  The
2ea30 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70   integer query p
2ea40 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f  lan parameter to
2ea50 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72   xFilter is stor
2ea60 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
2ea70 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50  * P3. Register P
2ea80 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61  3+1 stores the a
2ea90 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f  rgc parameter to
2eaa0 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68   be passed to th
2eab0 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74  e.** xFilter met
2eac0 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50  hod. Registers P
2ead0 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61  3+2..P3+1+argc a
2eae0 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61  re the argc.** a
2eaf0 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65  dditional parame
2eb00 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70  ters which are p
2eb10 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c  assed to.** xFil
2eb20 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67  ter as argv. Reg
2eb30 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d  ister P3+2 becom
2eb40 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20  es argv[0] when 
2eb50 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65  passed to xFilte
2eb60 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20  r..**.** A jump 
2eb70 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66  is made to P2 if
2eb80 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
2eb90 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20  after filtering 
2eba0 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a  would be empty..
2ebb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74  */.case OP_VFilt
2ebc0 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  er: {   /* jump 
2ebd0 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  */.  int nArg;. 
2ebe0 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63   int iQuery;.  c
2ebf0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
2ec00 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
2ec10 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d  Mem *pQuery;.  M
2ec20 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c  em *pArgc;.  sql
2ec30 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
2ec40 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20   *pVtabCursor;. 
2ec50 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2ec60 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73  Vtab;.  VdbeCurs
2ec70 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20  or *pCur;.  int 
2ec80 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  res;.  int i;.  
2ec90 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20  Mem **apArg;..  
2eca0 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70  pQuery = &aMem[p
2ecb0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63  Op->p3];.  pArgc
2ecc0 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20   = &pQuery[1];. 
2ecd0 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
2ece0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2ecf0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2ed00 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47  pQuery) );.  REG
2ed10 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
2ed20 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20  >p3, pQuery);.  
2ed30 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
2ed40 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  tabCursor );.  p
2ed50 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75  VtabCursor = pCu
2ed60 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r->pVtabCursor;.
2ed70 20 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43    pVtab = pVtabC
2ed80 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
2ed90 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
2eda0 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20  >pModule;..  /* 
2edb0 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e  Grab the index n
2edc0 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70  umber and argc p
2edd0 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61  arameters */.  a
2ede0 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e  ssert( (pQuery->
2edf0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d  flags&MEM_Int)!=
2ee00 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67  0 && pArgc->flag
2ee10 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
2ee20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67  nArg = (int)pArg
2ee30 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79  c->u.i;.  iQuery
2ee40 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e   = (int)pQuery->
2ee50 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  u.i;..  /* Invok
2ee60 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  e the xFilter me
2ee70 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20  thod */.  {.    
2ee80 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41  res = 0;.    apA
2ee90 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
2eea0 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c     for(i = 0; i<
2eeb0 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
2eec0 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41    apArg[i] = &pA
2eed0 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20  rgc[i+1];.      
2eee0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
2eef0 6f 72 65 54 79 70 65 28 61 70 41 72 67 5b 69 5d  oreType(apArg[i]
2ef00 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d  );.    }..    p-
2ef10 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
2ef20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  1;.    rc = pMod
2ef30 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74  ule->xFilter(pVt
2ef40 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79  abCursor, iQuery
2ef50 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72  , pOp->p4.z, nAr
2ef60 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70  g, apArg);.    p
2ef70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
2ef80 20 30 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56 74   0;.    importVt
2ef90 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
2efa0 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
2efb0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2efc0 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
2efd0 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72 73  ->xEof(pVtabCurs
2efe0 6f 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  or);.    }..    
2eff0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
2f000 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2f010 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  1;.    }.  }.  p
2f020 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30  Cur->nullRow = 0
2f030 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  ;..  break;.}.#e
2f040 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2f050 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2f060 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2f070 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2f080 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2f090 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50   VColumn P1 P2 P
2f0a0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  3 * *.**.** Stor
2f0b0 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
2f0c0 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20  he P2-th column 
2f0d0 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66  of.** the row of
2f0e0 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62   the virtual-tab
2f0f0 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20  le that the .** 
2f100 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69  P1 cursor is poi
2f110 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65  nting to into re
2f120 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61  gister P3..*/.ca
2f130 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b  se OP_VColumn: {
2f140 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2f150 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
2f160 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2f170 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
2f180 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33  pDest;.  sqlite3
2f190 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78  _context sContex
2f1a0 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72  t;..  VdbeCursor
2f1b0 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73   *pCur = p->apCs
2f1c0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2f1d0 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
2f1e0 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  bCursor );.  ass
2f1f0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
2f200 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
2f210 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  em );.  pDest = 
2f220 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2f230 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
2f240 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
2f250 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
2f260 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  w ){.    sqlite3
2f270 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
2f280 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  Dest);.    break
2f290 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
2f2a0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2f2b0 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
2f2c0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
2f2d0 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
2f2e0 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
2f2f0 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43   );.  memset(&sC
2f300 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f  ontext, 0, sizeo
2f310 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20  f(sContext));.. 
2f320 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63   /* The output c
2f330 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20  ell may already 
2f340 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61 6c  have a buffer al
2f350 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20  located. Move.  
2f360 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20 63  ** the current c
2f370 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74  ontents to sCont
2f380 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61 73 65  ext.s so in case
2f390 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
2f3a0 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65  on .  ** can use
2f3b0 20 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c   the already all
2f3c0 6f 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e  ocated buffer in
2f3d0 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74  stead of allocat
2f3e0 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20  ing a .  ** new 
2f3f0 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  one..  */.  sqli
2f400 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26  te3VdbeMemMove(&
2f410 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65 73  sContext.s, pDes
2f420 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  t);.  MemSetType
2f430 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74 2e 73  Flag(&sContext.s
2f440 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20  , MEM_Null);..  
2f450 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  rc = pModule->xC
2f460 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61  olumn(pCur->pVta
2f470 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65  bCursor, &sConte
2f480 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  xt, pOp->p2);.  
2f490 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67  importVtabErrMsg
2f4a0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
2f4b0 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72  ( sContext.isErr
2f4c0 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  or ){.    rc = s
2f4d0 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b  Context.isError;
2f4e0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20  .  }..  /* Copy 
2f4f0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
2f500 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68  e function to th
2f510 65 20 50 33 20 72 65 67 69 73 74 65 72 2e 20 57  e P3 register. W
2f520 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20 72  e.  ** do this r
2f530 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
2f540 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65  ther or not an e
2f550 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74 6f  rror occurred to
2f560 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a   ensure any.  **
2f570 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74   dynamic allocat
2f580 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e  ion in sContext.
2f590 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74 29  s (a Mem struct)
2f5a0 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a 20   is  released.. 
2f5b0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
2f5c0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2f5d0 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63  &sContext.s, enc
2f5e0 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65  oding);.  sqlite
2f5f0 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44 65  3VdbeMemMove(pDe
2f600 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73 29  st, &sContext.s)
2f610 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
2f620 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73  CE(pOp->p3, pDes
2f630 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
2f640 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
2f650 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ;..  if( sqlite3
2f660 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44  VdbeMemTooBig(pD
2f670 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  est) ){.    goto
2f680 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
2f690 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2f6a0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2f6b0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2f6c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f6d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2f6e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78  ./* Opcode: VNex
2f6f0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
2f700 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74  .** Advance virt
2f710 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20  ual table P1 to 
2f720 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20  the next row in 
2f730 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 61  its result set a
2f740 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e  nd.** jump to in
2f750 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f  struction P2.  O
2f760 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75 61  r, if the virtua
2f770 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61 63  l table has reac
2f780 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f  hed.** the end o
2f790 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  f its result set
2f7a0 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
2f7b0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2f7c0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2f7d0 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b  case OP_VNext: {
2f7e0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2f7f0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2f800 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
2f810 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
2f820 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b  dule;.  int res;
2f830 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2f840 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b  Cur;..  res = 0;
2f850 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
2f860 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2f870 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
2f880 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  abCursor );.  if
2f890 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
2f8a0 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
2f8b0 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
2f8c0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
2f8d0 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2f8e0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
2f8f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
2f900 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20  ule->xNext );.. 
2f910 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
2f920 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66  Next() method of
2f930 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65   the module. The
2f940 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72  re is no way for
2f950 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c   the.  ** underl
2f960 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ying implementat
2f970 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e  ion to return an
2f980 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63   error if one oc
2f990 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a  curs during.  **
2f9a0 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61   xNext(). Instea
2f9b0 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f  d, if an error o
2f9c0 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72  ccurs, true is r
2f9d0 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74  eturned (indicat
2f9e0 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64  ing that .  ** d
2f9f0 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ata is available
2fa00 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20  ) and the error 
2fa10 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68  code returned wh
2fa20 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20  en xColumn or.  
2fa30 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65  ** some other me
2fa40 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76  thod is next inv
2fa50 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65  oked on the save
2fa60 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
2fa70 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d  ursor..  */.  p-
2fa80 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
2fa90 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  1;.  rc = pModul
2faa0 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70  e->xNext(pCur->p
2fab0 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70  VtabCursor);.  p
2fac0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
2fad0 20 30 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62   0;.  importVtab
2fae0 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29  ErrMsg(p, pVtab)
2faf0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2fb00 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73  TE_OK ){.    res
2fb10 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66   = pModule->xEof
2fb20 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
2fb30 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  or);.  }..  if( 
2fb40 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49  !res ){.    /* I
2fb50 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c  f there is data,
2fb60 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
2fb70 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2fb80 2d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  - 1;.  }.  goto 
2fb90 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
2fba0 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  upt;.}.#endif /*
2fbb0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2fbc0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2fbd0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2fbe0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2fbf0 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d  * Opcode: VRenam
2fc00 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
2fc10 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
2fc20 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
2fc30 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
2fc40 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
2fc50 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
2fc60 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2fc70 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
2fc80 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  ng xRename metho
2fc90 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  d. The value.** 
2fca0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
2fcb0 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
2fcc0 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74  zName argument t
2fcd0 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65  o the xRename me
2fce0 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  thod..*/.case OP
2fcf0 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71  _VRename: {.  sq
2fd00 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2fd10 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b  b;.  Mem *pName;
2fd20 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ..  pVtab = pOp-
2fd30 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
2fd40 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65  ;.  pName = &aMe
2fd50 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2fd60 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f  sert( pVtab->pMo
2fd70 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b  dule->xRename );
2fd80 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
2fd90 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a  Valid(pName) );.
2fda0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2fdb0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45  dOnly==0 );.  RE
2fdc0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
2fdd0 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20  ->p1, pName);.  
2fde0 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66  assert( pName->f
2fdf0 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29  lags & MEM_Str )
2fe00 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
2fe10 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
2fe20 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63  _UTF8 );.  testc
2fe30 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
2fe40 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20  =SQLITE_UTF16BE 
2fe50 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
2fe60 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
2fe70 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72  E_UTF16LE );.  r
2fe80 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
2fe90 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e  hangeEncoding(pN
2fea0 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  ame, SQLITE_UTF8
2feb0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2fec0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
2fed0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2fee0 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62  e->xRename(pVtab
2fef0 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20  , pName->z);.   
2ff00 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
2ff10 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
2ff20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
2ff30 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2ff40 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
2ff50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2ff60 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2ff70 64 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50  de: VUpdate P1 P
2ff80 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
2ff90 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2ffa0 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
2ffb0 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
2ffc0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
2ffd0 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  ture..** This op
2ffe0 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
2fff0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
30000 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50  Update method. P
30010 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  2 values.** are 
30020 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72  contiguous memor
30030 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67  y cells starting
30040 20 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74   at P3 to pass t
30050 6f 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a  o the xUpdate .*
30060 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68  * invocation. Th
30070 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
30080 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f  ter (P3+P2-1) co
30090 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
300a0 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e   .** p2th elemen
300b0 74 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72  t of the argv ar
300c0 72 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55  ray passed to xU
300d0 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pdate..**.** The
300e0 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20   xUpdate method 
300f0 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45  will do a DELETE
30100 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72   or an INSERT or
30110 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72   both..** The ar
30120 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77  gv[0] element (w
30130 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73  hich corresponds
30140 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
30150 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f  P3).** is the ro
30160 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20  wid of a row to 
30170 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76  delete.  If argv
30180 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  [0] is NULL then
30190 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e   no .** deletion
301a0 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72   occurs.  The ar
301b0 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73  gv[1] element is
301c0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
301d0 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20  e new .** row.  
301e0 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c  This can be NULL
301f0 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72   to have the vir
30200 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63  tual table selec
30210 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  t the new .** ro
30220 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20  wid for itself. 
30230 20 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20   The subsequent 
30240 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  elements in the 
30250 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68  array are .** th
30260 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75  e values of colu
30270 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72  mns in the new r
30280 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d  ow..**.** If P2=
30290 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72  =1 then no inser
302a0 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20  t is performed. 
302b0 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20   argv[0] is the 
302c0 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f  rowid of.** a ro
302d0 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a  w to delete..**.
302e0 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65  ** P1 is a boole
302f0 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69  an flag. If it i
30300 73 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e  s set to true an
30310 64 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61  d the xUpdate ca
30320 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73  ll.** is success
30330 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ful, then the va
30340 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
30350 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
30360 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20  ert_rowid() .** 
30370 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
30380 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64  lue of the rowid
30390 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73   for the row jus
303a0 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 63  t inserted..*/.c
303b0 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20  ase OP_VUpdate: 
303c0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
303d0 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74   *pVtab;.  sqlit
303e0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
303f0 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a  le;.  int nArg;.
30400 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
30410 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20  e_int64 rowid;. 
30420 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20   Mem **apArg;.  
30430 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65  Mem *pX;..  asse
30440 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20  rt( pOp->p2==1  
30450 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35        || pOp->p5
30460 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70  ==OE_Fail   || p
30470 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62  Op->p5==OE_Rollb
30480 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70  ack .       || p
30490 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74  Op->p5==OE_Abort
304a0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
304b0 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70  Ignore || pOp->p
304c0 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20  5==OE_Replace.  
304d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
304e0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
304f0 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
30500 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
30510 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69   pModule = (sqli
30520 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74  te3_module *)pVt
30530 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e  ab->pModule;.  n
30540 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Arg = pOp->p2;. 
30550 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
30560 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b  type==P4_VTAB );
30570 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d  .  if( ALWAYS(pM
30580 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20  odule->xUpdate) 
30590 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e  ){.    u8 vtabOn
305a0 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76  Conflict = db->v
305b0 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20  tabOnConflict;. 
305c0 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70     apArg = p->ap
305d0 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61  Arg;.    pX = &a
305e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
305f0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
30600 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  g; i++){.      a
30610 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
30620 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d  d(pX) );.      m
30630 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
30640 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 73 71  p, pX);.      sq
30650 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
30660 65 54 79 70 65 28 70 58 29 3b 0a 20 20 20 20 20  eType(pX);.     
30670 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a   apArg[i] = pX;.
30680 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20        pX++;.    
30690 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e  }.    db->vtabOn
306a0 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e  Conflict = pOp->
306b0 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f  p5;.    rc = pMo
306c0 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56  dule->xUpdate(pV
306d0 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  tab, nArg, apArg
306e0 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64  , &rowid);.    d
306f0 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
30700 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  t = vtabOnConfli
30710 63 74 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56 74  ct;.    importVt
30720 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
30730 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
30740 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70  SQLITE_OK && pOp
30750 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73  ->p1 ){.      as
30760 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20  sert( nArg>1 && 
30770 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41  apArg[0] && (apA
30780 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d  rg[0]->flags&MEM
30790 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20  _Null) );.      
307a0 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
307b0 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69  lastRowid = rowi
307c0 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  d;.    }.    if(
307d0 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49   (rc&0xff)==SQLI
307e0 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26  TE_CONSTRAINT &&
307f0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
30800 62 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20  bConstraint ){. 
30810 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
30820 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20  ==OE_Ignore ){. 
30830 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
30840 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c  TE_OK;.      }el
30850 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65  se{.        p->e
30860 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70  rrorAction = ((p
30870 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61  Op->p5==OE_Repla
30880 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a  ce) ? OE_Abort :
30890 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20   pOp->p5);.     
308a0 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
308b0 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b      p->nChange++
308c0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
308d0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
308e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
308f0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
30900 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d  fndef  SQLITE_OM
30910 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
30920 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65  ./* Opcode: Page
30930 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  count P1 P2 * * 
30940 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
30950 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72  e current number
30960 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74   of pages in dat
30970 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f  abase P1 to memo
30980 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63  ry cell P2..*/.c
30990 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74  ase OP_Pagecount
309a0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
309b0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
309c0 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  e */.  pOut->u.i
309d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
309e0 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b  astPage(db->aDb[
309f0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20  pOp->p1].pBt);. 
30a00 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
30a10 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49  ...#ifndef  SQLI
30a20 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
30a30 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  AGMAS./* Opcode:
30a40 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32 20   MaxPgcnt P1 P2 
30a50 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79  P3 * *.**.** Try
30a60 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69   to set the maxi
30a70 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66  mum page count f
30a80 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 74  or database P1 t
30a90 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50  o the value in P
30aa0 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74  3..** Do not let
30ab0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
30ac0 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c  e count fall bel
30ad0 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  ow the current p
30ae0 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a  age count and.**
30af0 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74   do not change t
30b00 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
30b10 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50  count value if P
30b20 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  3==0..**.** Stor
30b30 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  e the maximum pa
30b40 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74  ge count after t
30b50 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67  he change in reg
30b60 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
30b70 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b  e OP_MaxPgcnt: {
30b80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
30b90 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
30ba0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
30bb0 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65   newMax;.  Btree
30bc0 20 2a 70 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20   *pBt;..  pBt = 
30bd0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
30be0 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d  .pBt;.  newMax =
30bf0 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   0;.  if( pOp->p
30c00 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20  3 ){.    newMax 
30c10 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
30c20 73 74 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20  stPage(pBt);.   
30c30 20 69 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75   if( newMax < (u
30c40 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20  nsigned)pOp->p3 
30c50 29 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69  ) newMax = (unsi
30c60 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20  gned)pOp->p3;.  
30c70 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
30c80 73 71 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50  sqlite3BtreeMaxP
30c90 61 67 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65  ageCount(pBt, ne
30ca0 77 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  wMax);.  break;.
30cb0 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  }.#endif...#ifnd
30cc0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
30cd0 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  RACE./* Opcode: 
30ce0 54 72 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a  Trace * * * P4 *
30cf0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
30d00 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
30d10 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
30d20 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
30d30 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
30d40 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
30d50 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
30d60 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
30d70 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63  e callback..*/.c
30d80 61 73 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a  ase OP_Trace: {.
30d90 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a    char *zTrace;.
30da0 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66    char *z;..  if
30db0 28 20 64 62 2d 3e 78 54 72 61 63 65 0a 20 20 20  ( db->xTrace.   
30dc0 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75  && !p->doingReru
30dd0 6e 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20  n.   && (zTrace 
30de0 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70  = (pOp->p4.z ? p
30df0 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53  Op->p4.z : p->zS
30e00 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ql))!=0.  ){.   
30e10 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   z = sqlite3Vdbe
30e20 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72  ExpandSql(p, zTr
30e30 61 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54  ace);.    db->xT
30e40 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41  race(db->pTraceA
30e50 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69  rg, z);.    sqli
30e60 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 29  te3DbFree(db, z)
30e70 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c  ;.  }.#ifdef SQL
30e80 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
30e90 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
30ea0 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30  ITE_SqlTrace)!=0
30eb0 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d  .   && (zTrace =
30ec0 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
30ed0 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
30ee0 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  l))!=0.  ){.    
30ef0 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
30f00 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25  tf("SQL-trace: %
30f10 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20  s\n", zTrace);. 
30f20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
30f30 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 62  ITE_DEBUG */.  b
30f40 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
30f50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70  ./* Opcode: Noop
30f60 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
30f70 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68   Do nothing.  Th
30f80 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
30f90 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61  s often useful a
30fa0 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74  s a jump.** dest
30fb0 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a  ination..*/./*.*
30fc0 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c  * The magic Expl
30fd0 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f  ain opcode are o
30fe0 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65  nly inserted whe
30ff0 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68  n explain==2 (wh
31000 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79  ich.** is to say
31010 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49   when the EXPLAI
31020 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e  N QUERY PLAN syn
31030 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a  tax is used.).**
31040 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63   This opcode rec
31050 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ords information
31060 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69   from the optimi
31070 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a  zer.  It is the.
31080 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61  ** the same as a
31090 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70   no-op.  This op
310a0 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61  codesnever appea
310b0 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20  rs in a real VM 
310c0 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61  program..*/.defa
310d0 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ult: {          
310e0 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c  /* This is reall
310f0 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50  y OP_Noop and OP
31100 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73  _Explain */.  as
31110 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
31120 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f  e==OP_Noop || pO
31130 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78  p->opcode==OP_Ex
31140 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b  plain );.  break
31150 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ;.}../**********
31160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
311a0 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73  ***.** The cases
311b0 20 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73   of the switch s
311c0 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74  tatement above t
311d0 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20  his line should 
311e0 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a  all be indented.
311f0 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20  ** by 6 spaces. 
31200 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f   But the left-mo
31210 73 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65  st 6 spaces have
31220 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f   been removed to
31230 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20   improve the.** 
31240 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72  readability.  Fr
31250 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e  om this point on
31260 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61   down, the norma
31270 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75  l indentation ru
31280 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f  les are.** resto
31290 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  red..***********
312a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
312b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
312c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
312d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
312e0 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65  **/.    }..#ifde
312f0 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
31300 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65     {.      u64 e
31310 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65 33  lapsed = sqlite3
31320 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74  Hwtime() - start
31330 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79 63  ;.      pOp->cyc
31340 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a  les += elapsed;.
31350 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b        pOp->cnt++
31360 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20  ;.#if 0.        
31370 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20  fprintf(stdout, 
31380 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73  "%10llu ", elaps
31390 65 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ed);.        sql
313a0 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
313b0 73 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20  stdout, origPc, 
313c0 26 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23  &aOp[origPc]);.#
313d0 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64  endif.    }.#end
313e0 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66  if..    /* The f
313f0 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64  ollowing code ad
31400 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68  ds nothing to th
31410 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f  e actual functio
31420 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  nality.    ** of
31430 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49   the program.  I
31440 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66  t is only here f
31450 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64  or testing and d
31460 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a  ebugging..    **
31470 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61   On the other ha
31480 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e  nd, it does burn
31490 20 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72   CPU cycles ever
314a0 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20  y time through. 
314b0 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61     ** the evalua
314c0 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65  tor loop.  So we
314d0 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75   can leave it ou
314e0 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73  t when NDEBUG is
314f0 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
31500 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
31510 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
31520 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20  -1 && pc<p->nOp 
31530 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
31540 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
31550 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
31560 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 66 70    if( rc!=0 ) fp
31570 72 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22  rintf(p->trace,"
31580 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20  rc=%d\n",rc);.  
31590 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
315a0 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55  lags & (OPFLG_OU
315b0 54 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50  T2_PRERELEASE|OP
315c0 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20  FLG_OUT2) ){.   
315d0 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
315e0 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70  ce(p->trace, pOp
315f0 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p2, &aMem[pOp-
31600 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p2]);.      }. 
31610 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70       if( pOp->op
31620 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
31630 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  T3 ){.        re
31640 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74  gisterTrace(p->t
31650 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 26  race, pOp->p3, &
31660 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
31670 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
31680 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ndif  /* SQLITE_
31690 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
316a0 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20   /* NDEBUG */.  
316b0 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66  }  /* The end of
316c0 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f   the for(;;) loo
316d0 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f  p the loops thro
316e0 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a  ugh opcodes */..
316f0 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
31700 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20   this point, it 
31710 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75  means that execu
31720 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64  tion is finished
31730 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72   with.  ** an er
31740 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ror of some kind
31750 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f  ..  */.vdbe_erro
31760 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74  r_halt:.  assert
31770 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20  ( rc );.  p->rc 
31780 3d 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65  = rc;.  testcase
31790 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
317a0 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
317b0 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72  .  sqlite3_log(r
317c0 63 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62  c, "statement ab
317d0 6f 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d  orts at %d: [%s]
317e0 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20   %s", .         
317f0 20 20 20 20 20 20 20 20 20 20 70 63 2c 20 70 2d            pc, p-
31800 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
31810 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
31820 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20  eHalt(p);.  if( 
31830 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc==SQLITE_IOERR
31840 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c  _NOMEM ) db->mal
31850 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
31860 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
31870 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74 53  OR;.  if( resetS
31880 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29  chemaOnFault>0 )
31890 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73  {.    sqlite3Res
318a0 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20  etOneSchema(db, 
318b0 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
318c0 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  lt-1);.  }..  /*
318d0 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
318e0 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69  y way out of thi
318f0 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65  s procedure.  We
31900 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65   have to.  ** re
31910 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78 65  lease the mutexe
31920 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74  s on btrees that
31930 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20 61   were acquired a
31940 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20  t the.  ** top. 
31950 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a  */.vdbe_return:.
31960 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
31970 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70  = lastRowid;.  p
31980 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
31990 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f  E_STMTSTATUS_VM_
319a0 53 54 45 50 2d 31 5d 20 2b 3d 20 28 69 6e 74 29  STEP-1] += (int)
319b0 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c 69 74  nVmStep;.  sqlit
319c0 65 33 56 64 62 65 4c 65 61 76 65 28 70 29 3b 0a  e3VdbeLeave(p);.
319d0 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20    return rc;..  
319e0 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
319f0 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  if a string or b
31a00 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20  lob larger than 
31a10 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
31a20 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e  H.  ** is encoun
31a30 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f  tered..  */.too_
31a40 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53 65  big:.  sqlite3Se
31a50 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
31a60 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e 67  Msg, db, "string
31a70 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67   or blob too big
31a80 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54  ");.  rc = SQLIT
31a90 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f  E_TOOBIG;.  goto
31aa0 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
31ab0 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
31ac0 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63  here if a malloc
31ad0 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e  () fails..  */.n
31ae0 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c  o_mem:.  db->mal
31af0 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
31b00 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
31b10 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
31b20 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  b, "out of memor
31b30 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  y");.  rc = SQLI
31b40 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f  TE_NOMEM;.  goto
31b50 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
31b60 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
31b70 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68  here for any oth
31b80 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c  er kind of fatal
31b90 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63   error.  The "rc
31ba0 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20  " variable.  ** 
31bb0 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20  should hold the 
31bc0 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20  error number..  
31bd0 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
31be0 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28  error:.  assert(
31bf0 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29   p->zErrMsg==0 )
31c00 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c  ;.  if( db->mall
31c10 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20  ocFailed ) rc = 
31c20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
31c30 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49  if( rc!=SQLITE_I
31c40 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  OERR_NOMEM ){.  
31c50 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
31c60 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
31c70 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
31c80 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20  3ErrStr(rc));.  
31c90 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  }.  goto vdbe_er
31ca0 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20  ror_halt;..  /* 
31cb0 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20  Jump to here if 
31cc0 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  the sqlite3_inte
31cd0 72 72 75 70 74 28 29 20 41 50 49 20 73 65 74 73  rrupt() API sets
31ce0 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20   the interrupt. 
31cf0 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61   ** flag..  */.a
31d00 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
31d10 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28  rrupt:.  assert(
31d20 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72   db->u1.isInterr
31d30 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20  upted );.  rc = 
31d40 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
31d50 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a  ;.  p->rc = rc;.
31d60 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
31d70 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
31d80 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
31d90 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20  3ErrStr(rc));.  
31da0 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
31db0 68 61 6c 74 3b 0a 7d 0a                          halt;.}.