/ Hex Artifact Content
Login

Artifact 595a240233b88960dd99380edf2fb7ec4317ee24:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f 75  lite3VdbeMemAbou
0940: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a 23  tToChange(P,M).#
0950: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d 65  else.# define me
0960: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 50  mAboutToChange(P
0970: 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,M).#endif../*.*
0980: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
0990: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
09a0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
09b0: 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72 73  very time a curs
09c0: 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69 74  or.** moves, eit
09d0: 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53 65  her by the OP_Se
09e0: 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20 6f  ekXX, OP_Next, o
09f0: 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64 65  r OP_Prev opcode
0a00: 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a 20  s.  The test.** 
0a10: 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20 74  procedures use t
0a20: 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
0a30: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  to make sure tha
0a40: 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a 2a  t indices are.**
0a50: 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74   working correct
0a60: 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61 62  ly.  This variab
0a70: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0a80: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0a90: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0aa0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0ab0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0ac0: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0ad0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ae0: 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
0af0: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
0b00: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69  ../*.** When thi
0b10: 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  s global variabl
0b20: 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20 69  e is positive, i
0b30: 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e 74  t gets decrement
0b40: 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a 2a  ed once before.*
0b50: 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74 69  * each instructi
0b60: 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e 20  on in the VDBE. 
0b70: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
0b80: 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73   zero, the u1.is
0b90: 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66  Interrupted.** f
0ba0: 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69  ield of the sqli
0bb0: 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73  te3 structure is
0bc0: 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f   set in order to
0bd0: 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74   simulate an int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  em;}../* Return 
1620: 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72 73  true if the curs
1630: 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  or was opened us
1640: 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e 53  ing the OP_OpenS
1650: 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a 2f  orter opcode. */
1660: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1670: 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 23  MIT_MERGE_SORT.#
1680: 20 64 65 66 69 6e 65 20 69 73 53 6f 72 74 65 72   define isSorter
1690: 28 78 29 20 30 0a 23 65 6c 73 65 0a 23 20 64 65  (x) 0.#else.# de
16a0: 66 69 6e 65 20 69 73 53 6f 72 74 65 72 28 78 29  fine isSorter(x)
16b0: 20 28 28 78 29 2d 3e 70 53 6f 72 74 65 72 21 3d   ((x)->pSorter!=
16c0: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
16d0: 20 41 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70   Argument pMem p
16e0: 6f 69 6e 74 73 20 61 74 20 61 20 72 65 67 69 73  oints at a regis
16f0: 74 65 72 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ter that will be
1700: 20 70 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20   passed to a.** 
1710: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
1720: 63 74 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65  ction or returne
1730: 64 20 74 6f 20 74 68 65 20 75 73 65 72 20 61 73  d to the user as
1740: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   the result of a
1750: 20 71 75 65 72 79 2e 0a 2a 2a 20 54 68 69 73 20   query..** This 
1760: 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65  routine sets the
1770: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 76 61 72 69   pMem->type vari
1780: 61 62 6c 65 20 75 73 65 64 20 62 79 20 74 68 65  able used by the
1790: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a   sqlite3_value_*
17a0: 28 29 20 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 2e  () .** routines.
17b0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
17c0: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
17d0: 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69  (Mem *pMem){.  i
17e0: 6e 74 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d  nt flags = pMem-
17f0: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 66 6c  >flags;.  if( fl
1800: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
1810: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
1820: 20 3d 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a   = SQLITE_NULL;.
1830: 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66    }.  else if( f
1840: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1850: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
1860: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45   = SQLITE_INTEGE
1870: 52 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66  R;.  }.  else if
1880: 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ( flags & MEM_Re
1890: 61 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  al ){.    pMem->
18a0: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c  type = SQLITE_FL
18b0: 4f 41 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  OAT;.  }.  else 
18c0: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
18d0: 53 74 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  Str ){.    pMem-
18e0: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54  >type = SQLITE_T
18f0: 45 58 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  EXT;.  }else{.  
1900: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1910: 51 4c 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a  QLITE_BLOB;.  }.
1920: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  }../*.** Allocat
1930: 65 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d  e VdbeCursor num
1940: 62 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72  ber iCur.  Retur
1950: 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  n a pointer to i
1960: 74 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a  t.  Return NULL.
1970: 2a 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74  ** if we run out
1980: 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73   of memory..*/.s
1990: 74 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72  tatic VdbeCursor
19a0: 20 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72   *allocateCursor
19b0: 28 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20  (.  Vdbe *p,    
19c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19d0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
19e0: 20 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20   */.  int iCur, 
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1a00: 6e 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20  ndex of the new 
1a10: 56 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20  VdbeCursor */.  
1a20: 69 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20  int nField,     
1a30: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a40: 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1a50: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1a60: 2a 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20  */.  int iDb,   
1a70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
1a80: 74 61 62 61 73 65 20 74 68 65 20 63 75 72 73 6f  tabase the curso
1a90: 72 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72  r belongs to, or
1aa0: 20 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42   -1 */.  int isB
1ab0: 74 72 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f  treeCursor     /
1ac0: 2a 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65  * True for B-Tre
1ad0: 65 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73  e.  False for ps
1ae0: 65 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74  eudo-table or vt
1af0: 61 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69  ab */.){.  /* Fi
1b00: 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  nd the memory ce
1b10: 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ll that will be 
1b20: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
1b30: 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79  e blob of memory
1b40: 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66  .  ** required f
1b50: 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72 73  or this VdbeCurs
1b60: 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49 74  or structure. It
1b70: 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74   is convenient t
1b80: 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64  o use a .  ** vd
1b90: 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  be memory cell t
1ba0: 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d  o manage the mem
1bb0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72  ory allocation r
1bc0: 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20  equired for a.  
1bd0: 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  ** VdbeCursor st
1be0: 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65 20  ructure for the 
1bf0: 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e  following reason
1c00: 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a  s:.  **.  **   *
1c10: 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f   Sometimes curso
1c20: 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73  r numbers are us
1c30: 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20  ed for a couple 
1c40: 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a  of different.  *
1c50: 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20 69  *     purposes i
1c60: 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d  n a vdbe program
1c70: 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74 20  . The different 
1c80: 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75 69  uses might requi
1c90: 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66  re.  **     diff
1ca0: 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f  erent sized allo
1cb0: 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20  cations. Memory 
1cc0: 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72  cells provide gr
1cd0: 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20  owable.  **     
1ce0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a  allocations..  *
1cf0: 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20  *.  **   * When 
1d00: 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d  using ENABLE_MEM
1d10: 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20  ORY_MANAGEMENT, 
1d20: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66  memory cell buff
1d30: 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20  ers can.  **    
1d40: 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79   be freed lazily
1d50: 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 33   via the sqlite3
1d60: 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
1d70: 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a  ) API. This.  **
1d80: 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74       minimizes t
1d90: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c  he number of mal
1da0: 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62  loc calls made b
1db0: 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20  y the system..  
1dc0: 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63  **.  ** Memory c
1dd0: 65 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73  ells for cursors
1de0: 20 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61   are allocated a
1df0: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
1e00: 20 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70   address.  ** sp
1e10: 61 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c  ace. Memory cell
1e20: 20 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65   (p->nMem) corre
1e30: 73 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72  sponds to cursor
1e40: 20 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20   0. Space for.  
1e50: 2a 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d  ** cursor 1 is m
1e60: 61 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79  anaged by memory
1e70: 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31   cell (p->nMem-1
1e80: 29 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d  ), etc..  */.  M
1e90: 65 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61  em *pMem = &p->a
1ea0: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72  Mem[p->nMem-iCur
1eb0: 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b  ];..  int nByte;
1ec0: 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ed0: 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20  Cx = 0;.  nByte 
1ee0: 3d 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28  = .      ROUND8(
1ef0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
1f00: 72 29 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73  r)) + .      (is
1f10: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1f20: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1f30: 7a 65 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20  ze():0) + .     
1f40: 20 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66   2*nField*sizeof
1f50: 28 75 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74  (u32);..  assert
1f60: 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  ( iCur<p->nCurso
1f70: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
1f80: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
1f90: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1fa0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1fb0: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
1fc0: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
1fd0: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
1fe0: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
1ff0: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c  dbeMemGrow(pMem,
2000: 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20   nByte, 0) ){.  
2010: 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d    p->apCsr[iCur]
2020: 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43 75   = pCx = (VdbeCu
2030: 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20  rsor*)pMem->z;. 
2040: 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30     memset(pCx, 0
2050: 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  , sizeof(VdbeCur
2060: 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e  sor));.    pCx->
2070: 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70  iDb = iDb;.    p
2080: 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69  Cx->nField = nFi
2090: 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69  eld;.    if( nFi
20a0: 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78  eld ){.      pCx
20b0: 2d 3e 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a  ->aType = (u32 *
20c0: 29 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38  )&pMem->z[ROUND8
20d0: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
20e0: 6f 72 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20  or))];.    }.   
20f0: 20 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73   if( isBtreeCurs
2100: 6f 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  or ){.      pCx-
2110: 3e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75  >pCursor = (BtCu
2120: 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
2130: 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38   &pMem->z[ROUND8
2140: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
2150: 6f 72 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69  or))+2*nField*si
2160: 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20  zeof(u32)];.    
2170: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
2180: 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43  rsorZero(pCx->pC
2190: 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
21a0: 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a  }.  return pCx;.
21b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20  }../*.** Try to 
21c0: 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20  convert a value 
21d0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
21e0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
21f0: 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f   we can.** do so
2200: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
2210: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49   information.  I
2220: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
2230: 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20  f the string.** 
2240: 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d  looks like a num
2250: 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ber, convert it 
2260: 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20  into a number.  
2270: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a  If it does not.*
2280: 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75  * look like a nu
2290: 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61  mber, leave it a
22a0: 6c 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  lone..*/.static 
22b0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
22c0: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
22d0: 52 65 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65  Rec){.  if( (pRe
22e0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
22f0: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d  Real|MEM_Int))==
2300: 30 20 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20  0 ){.    double 
2310: 72 56 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20  rValue;.    i64 
2320: 69 56 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65  iValue;.    u8 e
2330: 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a  nc = pRec->enc;.
2340: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2350: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30  lags&MEM_Str)==0
2360: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69   ) return;.    i
2370: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
2380: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
2390: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d   pRec->n, enc)==
23a0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  0 ) return;.    
23b0: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74  if( 0==sqlite3At
23c0: 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69  oi64(pRec->z, &i
23d0: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
23e0: 65 6e 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52  enc) ){.      pR
23f0: 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65  ec->u.i = iValue
2400: 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c  ;.      pRec->fl
2410: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
2420: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2430: 20 70 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75   pRec->r = rValu
2440: 65 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66  e;.      pRec->f
2450: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c  lags |= MEM_Real
2460: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
2470: 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  *.** Processing 
2480: 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20  is determine by 
2490: 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72  the affinity par
24a0: 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51  ameter:.**.** SQ
24b0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
24c0: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
24d0: 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  REAL:.** SQLITE_
24e0: 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20  AFF_NUMERIC:.** 
24f0: 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72     Try to conver
2500: 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74  t pRec to an int
2510: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2520: 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20  ion or a .**    
2530: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72  floating-point r
2540: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
2550: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
2560: 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20  esentation.**   
2570: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
2580: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
2590: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
25a0: 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20  ntation is.**   
25b0: 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65   always preferre
25c0: 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61  d, even if the a
25d0: 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c  ffinity is REAL,
25e0: 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61   because.**    a
25f0: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2600: 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65  entation is more
2610: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74   space efficient
2620: 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20   on disk..**.** 
2630: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a  SQLITE_AFF_TEXT:
2640: 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70  .**    Convert p
2650: 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65  Rec to a text re
2660: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  presentation..**
2670: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  .** SQLITE_AFF_N
2680: 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70  ONE:.**    No-op
2690: 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61  .  pRec is uncha
26a0: 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nged..*/.static 
26b0: 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69  void applyAffini
26c0: 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c  ty(.  Mem *pRec,
26d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
26e0: 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20   value to apply 
26f0: 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20  affinity to */. 
2700: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20   char affinity, 
2710: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
2720: 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
2730: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20  ed */.  u8 enc  
2740: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
2750: 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63  se this text enc
2760: 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66  oding */.){.  if
2770: 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  ( affinity==SQLI
2780: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20  TE_AFF_TEXT ){. 
2790: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d     /* Only attem
27a0: 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  pt the conversio
27b0: 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68 65  n to TEXT if the
27c0: 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  re is an integer
27d0: 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20   or real.    ** 
27e0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28  representation (
27f0: 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f  blob and NULL do
2800: 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74   not get convert
2810: 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e  ed) but no strin
2820: 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65  g.    ** represe
2830: 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a  ntation..    */.
2840: 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63      if( 0==(pRec
2850: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29  ->flags&MEM_Str)
2860: 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73   && (pRec->flags
2870: 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49  &(MEM_Real|MEM_I
2880: 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71  nt)) ){.      sq
2890: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
28a0: 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29  ngify(pRec, enc)
28b0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63  ;.    }.    pRec
28c0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
28d0: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a  _Real|MEM_Int);.
28e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69    }else if( affi
28f0: 6e 69 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46  nity!=SQLITE_AFF
2900: 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73  _NONE ){.    ass
2910: 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53  ert( affinity==S
2920: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
2930: 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53  R || affinity==S
2940: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20  QLITE_AFF_REAL. 
2950: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61              || a
2960: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2970: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20  AFF_NUMERIC );. 
2980: 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
2990: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
29a0: 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
29b0: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
29c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
29d0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
29e0: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20  y(pRec);.    }. 
29f0: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20   }.}../*.** Try 
2a00: 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74  to convert the t
2a10: 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ype of a functio
2a20: 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20  n argument or a 
2a30: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a  result column.**
2a40: 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20   into a numeric 
2a50: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20  representation. 
2a60: 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45   Use either INTE
2a70: 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63  GER or REAL whic
2a80: 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72  hever.** is appr
2a90: 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e  opriate.  But on
2aa0: 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72  ly do the conver
2ab0: 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f  sion if it is po
2ac0: 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a  ssible without.*
2ad0: 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
2ae0: 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e  ation and return
2af0: 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70   the revised typ
2b00: 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e of the argumen
2b10: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
2b20: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
2b30: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
2b40: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d  ue *pVal){.  Mem
2b50: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
2b60: 56 61 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d  Val;.  if( pMem-
2b70: 3e 74 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45  >type==SQLITE_TE
2b80: 58 54 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e  XT ){.    applyN
2b90: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
2ba0: 4d 65 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Mem);.    sqlite
2bb0: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
2bc0: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
2bd0: 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65  eturn pMem->type
2be0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
2bf0: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
2c00: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
2c10: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
2c20: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
2c30: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
2c40: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
2c50: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2c60: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2c70: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
2c80: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
2c90: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
2ca0: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
2cb0: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
2cc0: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
2cd0: 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  enc);.}..#ifdef 
2ce0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
2cf0: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
2d00: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2d10: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
2d20: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
2d30: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
2d40: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
2d50: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
2d60: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
2d70: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
2d80: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
2d90: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
2da0: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
2db0: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
2dc0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2dd0: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
2de0: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
2df0: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
2e00: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
2e10: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
2e20: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
2e30: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
2e40: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
2e50: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
2e60: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2e70: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
2e80: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
2e90: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
2ea0: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
2eb0: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
2ec0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2ed0: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
2ee0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
2ef0: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
2f00: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
2f10: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
2f20: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
2f30: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
2f40: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
2f50: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
2f60: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
2f70: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
2f80: 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a  zCsr, "%c", c);.
2f90: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
2fa0: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
2fb0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  );.    sqlite3_s
2fc0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
2fd0: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
2fe0: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
2ff0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3000: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
3010: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
3020: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
3030: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3040: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
3050: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
3060: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
3070: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3080: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3090: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
30a0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
30b0: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
30c0: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
30d0: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
30e0: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
30f0: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
3100: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
3110: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
3120: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
3130: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3140: 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63  zCsr, "]%s", enc
3150: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3160: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3170: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3180: 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20  Csr);.    if( f 
3190: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
31a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
31b0: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22  intf(100, zCsr,"
31c0: 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a  +%dz",pMem->u.nZ
31d0: 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  ero);.      zCsr
31e0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
31f0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3200: 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30  .    *zCsr = '\0
3210: 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66  ';.  }else if( f
3220: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
3230: 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20    int j, k;.    
3240: 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20  zBuf[0] = ' ';. 
3250: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
3260: 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  yn ){.      zBuf
3270: 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20  [1] = 'z';.     
3280: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3290: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
32a0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
32b0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
32c0: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
32d0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b    zBuf[1] = 't';
32e0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
32f0: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
3300: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3310: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3320: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
3330: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65      zBuf[1] = 'e
3340: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
3350: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3360: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
3370: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3380: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27     zBuf[1] = 's'
3390: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20  ;.    }.    k = 
33a0: 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  2;.    sqlite3_s
33b0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42  nprintf(100, &zB
33c0: 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65  uf[k], "%d", pMe
33d0: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  m->n);.    k += 
33e0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
33f0: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3400: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a  Buf[k++] = '[';.
3410: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31      for(j=0; j<1
3420: 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && j<pMem->n; 
3430: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63  j++){.      u8 c
3440: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20   = pMem->z[j];. 
3450: 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30       if( c>=0x20
3460: 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20   && c<0x7f ){.  
3470: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
3480: 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = c;.      }else
3490: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
34a0: 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++] = '.';.     
34b0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75   }.    }.    zBu
34c0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20  f[k++] = ']';.  
34d0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
34e0: 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c  tf(100,&zBuf[k],
34f0: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
3500: 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  enc]);.    k += 
3510: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3520: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3530: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20  Buf[k++] = 0;.  
3540: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  }.}.#endif..#ifd
3550: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3560: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20  /*.** Print the 
3570: 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73  value of a regis
3580: 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20  ter for tracing 
3590: 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61  purposes:.*/.sta
35a0: 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63  tic void memTrac
35b0: 65 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74  ePrint(FILE *out
35c0: 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28  , Mem *p){.  if(
35d0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
35e0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72 69  Null ){.    fpri
35f0: 6e 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c 22  ntf(out, " NULL"
3600: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3610: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3620: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3630: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3640: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
3650: 6f 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22 2c  out, " si:%lld",
3660: 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73   p->u.i);.  }els
3670: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
3680: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
3690: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 69  fprintf(out, " i
36a0: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
36b0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
36c0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
36d0: 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  INT.  }else if( 
36e0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
36f0: 65 61 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  eal ){.    fprin
3700: 74 66 28 6f 75 74 2c 20 22 20 72 3a 25 67 22 2c  tf(out, " r:%g",
3710: 20 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20   p->r);.#endif. 
3720: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3730: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
3740: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
3750: 6f 75 74 2c 20 22 20 28 72 6f 77 73 65 74 29 22  out, " (rowset)"
3760: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
3770: 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a  char zBuf[200];.
3780: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
3790: 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c  emPrettyPrint(p,
37a0: 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72 69   zBuf);.    fpri
37b0: 6e 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a 20  ntf(out, " ");. 
37c0: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
37d0: 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d  "%s", zBuf);.  }
37e0: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72  .}.static void r
37f0: 65 67 69 73 74 65 72 54 72 61 63 65 28 46 49 4c  egisterTrace(FIL
3800: 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65 67  E *out, int iReg
3810: 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70 72  , Mem *p){.  fpr
3820: 69 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b 25  intf(out, "REG[%
3830: 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20  d] = ", iReg);. 
3840: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 6f   memTracePrint(o
3850: 75 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e 74  ut, p);.  fprint
3860: 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a  f(out, "\n");.}.
3870: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
3880: 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64  QLITE_DEBUG.#  d
3890: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
38a0: 52 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d 3e  RACE(R,M) if(p->
38b0: 74 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72  trace)registerTr
38c0: 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c 4d  ace(p->trace,R,M
38d0: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
38e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
38f0: 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23  (R,M).#endif...#
3900: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
3910: 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d  LE../* .** hwtim
3920: 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c  e.h contains inl
3930: 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f  ine assembler co
3940: 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  de for implement
3950: 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72  ing .** high-per
3960: 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20  formance timing 
3970: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e  routines..*/.#in
3980: 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22  clude "hwtime.h"
3990: 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ..#endif../*.** 
39a0: 54 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  The CHECK_FOR_IN
39b0: 54 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64 65  TERRUPT macro de
39c0: 66 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b 73  fined here looks
39d0: 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a 2a   to see if the.*
39e0: 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  * sqlite3_interr
39f0: 75 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68 61  upt() routine ha
3a00: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20 20  s been called.  
3a10: 49 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c 20  If it has been, 
3a20: 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73 69  then.** processi
3a30: 6e 67 20 6f 66 20 74 68 65 20 56 44 42 45 20 70  ng of the VDBE p
3a40: 72 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72 72  rogram is interr
3a50: 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  upted..**.** Thi
3a60: 73 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74 6f  s macro added to
3a70: 20 65 76 65 72 79 20 69 6e 73 74 72 75 63 74 69   every instructi
3a80: 6f 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20 6a  on that does a j
3a90: 75 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ump in order to.
3aa0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 6c  ** implement a l
3ab0: 6f 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74 20  oop.  This test 
3ac0: 75 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65 76  used to be on ev
3ad0: 65 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74 72  ery single instr
3ae0: 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74  uction,.** but t
3af0: 68 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f 72  hat meant we mor
3b00: 65 20 74 65 73 74 69 6e 67 20 74 68 61 6e 20 77  e testing than w
3b10: 65 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f 6e  e needed.  By on
3b20: 6c 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a 2a  ly testing the.*
3b30: 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20 69  * flag on jump i
3b40: 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65 20  nstructions, we 
3b50: 67 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73 70  get a (small) sp
3b60: 65 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74 2e  eed improvement.
3b70: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45 43  .*/.#define CHEC
3b80: 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 20  K_FOR_INTERRUPT 
3b90: 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  \.   if( db->u1.
3ba0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
3bb0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
3bc0: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 0a 23  o_interrupt;...#
3bd0: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a  ifndef NDEBUG./*
3be0: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
3bf0: 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64  n is only called
3c00: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
3c10: 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73  assert() express
3c20: 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b  ion. It.** check
3c30: 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74  s that the sqlit
3c40: 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20  e3.nTransaction 
3c50: 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72  variable is corr
3c60: 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20  ectly set to.** 
3c70: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  the number of no
3c80: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
3c90: 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74  vepoints current
3ca0: 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69  ly in the .** li
3cb0: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
3cc0: 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53  ng at sqlite3.pS
3cd0: 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a  avepoint..** .**
3ce0: 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20   Usage:.**.**   
3cf0: 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
3d00: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
3d10: 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ) );.*/.static i
3d20: 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  nt checkSavepoin
3d30: 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a  tCount(sqlite3 *
3d40: 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30  db){.  int n = 0
3d50: 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
3d60: 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53  ;.  for(p=db->pS
3d70: 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70  avepoint; p; p=p
3d80: 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20  ->pNext) n++;.  
3d90: 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e  assert( n==(db->
3da0: 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
3db0: 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
3dc0: 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65  vepoint) );.  re
3dd0: 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66  turn 1;.}.#endif
3de0: 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ../*.** Transfer
3df0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74   error message t
3e00: 65 78 74 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69  ext from an sqli
3e10: 74 65 33 5f 76 74 61 62 2e 7a 45 72 72 4d 73 67  te3_vtab.zErrMsg
3e20: 20 28 74 65 78 74 20 73 74 6f 72 65 64 0a 2a 2a   (text stored.**
3e30: 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   in memory obtai
3e40: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
3e50: 5f 6d 61 6c 6c 6f 63 29 20 69 6e 74 6f 20 61 20  _malloc) into a 
3e60: 56 64 62 65 2e 7a 45 72 72 4d 73 67 20 28 74 65  Vdbe.zErrMsg (te
3e70: 78 74 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20  xt stored.** in 
3e80: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
3e90: 66 72 6f 6d 20 73 71 6c 69 74 65 33 44 62 4d 61  from sqlite3DbMa
3ea0: 6c 6c 6f 63 29 2e 0a 2a 2f 0a 73 74 61 74 69 63  lloc)..*/.static
3eb0: 20 76 6f 69 64 20 69 6d 70 6f 72 74 56 74 61 62   void importVtab
3ec0: 45 72 72 4d 73 67 28 56 64 62 65 20 2a 70 2c 20  ErrMsg(Vdbe *p, 
3ed0: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
3ee0: 74 61 62 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  tab){.  sqlite3 
3ef0: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 73  *db = p->db;.  s
3f00: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
3f10: 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
3f20: 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
3f30: 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c  ite3DbStrDup(db,
3f40: 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 29   pVtab->zErrMsg)
3f50: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
3f60: 28 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 29  (pVtab->zErrMsg)
3f70: 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
3f80: 73 67 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  sg = 0;.}.../*.*
3f90: 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63  * Execute as muc
3fa0: 68 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67  h of a VDBE prog
3fb0: 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68  ram as we can th
3fc0: 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a  en return..**.**
3fd0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
3fe0: 52 65 61 64 79 28 29 20 6d 75 73 74 20 62 65 20  Ready() must be 
3ff0: 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68  called before th
4000: 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  is routine in or
4010: 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20  der to.** close 
4020: 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68  the program with
4030: 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74   a final OP_Halt
4040: 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74   and to set up t
4050: 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20  he callbacks.** 
4060: 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65  and the error me
4070: 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a  ssage pointer..*
4080: 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20  *.** Whenever a 
4090: 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61  row or result da
40a0: 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  ta is available,
40b0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
40c0: 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76  ll either.** inv
40d0: 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20 63  oke the result c
40e0: 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72  allback (if ther
40f0: 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74  e is one) or ret
4100: 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  urn with.** SQLI
4110: 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66  TE_ROW..**.** If
4120: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
4130: 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f  ade to open a lo
4140: 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20 74  cked database, t
4150: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
4160: 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20  .** will either 
4170: 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20  invoke the busy 
4180: 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65  callback (if the
4190: 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74  re is one) or it
41a0: 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20   will.** return 
41b0: 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a  SQLITE_BUSY..**.
41c0: 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f  ** If an error o
41d0: 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20  ccurs, an error 
41e0: 6d 65 73 73 61 67 65 20 69 73 20 77 72 69 74 74  message is writt
41f0: 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74  en to memory obt
4200: 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71  ained.** from sq
4210: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61  lite3_malloc() a
4220: 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73  nd p->zErrMsg is
4230: 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74   made to point t
4240: 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a  o that memory..*
4250: 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65  * The error code
4260: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d   is stored in p-
4270: 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75  >rc and this rou
4280: 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c  tine returns SQL
4290: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
42a0: 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b   If the callback
42b0: 20 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f   ever returns no
42c0: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
42d0: 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a   program exits.*
42e0: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  * immediately.  
42f0: 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f  There will be no
4300: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62   error message b
4310: 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65  ut the p->rc fie
4320: 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  ld is.** set to 
4330: 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64  SQLITE_ABORT and
4340: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
4350: 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ll return SQLITE
4360: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20  _ERROR..**.** A 
4370: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
4380: 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73 20 70  n error causes p
4390: 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20 74  ->rc to be set t
43a0: 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61  o SQLITE_NOMEM a
43b0: 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69  nd this.** routi
43c0: 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c  ne to return SQL
43d0: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
43e0: 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72 72   Other fatal err
43f0: 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ors return SQLIT
4400: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41  E_ERROR..**.** A
4410: 66 74 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e  fter this routin
4420: 65 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  e has finished, 
4430: 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c  sqlite3VdbeFinal
4440: 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a  ize() should be.
4450: 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e  ** used to clean
4460: 20 75 70 20 74 68 65 20 6d 65 73 73 20 74 68 61   up the mess tha
4470: 74 20 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e  t was left behin
4480: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
4490: 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62  3VdbeExec(.  Vdb
44a0: 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20  e *p            
44b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
44c0: 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  DBE */.){.  int 
44d0: 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20  pc=0;           
44e0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72         /* The pr
44f0: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f  ogram counter */
4500: 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e  .  Op *aOp = p->
4510: 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  aOp;          /*
4520: 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20   Copy of p->aOp 
4530: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20  */.  Op *pOp;   
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4550: 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61  /* Current opera
4560: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63  tion */.  int rc
4570: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
4580: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
4590: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c   return */.  sql
45a0: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
45b0: 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64  ;       /* The d
45c0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20  atabase */.  u8 
45d0: 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
45e0: 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74  lt = 0; /* Reset
45f0: 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e   schema after an
4600: 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69   error if positi
4610: 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64  ve */.  u8 encod
4620: 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20  ing = ENC(db);  
4630: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4640: 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 23  se encoding */.#
4650: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4660: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4670: 42 41 43 4b 0a 20 20 69 6e 74 20 63 68 65 63 6b  BACK.  int check
4680: 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
4690: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 72 6f    /* True if pro
46a0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 73 20  gress callbacks 
46b0: 61 72 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  are enabled */. 
46c0: 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70   int nProgressOp
46d0: 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4f  s = 0;      /* O
46e0: 70 63 6f 64 65 73 20 65 78 65 63 75 74 65 64 20  pcodes executed 
46f0: 73 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20 63  since progress c
4700: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e 64  allback. */.#end
4710: 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d  if.  Mem *aMem =
4720: 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20   p->aMem;       
4730: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d  /* Copy of p->aM
4740: 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  em */.  Mem *pIn
4750: 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  1 = 0;          
4760: 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20     /* 1st input 
4770: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
4780: 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20   *pIn2 = 0;     
4790: 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69          /* 2nd i
47a0: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
47b0: 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b    Mem *pIn3 = 0;
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
47d0: 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  3rd input operan
47e0: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  d */.  Mem *pOut
47f0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4800: 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72    /* Output oper
4810: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f  and */.  int iCo
4820: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
4830: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
4840: 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65   last OP_Compare
4850: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
4860: 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20  int *aPermute = 
4870: 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65  0;         /* Pe
4880: 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c  rmutation of col
4890: 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70  umns for OP_Comp
48a0: 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73  are */.  i64 las
48b0: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
48c0: 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65  tRowid;  /* Save
48d0: 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c  d value of the l
48e0: 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44  ast insert ROWID
48f0: 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f   */.#ifdef VDBE_
4900: 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74  PROFILE.  u64 st
4910: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  art;            
4920: 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63       /* CPU cloc
4930: 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74  k count at start
4940: 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20   of opcode */.  
4950: 69 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20  int origPc;     
4960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72             /* Pr
4970: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74  ogram counter at
4980: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
4990: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a   */.#endif.  /**
49a0: 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55  * INSERT STACK U
49b0: 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a  NION HERE ***/..
49c0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67    assert( p->mag
49d0: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
49e0: 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65  UN );  /* sqlite
49f0: 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65  3_step() verifie
4a00: 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69  s this */.  sqli
4a10: 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b  te3VdbeEnter(p);
4a20: 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51  .  if( p->rc==SQ
4a30: 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
4a40: 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
4a50: 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  s if a malloc() 
4a60: 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f  inside a call to
4a70: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4a80: 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a  text() or.    **
4a90: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4aa0: 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e  text16() failed.
4ab0: 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f    */.    goto no
4ac0: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _mem;.  }.  asse
4ad0: 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  rt( p->rc==SQLIT
4ae0: 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53  E_OK || p->rc==S
4af0: 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20  QLITE_BUSY );.  
4b00: 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  p->rc = SQLITE_O
4b10: 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  K;.  assert( p->
4b20: 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20  explain==0 );.  
4b30: 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20  p->pResultSet = 
4b40: 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e  0;.  db->busyHan
4b50: 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a  dler.nBusy = 0;.
4b60: 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45    CHECK_FOR_INTE
4b70: 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65 33  RRUPT;.  sqlite3
4b80: 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70  VdbeIOTraceSql(p
4b90: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
4ba0: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
4bb0: 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68 65 63 6b  CALLBACK.  check
4bc0: 50 72 6f 67 72 65 73 73 20 3d 20 64 62 2d 3e 78  Progress = db->x
4bd0: 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a 23 65 6e  Progress!=0;.#en
4be0: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
4bf0: 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65  E_DEBUG.  sqlite
4c00: 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
4c10: 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70  oc();.  if( p->p
4c20: 63 3d 3d 30 20 20 26 26 20 28 70 2d 3e 64 62 2d  c==0  && (p->db-
4c30: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
4c40: 56 64 62 65 4c 69 73 74 69 6e 67 29 21 3d 30 20  VdbeListing)!=0 
4c50: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
4c60: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50    printf("VDBE P
4c70: 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c  rogram Listing:\
4c80: 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  n");.    sqlite3
4c90: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
4ca0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
4cb0: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
4cc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4cd0: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69  rintOp(stdout, i
4ce0: 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20  , &aOp[i]);.    
4cf0: 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45  }.  }.  sqlite3E
4d00: 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
4d10: 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70  ;.#endif.  for(p
4d20: 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c  c=p->pc; rc==SQL
4d30: 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20  ITE_OK; pc++){. 
4d40: 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30     assert( pc>=0
4d50: 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b   && pc<p->nOp );
4d60: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  .    if( db->mal
4d70: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
4d80: 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20   no_mem;.#ifdef 
4d90: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
4da0: 20 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20   origPc = pc;.  
4db0: 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65    start = sqlite
4dc0: 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69  3Hwtime();.#endi
4dd0: 66 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70  f.    pOp = &aOp
4de0: 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e  [pc];..    /* On
4df0: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
4e00: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
4e10: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
4e20: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4e30: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
4e40: 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
4e50: 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20    if( pc==0 ){. 
4e60: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56         printf("V
4e70: 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20 54 72  DBE Execution Tr
4e80: 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ace:\n");.      
4e90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4ea0: 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20 20  ntSql(p);.      
4eb0: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
4ec0: 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72  dbePrintOp(p->tr
4ed0: 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20  ace, pc, pOp);. 
4ee0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
4ef0: 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b    ..    /* Check
4f00: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65   to see if we ne
4f10: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61  ed to simulate a
4f20: 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68  n interrupt.  Th
4f30: 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a  is only happens.
4f40: 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76      ** if we hav
4f50: 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74  e a special test
4f60: 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23   build..    */.#
4f70: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
4f80: 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  T.    if( sqlite
4f90: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
4fa0: 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t>0 ){.      sql
4fb0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
4fc0: 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66  ount--;.      if
4fd0: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
4fe0: 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a  upt_count==0 ){.
4ff0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
5000: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
5010: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
5020: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
5030: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
5040: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f  S_CALLBACK.    /
5050: 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72  * Call the progr
5060: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ess callback if 
5070: 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  it is configured
5080: 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65   and the require
5090: 64 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20  d number.    ** 
50a0: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
50b0: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
50c0: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
50d0: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
50e0: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64      ** sqlite3Vd
50f0: 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63  beExec() or sinc
5100: 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20  e last time the 
5110: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5120: 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20  k was called).. 
5130: 20 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f     ** If the pro
5140: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72  gress callback r
5150: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
5160: 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61   exit the virtua
5170: 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20  l machine with. 
5180: 20 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63     ** a return c
5190: 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ode SQLITE_ABORT
51a0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
51b0: 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 20 29   checkProgress )
51c0: 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  {.      if( db->
51d0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50  nProgressOps==nP
51e0: 72 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20 20  rogressOps ){.  
51f0: 20 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20        int prc;. 
5200: 20 20 20 20 20 20 20 70 72 63 20 3d 20 64 62 2d         prc = db-
5210: 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70  >xProgress(db->p
5220: 50 72 6f 67 72 65 73 73 41 72 67 29 3b 0a 20 20  ProgressArg);.  
5230: 20 20 20 20 20 20 69 66 28 20 70 72 63 21 3d 30        if( prc!=0
5240: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63   ){.          rc
5250: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
5260: 55 50 54 3b 0a 20 20 20 20 20 20 20 20 20 20 67  UPT;.          g
5270: 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
5280: 61 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  alt;.        }. 
5290: 20 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73         nProgress
52a0: 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  Ops = 0;.      }
52b0: 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73  .      nProgress
52c0: 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e  Ops++;.    }.#en
52d0: 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61  dif..    /* On a
52e0: 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74  ny opcode with t
52f0: 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c 61  he "out2-prerela
5300: 73 65 22 20 74 61 67 2c 20 66 72 65 65 20 61 6e  se" tag, free an
5310: 79 0a 20 20 20 20 2a 2a 20 65 78 74 65 72 6e 61  y.    ** externa
5320: 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75  l allocations ou
5330: 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64  t of mem[p2] and
5340: 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20   set mem[p2] to 
5350: 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64  be.    ** an und
5360: 65 66 69 6e 65 64 20 69 6e 74 65 67 65 72 2e 20  efined integer. 
5370: 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c 20 65 69   Opcodes will ei
5380: 74 68 65 72 20 66 69 6c 6c 20 69 6e 20 74 68 65  ther fill in the
5390: 20 69 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a 20   integer.    ** 
53a0: 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72 74  value or convert
53b0: 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69   mem[p2] to a di
53c0: 66 66 65 72 65 6e 74 20 74 79 70 65 2e 0a 20 20  fferent type..  
53d0: 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
53e0: 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73   pOp->opflags==s
53f0: 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
5400: 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  erty[pOp->opcode
5410: 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  ] );.    if( pOp
5420: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
5430: 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53  G_OUT2_PRERELEAS
5440: 45 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  E ){.      asser
5450: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
5460: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5470: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p2<=p->nMem )
5480: 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26  ;.      pOut = &
5490: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
54a0: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
54b0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
54c0: 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c        VdbeMemRel
54d0: 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20  ease(pOut);.    
54e0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
54f0: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a  MEM_Int;.    }..
5500: 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68      /* Sanity ch
5510: 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20  ecking on other 
5520: 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64  operands */.#ifd
5530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
5540: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
5550: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
5560: 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  1)!=0 ){.      a
5570: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
5580: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5590: 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  ( pOp->p1<=p->nM
55a0: 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  em );.      asse
55b0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
55c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29  aMem[pOp->p1]) )
55d0: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
55e0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
55f0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b  &aMem[pOp->p1]);
5600: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
5610: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
5620: 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a  PFLG_IN2)!=0 ){.
5630: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5640: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
5650: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5660: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
5670: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
5680: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
5690: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p2]) );.      R
56a0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
56b0: 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p2, &aMem[pOp
56c0: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p2]);.    }.  
56d0: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
56e0: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  ags & OPFLG_IN3)
56f0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5700: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
5710: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5720: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
5730: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5740: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
5750: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
5760: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5770: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
5780: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5790: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
57a0: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
57b0: 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20  LG_OUT2)!=0 ){. 
57c0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
57d0: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
57e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
57f0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5800: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
5810: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
5820: 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2]);.    }.   
5830: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
5840: 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29  gs & OPFLG_OUT3)
5850: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5860: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
5870: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5880: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
5890: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
58a0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
58b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
58c0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20     }.#endif.  . 
58d0: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
58e0: 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a  opcode ){../****
58f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5900: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5910: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5920: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5930: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61  *********.** Wha
5940: 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d  t follows is a m
5950: 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73 74  assive switch st
5960: 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61  atement where ea
5970: 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e  ch case implemen
5980: 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65  ts a.** separate
5990: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20   instruction in 
59a0: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
59b0: 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c  ine.  If we foll
59c0: 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20  ow the usual.** 
59d0: 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76  indentation conv
59e0: 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61  entions, each ca
59f0: 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  se should be ind
5a00: 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63 65  ented by 6 space
5a10: 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20  s.  But.** that 
5a20: 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74  is a lot of wast
5a30: 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20  ed space on the 
5a40: 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f  left margin.  So
5a50: 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e   the code within
5a60: 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20 73  .** the switch s
5a70: 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72  tatement will br
5a80: 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74  eak with convent
5a90: 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68  ion and be flush
5aa0: 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a  -left. Another.*
5ab0: 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73  * big comment (s
5ac0: 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f  imilar to this o
5ad0: 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68  ne) will mark th
5ae0: 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63  e point in the c
5af0: 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20  ode where.** we 
5b00: 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20  transition back 
5b10: 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74  to normal indent
5b20: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ation..**.** The
5b30: 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65   formatting of e
5b40: 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f  ach case is impo
5b50: 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65  rtant.  The make
5b60: 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a  file for SQLite.
5b70: 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f  ** generates two
5b80: 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65   C files "opcode
5b90: 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65  s.h" and "opcode
5ba0: 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67  s.c" by scanning
5bb0: 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f   this.** file lo
5bc0: 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20  oking for lines 
5bd0: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
5be0: 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65  "case OP_".  The
5bf0: 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73   opcodes.h files
5c00: 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c  .** will be fill
5c10: 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65 73  ed with #defines
5c20: 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71 75   that give uniqu
5c30: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  e integer values
5c40: 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f   to each.** opco
5c50: 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64  de and the opcod
5c60: 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c  es.c file is fil
5c70: 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72 61  led with an arra
5c80: 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65  y of strings whe
5c90: 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e  re.** each strin
5ca0: 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69  g is the symboli
5cb0: 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63  c name for the c
5cc0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63  orresponding opc
5cd0: 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ode.  If the.** 
5ce0: 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69  case statement i
5cf0: 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
5d00: 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66  comment of the f
5d10: 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20  orm "/# same as 
5d20: 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20  ... #/".** that 
5d30: 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20  comment is used 
5d40: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
5d50: 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75   particular valu
5d60: 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e  e of the opcode.
5d70: 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79  .**.** Other key
5d80: 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d  words in the com
5d90: 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77  ment that follow
5da0: 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65 20  s each case are 
5db0: 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74  used to.** const
5dc0: 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49  ruct the OPFLG_I
5dd0: 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65  NITIALIZER value
5de0: 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65   that initialize
5df0: 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  s opcodeProperty
5e00: 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20  []..** Keywords 
5e10: 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e  include: in1, in
5e20: 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65  2, in3, out2_pre
5e30: 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f  release, out2, o
5e40: 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65  ut3.  See.** the
5e50: 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73   mkopcodeh.awk s
5e60: 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69  cript for additi
5e70: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
5e80: 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74  ..**.** Document
5e90: 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45  ation about VDBE
5ea0: 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65   opcodes is gene
5eb0: 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e  rated by scannin
5ec0: 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66  g this file.** f
5ed0: 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74  or lines of that
5ee0: 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65   contain "Opcode
5ef0: 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61  :".  That line a
5f00: 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  nd all subsequen
5f10: 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e  t.** comment lin
5f20: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74  es are used in t
5f30: 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
5f40: 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c   the opcode.html
5f50: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a   documentation.*
5f60: 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55  * file..**.** SU
5f70: 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  MMARY:.**.**    
5f80: 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69   Formatting is i
5f90: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69  mportant to scri
5fa0: 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68  pts that scan th
5fb0: 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20  is file..**     
5fc0: 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66  Do not deviate f
5fd0: 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69  rom the formatti
5fe0: 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74  ng style current
5ff0: 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  ly in use..**.**
6000: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6040: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
6050: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a   Opcode:  Goto *
6060: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
6070: 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  An unconditional
6080: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
6090: 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74   P2..** The next
60a0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65   instruction exe
60b0: 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a  cuted will be .*
60c0: 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64  * the one at ind
60d0: 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62  ex P2 from the b
60e0: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74  eginning of.** t
60f0: 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63  he program..*/.c
6100: 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20  ase OP_Goto: {  
6110: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6120: 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46 4f  mp */.  CHECK_FO
6130: 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  R_INTERRUPT;.  p
6140: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
6150: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6160: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6170: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6180: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6190: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
61a0: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
61b0: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
61c0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
61d0: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
61e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
61f0: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6200: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
6210: 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
6220: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
6230: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6240: 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
6250: 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29   & MEM_Dyn)==0 )
6260: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
6270: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
6280: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6290: 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e  EM_Int;.  pIn1->
62a0: 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49  u.i = pc;.  REGI
62b0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
62c0: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20  p1, pIn1);.  pc 
62d0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
62e0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
62f0: 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31  code:  Return P1
6300: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a   * * * *.**.** J
6310: 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ump to the next 
6320: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65  instruction afte
6330: 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  r the address in
6340: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f   register P1..*/
6350: 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a  .case OP_Return:
6360: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
6370: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
6380: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6390: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
63a0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
63b0: 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70  );.  pc = (int)p
63c0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61  In1->u.i;.  brea
63d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
63e0: 20 20 59 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a    Yield P1 * * *
63f0: 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68   *.**.** Swap th
6400: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
6410: 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  r with the value
6420: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
6430: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c  .*/.case OP_Yiel
6440: 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
6450: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  /* in1 */.  int 
6460: 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d  pcDest;.  pIn1 =
6470: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6480: 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
6490: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
64a0: 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d  n)==0 );.  pIn1-
64b0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
64c0: 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e  ;.  pcDest = (in
64d0: 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70  t)pIn1->u.i;.  p
64e0: 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20  In1->u.i = pc;. 
64f0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
6500: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
6510: 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20    pc = pcDest;. 
6520: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6530: 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c  code:  HaltIfNul
6540: 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  l  P1 P2 P3 P4 *
6550: 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
6560: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
6570: 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69 73  er P3.  If it is
6580: 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20   NULL then Halt 
6590: 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74  using.** paramet
65a0: 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50  er P1, P2, and P
65b0: 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72  4 as if this wer
65c0: 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63  e a Halt instruc
65d0: 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  tion.  If the.**
65e0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
65f0: 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c  er P3 is not NUL
6600: 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  L, then this rou
6610: 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tine is a no-op.
6620: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
6630: 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f  IfNull: {      /
6640: 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20  * in3 */.  pIn3 
6650: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
6660: 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  ;.  if( (pIn3->f
6670: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
6680: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
6690: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
66a0: 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d  nto OP_Halt */.}
66b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
66c0: 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  lt P1 P2 * P4 *.
66d0: 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64  **.** Exit immed
66e0: 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65  iately.  All ope
66f0: 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61  n cursors, etc a
6700: 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74  re closed.** aut
6710: 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a  omatically..**.*
6720: 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75  * P1 is the resu
6730: 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  lt code returned
6740: 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63   by sqlite3_exec
6750: 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65  (), sqlite3_rese
6760: 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74  t(),.** or sqlit
6770: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20  e3_finalize().  
6780: 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c  For a normal hal
6790: 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62  t, this should b
67a0: 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e  e SQLITE_OK (0).
67b0: 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20  .** For errors, 
67c0: 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f  it can be some o
67d0: 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20  ther value.  If 
67e0: 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69  P1!=0 then P2 wi
67f0: 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  ll determine.** 
6800: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
6810: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63  o rollback the c
6820: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
6830: 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c  on.  Do not roll
6840: 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f  back.** if P2==O
6850: 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72  E_Fail. Do the r
6860: 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f  ollback if P2==O
6870: 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20  E_Rollback.  If 
6880: 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a  P2==OE_Abort,.**
6890: 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61   then back out a
68a0: 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  ll changes that 
68b0: 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75  have occurred du
68c0: 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74  ring this execut
68d0: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44  ion of the.** VD
68e0: 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72  BE, but do not r
68f0: 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
6900: 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20  saction. .**.** 
6910: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c  If P4 is not nul
6920: 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20  l then it is an 
6930: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
6940: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  ring..**.** Ther
6950: 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20  e is an implied 
6960: 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73  "Halt 0 0 0" ins
6970: 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65  truction inserte
6980: 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e  d at the very en
6990: 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72  d of.** every pr
69a0: 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d  ogram.  So a jum
69b0: 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20  p past the last 
69c0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
69d0: 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73  he program.** is
69e0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65   the same as exe
69f0: 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a  cuting Halt..*/.
6a00: 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a  case OP_Halt: {.
6a10: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53    if( pOp->p1==S
6a20: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70  QLITE_OK && p->p
6a30: 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Frame ){.    /* 
6a40: 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f  Halt the sub-pro
6a50: 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e  gram. Return con
6a60: 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65  trol to the pare
6a70: 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20  nt frame. */.   
6a80: 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
6a90: 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
6aa0: 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20      p->pFrame = 
6ab0: 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
6ac0: 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d  .    p->nFrame--
6ad0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
6ae0: 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
6af0: 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20  p->nChange);.   
6b00: 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   pc = sqlite3Vdb
6b10: 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46  eFrameRestore(pF
6b20: 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52  rame);.    lastR
6b30: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
6b40: 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f  owid;.    if( pO
6b50: 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p2==OE_Ignore
6b60: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73   ){.      /* Ins
6b70: 74 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74  truction pc is t
6b80: 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68  he OP_Program th
6b90: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73  at invoked the s
6ba0: 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20  ub-program .    
6bb0: 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62    ** currently b
6bc0: 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20  eing halted. If 
6bd0: 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69  the p2 instructi
6be0: 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61  on of this OP_Ha
6bf0: 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74  lt.      ** inst
6c00: 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74  ruction is set t
6c10: 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65  o OE_Ignore, the
6c20: 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  n the sub-progra
6c30: 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20  m is throwing.  
6c40: 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45      ** an IGNORE
6c50: 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74   exception. In t
6c60: 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f  his case jump to
6c70: 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65   the address spe
6c80: 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20  cified.      ** 
6c90: 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65  as the p2 of the
6ca0: 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67   calling OP_Prog
6cb0: 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  ram.  */.      p
6cc0: 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70  c = p->aOp[pc].p
6cd0: 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  2-1;.    }.    a
6ce0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
6cf0: 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b   aMem = p->aMem;
6d00: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
6d10: 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e  .  p->rc = pOp->
6d20: 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63  p1;.  p->errorAc
6d30: 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e  tion = (u8)pOp->
6d40: 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63  p2;.  p->pc = pc
6d50: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  ;.  if( pOp->p4.
6d60: 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  z ){.    assert(
6d70: 20 70 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f   p->rc!=SQLITE_O
6d80: 4b 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  K );.    sqlite3
6d90: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
6da0: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
6db0: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
6dc0: 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74   testcase( sqlit
6dd0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
6de0: 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71  Log!=0 );.    sq
6df0: 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70  lite3_log(pOp->p
6e00: 31 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64 20  1, "abort at %d 
6e10: 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63  in [%s]: %s", pc
6e20: 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 4f 70 2d 3e  , p->zSql, pOp->
6e30: 70 34 2e 7a 29 3b 0a 20 20 7d 65 6c 73 65 20 69  p4.z);.  }else i
6e40: 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20  f( p->rc ){.    
6e50: 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65  testcase( sqlite
6e60: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c  3GlobalConfig.xL
6e70: 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  og!=0 );.    sql
6e80: 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31  ite3_log(pOp->p1
6e90: 2c 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  , "constraint fa
6ea0: 69 6c 65 64 20 61 74 20 25 64 20 69 6e 20 5b 25  iled at %d in [%
6eb0: 73 5d 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c  s]", pc, p->zSql
6ec0: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
6ed0: 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
6ee0: 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
6ef0: 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72  SQLITE_BUSY || r
6f00: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
6f10: 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52  rc==SQLITE_ERROR
6f20: 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   );.  if( rc==SQ
6f30: 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
6f40: 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
6f50: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
6f60: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
6f70: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
6f80: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 43   p->rc==SQLITE_C
6f90: 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20  ONSTRAINT );.   
6fa0: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6fb0: 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44  ITE_OK || db->nD
6fc0: 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 29 3b  eferredCons>0 );
6fd0: 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20  .    rc = p->rc 
6fe0: 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a  ? SQLITE_ERROR :
6ff0: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
7000: 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  }.  goto vdbe_re
7010: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
7020: 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50  de: Integer P1 P
7030: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
7040: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
7050: 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69   value P1 is wri
7060: 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tten into regist
7070: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7080: 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20  P_Integer: {    
7090: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
70a0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
70b0: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31  t->u.i = pOp->p1
70c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
70d0: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a   Opcode: Int64 *
70e0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
70f0: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
7100: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74   to a 64-bit int
7110: 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  eger value..** W
7120: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
7130: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7140: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
7150: 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  64: {           
7160: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
7170: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
7180: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20  pOp->p4.pI64!=0 
7190: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
71a0: 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a   *pOp->p4.pI64;.
71b0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
71c0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
71d0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f  FLOATING_POINT./
71e0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a  * Opcode: Real *
71f0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
7200: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
7210: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f   to a 64-bit flo
7220: 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
7230: 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74  e..** Write that
7240: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
7250: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
7260: 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20   OP_Real: {     
7270: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
7280: 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32  s TK_FLOAT, out2
7290: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
72a0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
72b0: 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72  EM_Real;.  asser
72c0: 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e  t( !sqlite3IsNaN
72d0: 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29  (*pOp->p4.pReal)
72e0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20   );.  pOut->r = 
72f0: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a  *pOp->p4.pReal;.
7300: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
7310: 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74  f../* Opcode: St
7320: 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20  ring8 * P2 * P4 
7330: 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  *.**.** P4 point
7340: 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69  s to a nul termi
7350: 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
7360: 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ng. This opcode 
7370: 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a  is transformed .
7380: 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74  ** into an OP_St
7390: 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69  ring before it i
73a0: 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74  s executed for t
73b0: 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a  he first time..*
73c0: 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67  /.case OP_String
73d0: 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  8: {         /* 
73e0: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e  same as TK_STRIN
73f0: 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  G, out2-prerelea
7400: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
7410: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
7420: 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
7430: 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70  OP_String;.  pOp
7440: 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74  ->p1 = sqlite3St
7450: 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a  rlen30(pOp->p4.z
7460: 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
7470: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
7480: 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51  if( encoding!=SQ
7490: 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20  LITE_UTF8 ){.   
74a0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
74b0: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
74c0: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20   pOp->p4.z, -1, 
74d0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
74e0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
74f0: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
7500: 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f  TOOBIG ) goto to
7510: 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53  o_big;.    if( S
7520: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
7530: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
7540: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
7550: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
7560: 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
7570: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f  Out->zMalloc==pO
7580: 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73  ut->z );.    ass
7590: 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ert( pOut->flags
75a0: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20 20   & MEM_Dyn );.  
75b0: 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20    pOut->zMalloc 
75c0: 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  = 0;.    pOut->f
75d0: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74  lags |= MEM_Stat
75e0: 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ic;.    pOut->fl
75f0: 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b  ags &= ~MEM_Dyn;
7600: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
7610: 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43  type==P4_DYNAMIC
7620: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
7630: 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d  3DbFree(db, pOp-
7640: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  >p4.z);.    }.  
7650: 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
7660: 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20  P4_DYNAMIC;.    
7670: 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74  pOp->p4.z = pOut
7680: 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31  ->z;.    pOp->p1
7690: 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a   = pOut->n;.  }.
76a0: 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70  #endif.  if( pOp
76b0: 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  ->p1>db->aLimit[
76c0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
76d0: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
76e0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
76f0: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
7700: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
7710: 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d  , OP_String */.}
7720: 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .  ./* Opcode: S
7730: 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50 34  tring P1 P2 * P4
7740: 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72   *.**.** The str
7750: 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20  ing value P4 of 
7760: 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73  length P1 (bytes
7770: 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  ) is stored in r
7780: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
7790: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b  ase OP_String: {
77a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
77b0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
77c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
77d0: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
77e0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
77f0: 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
7800: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
7810: 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
7820: 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70  pOut->n = pOp->p
7830: 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  1;.  pOut->enc =
7840: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
7850: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
7860: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
7870: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
7880: 75 6c 6c 20 2a 20 50 32 20 50 33 20 2a 20 2a 0a  ull * P2 P3 * *.
7890: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55  **.** Write a NU
78a0: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
78b0: 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65  s P2.  If P3 gre
78c0: 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68  ater than P2, th
78d0: 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a  en also write.**
78e0: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
78f0: 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 20  ter P3 and ever 
7900: 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74 77  register in betw
7910: 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20  een P2 and P3.  
7920: 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73  If P3.** is less
7930: 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63 61   than P2 (typica
7940: 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20  lly P3 is zero) 
7950: 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74  then only regist
7960: 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20  er P2 is.** set 
7970: 74 6f 20 4e 55 4c 4c 0a 2a 2f 0a 63 61 73 65 20  to NULL.*/.case 
7980: 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  OP_Null: {      
7990: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
79a0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
79b0: 20 63 6e 74 3b 0a 20 20 63 6e 74 20 3d 20 70 4f   cnt;.  cnt = pO
79c0: 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20  p->p3-pOp->p2;. 
79d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
79e0: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
79f0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
7a00: 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20  _Null;.  while( 
7a10: 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75  cnt>0 ){.    pOu
7a20: 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  t++;.    memAbou
7a30: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
7a40: 74 29 3b 0a 20 20 20 20 56 64 62 65 4d 65 6d 52  t);.    VdbeMemR
7a50: 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20  elease(pOut);.  
7a60: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
7a70: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 63 6e  MEM_Null;.    cn
7a80: 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  t--;.  }.  break
7a90: 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
7aa0: 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34   Blob P1 P2 * P4
7ab0: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
7ac0: 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61   to a blob of da
7ad0: 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67  ta P1 bytes long
7ae0: 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a  .  Store this.**
7af0: 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
7b00: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7b10: 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20  _Blob: {        
7b20: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7b30: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7b40: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20  assert( pOp->p1 
7b50: 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  <= SQLITE_MAX_LE
7b60: 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65  NGTH );.  sqlite
7b70: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
7b80: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
7b90: 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a  pOp->p1, 0, 0);.
7ba0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
7bb0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
7bc0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
7bd0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
7be0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69  ./* Opcode: Vari
7bf0: 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20  able P1 P2 * P4 
7c00: 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  *.**.** Transfer
7c10: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62   the values of b
7c20: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50  ound parameter P
7c30: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
7c40: 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  P2.**.** If the 
7c50: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d  parameter is nam
7c60: 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d  ed, then its nam
7c70: 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 20  e appears in P4 
7c80: 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20 54 68  and P3==1..** Th
7c90: 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73  e P4 value is us
7ca0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69  ed by sqlite3_bi
7cb0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
7cc0: 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e()..*/.case OP_
7cd0: 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20  Variable: {     
7ce0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7cf0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d  rerelease */.  M
7d00: 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20  em *pVar;       
7d10: 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74  /* Value being t
7d20: 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20  ransferred */.. 
7d30: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
7d40: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
7d50: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65  ->nVar );.  asse
7d60: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  rt( pOp->p4.z==0
7d70: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70   || pOp->p4.z==p
7d80: 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d  ->azVar[pOp->p1-
7d90: 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26  1] );.  pVar = &
7da0: 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20  p->aVar[pOp->p1 
7db0: 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  - 1];.  if( sqli
7dc0: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
7dd0: 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f  (pVar) ){.    go
7de0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
7df0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
7e00: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
7e10: 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74  , pVar, MEM_Stat
7e20: 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ic);.  UPDATE_MA
7e30: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
7e40: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7e50: 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31   Opcode: Move P1
7e60: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
7e70: 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73   Move the values
7e80: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
7e90: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
7ea0: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
7eb0: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
7ec0: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
7ed0: 31 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  1-1 are.** left 
7ee0: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
7ef0: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
7f00: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
7f10: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
7f20: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
7f30: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a  -1 to overlap..*
7f40: 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20  /.case OP_Move: 
7f50: 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f  {.  char *zMallo
7f60: 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20  c;   /* Holding 
7f70: 76 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c  variable for all
7f80: 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f  ocated memory */
7f90: 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
7fa0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7fb0: 20 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20   registers left 
7fc0: 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74  to copy */.  int
7fd0: 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p1;          /*
7fe0: 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70   Register to cop
7ff0: 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20  y from */.  int 
8000: 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p2;          /* 
8010: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
8020: 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f   to */..  n = pO
8030: 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f  p->p3;.  p1 = pO
8040: 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
8050: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
8060: 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20   n>0 && p1>0 && 
8070: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
8080: 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32  ( p1+n<=p2 || p2
8090: 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e  +n<=p1 );..  pIn
80a0: 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20  1 = &aMem[p1];. 
80b0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32   pOut = &aMem[p2
80c0: 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20  ];.  while( n-- 
80d0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
80e0: 4f 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  Out<=&aMem[p->nM
80f0: 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em] );.    asser
8100: 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 70  t( pIn1<=&aMem[p
8110: 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61  ->nMem] );.    a
8120: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
8130: 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d  d(pIn1) );.    m
8140: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
8150: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d  p, pOut);.    zM
8160: 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d  alloc = pOut->zM
8170: 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d  alloc;.    pOut-
8180: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
8190: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
81a0: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
81b0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
81c0: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f  DEBUG.    if( pO
81d0: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d  ut->pScopyFrom>=
81e0: 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75  &aMem[p1] && pOu
81f0: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 26 61  t->pScopyFrom<&a
8200: 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d 20  Mem[p1+pOp->p3] 
8210: 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70  ){.      pOut->p
8220: 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 31 20  ScopyFrom += p1 
8230: 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 20 20 7d  - pOp->p2;.    }
8240: 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49 6e 31  .#endif.    pIn1
8250: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c  ->zMalloc = zMal
8260: 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54 45  loc;.    REGISTE
8270: 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f  R_TRACE(p2++, pO
8280: 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ut);.    pIn1++;
8290: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d  .    pOut++;.  }
82a0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
82b0: 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20  Opcode: Copy P1 
82c0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d  P2 * * *.**.** M
82d0: 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65  ake a copy of re
82e0: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
82f0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
8300: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
8310: 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20  on makes a deep 
8320: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
8330: 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a  e.  A duplicate.
8340: 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e  ** is made of an
8350: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
8360: 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20   constant.  See 
8370: 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a  also OP_SCopy..*
8380: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20  /.case OP_Copy: 
8390: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
83a0: 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
83b0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
83c0: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
83d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
83e0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
83f0: 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65  pIn1 );.  sqlite
8400: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
8410: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
8420: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 44 65  MEM_Ephem);.  De
8430: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
8440: 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
8450: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
8460: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
8470: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70  ./* Opcode: SCop
8480: 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
8490: 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c  .** Make a shall
84a0: 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73  ow copy of regis
84b0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
84c0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
84d0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
84e0: 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20  makes a shallow 
84f0: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
8500: 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  e.  If the value
8510: 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20  .** is a string 
8520: 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68  or blob, then th
8530: 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61  e copy is only a
8540: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a   pointer to the.
8550: 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20  ** original and 
8560: 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69  hence if the ori
8570: 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f  ginal changes so
8580: 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a   will the copy..
8590: 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65  ** Worse, if the
85a0: 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61   original is dea
85b0: 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f  llocated, the co
85c0: 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c  py becomes inval
85d0: 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20  id..** Thus the 
85e0: 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61  program must gua
85f0: 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20  rantee that the 
8600: 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f  original will no
8610: 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69  t change.** duri
8620: 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20  ng the lifetime 
8630: 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73  of the copy.  Us
8640: 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b  e OP_Copy to mak
8650: 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20  e a complete.** 
8660: 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  copy..*/.case OP
8670: 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  _SCopy: {       
8680: 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74       /* in1, out
8690: 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
86a0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
86b0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
86c0: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
86d0: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
86e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
86f0: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
8700: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
8710: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
8720: 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75  _DEBUG.  if( pOu
8730: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30  t->pScopyFrom==0
8740: 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46   ) pOut->pScopyF
8750: 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64  rom = pIn1;.#end
8760: 69 66 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  if.  REGISTER_TR
8770: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
8780: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
8790: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c  /* Opcode: Resul
87a0: 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a  tRow P1 P2 * * *
87b0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
87c0: 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20  ters P1 through 
87d0: 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20  P1+P2-1 contain 
87e0: 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a  a single row of.
87f0: 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73  ** results. This
8800: 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74   opcode causes t
8810: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
8820: 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e  ) call to termin
8830: 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53  ate.** with an S
8840: 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e  QLITE_ROW return
8850: 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74   code and it set
8860: 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33  s up the sqlite3
8870: 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75  _stmt.** structu
8880: 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63  re to provide ac
8890: 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20  cess to the top 
88a0: 50 31 20 76 61 6c 75 65 73 20 61 73 20 74 68 65  P1 values as the
88b0: 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a   result.** row..
88c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
88d0: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
88e0: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
88f0: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
8900: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
8910: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8920: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
8930: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
8940: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  p2<=p->nMem+1 );
8950: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73  ..  /* If this s
8960: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f  tatement has vio
8970: 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20  lated immediate 
8980: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
8990: 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a  traints, do.  **
89a0: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20   not return the 
89b0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d  number of rows m
89c0: 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20  odified. And do 
89d0: 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20  not RELEASE the 
89e0: 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74  statement.  ** t
89f0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e  ransaction. It n
8a00: 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
8a10: 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66  d back.  */.  if
8a20: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
8a30: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
8a40: 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a  eckFk(p, 0)) ){.
8a50: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
8a60: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
8a70: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73  ntRows );.    as
8a80: 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d  sert( p->usesStm
8a90: 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20  tJournal );.    
8aa0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
8ab0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43   If the SQLITE_C
8ac0: 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73  ountRows flag is
8ad0: 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e   set in sqlite3.
8ae0: 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
8af0: 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65   .  ** DML state
8b00: 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69  ments invoke thi
8b10: 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75  s opcode to retu
8b20: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
8b30: 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69   rows .  ** modi
8b40: 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  fied to the user
8b50: 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  . This is the on
8b60: 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d  ly way that a VM
8b70: 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73   that.  ** opens
8b80: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
8b90: 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76  nsaction may inv
8ba0: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  oke this opcode.
8bb0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61  .  **.  ** In ca
8bc0: 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20  se this is such 
8bd0: 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f  a statement, clo
8be0: 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74  se any statement
8bf0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a   transaction.  *
8c00: 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73  * opened by this
8c10: 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72   VM before retur
8c20: 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  ning control to 
8c30: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
8c40: 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65  s to.  ** ensure
8c50: 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d   that statement-
8c60: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65  transactions are
8c70: 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20   always nested, 
8c80: 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e  not overlapping.
8c90: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65  .  ** If the ope
8ca0: 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  n statement-tran
8cb0: 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63  saction is not c
8cc0: 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e  losed here, then
8cd0: 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d   the user.  ** m
8ce0: 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20  ay step another 
8cf0: 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74  VM that opens it
8d00: 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20  s own statement 
8d10: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69  transaction. Thi
8d20: 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20  s.  ** may lead 
8d30: 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73  to overlapping s
8d40: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
8d50: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
8d60: 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   The statement t
8d70: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65  ransaction is ne
8d80: 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20  ver a top-level 
8d90: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65  transaction.  He
8da0: 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c  nce.  ** the REL
8db0: 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20  EASE call below 
8dc0: 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a  can never fail..
8dd0: 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
8de0: 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
8df0: 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  || db->flags&SQL
8e00: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
8e10: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
8e20: 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e  dbeCloseStatemen
8e30: 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52  t(p, SAVEPOINT_R
8e40: 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e  ELEASE);.  if( N
8e50: 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
8e60: 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  OK) ){.    break
8e70: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61  ;.  }..  /* Inva
8e80: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
8e90: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
8ea0: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
8eb0: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
8ec0: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
8ed0: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
8ee0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
8ef0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
8f00: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
8f10: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
8f20: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
8f30: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
8f40: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
8f50: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69  zed as.  ** a si
8f60: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
8f70: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
8f80: 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70  ultSet = &aMem[p
8f90: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69  Op->p1];.  for(i
8fa0: 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69  =0; i<pOp->p2; i
8fb0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
8fc0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65   memIsValid(&pMe
8fd0: 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65  m[i]) );.    Dee
8fe0: 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65  phemeralize(&pMe
8ff0: 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  m[i]);.    asser
9000: 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  t( (pMem[i].flag
9010: 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d  s & MEM_Ephem)==
9020: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  0.            ||
9030: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
9040: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
9050: 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  lob))==0 );.    
9060: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
9070: 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d  lTerminate(&pMem
9080: 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  [i]);.    sqlite
9090: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
90a0: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
90b0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
90c0: 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d  pOp->p1+i, &pMem
90d0: 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  [i]);.  }.  if( 
90e0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
90f0: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
9100: 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c  .  /* Return SQL
9110: 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70  ITE_ROW.  */.  p
9120: 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20  ->pc = pc + 1;. 
9130: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57   rc = SQLITE_ROW
9140: 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  ;.  goto vdbe_re
9150: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
9160: 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32  de: Concat P1 P2
9170: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64   P3 * *.**.** Ad
9180: 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72 65  d the text in re
9190: 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74  gister P1 onto t
91a0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65  he end of the te
91b0: 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  xt in.** registe
91c0: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
91d0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
91e0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
91f0: 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f 72  either the P1 or
9200: 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c   P2 text are NUL
9210: 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c  L then store NUL
9220: 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20  L in P3..**.**  
9230: 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a   P3 = P2 || P1.*
9240: 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
9250: 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33  al for P1 and P3
9260: 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20   to be the same 
9270: 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69  register. Someti
9280: 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73  mes,.** if P3 is
9290: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
92a0: 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d  er as P2, the im
92b0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20  plementation is 
92c0: 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  able.** to avoid
92d0: 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a   a memcpy()..*/.
92e0: 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20  case OP_Concat: 
92f0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
9300: 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54  ame as TK_CONCAT
9310: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9320: 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
9330: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
9340: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
9350: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
9360: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
9370: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
9380: 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75  ssert( pIn1!=pOu
9390: 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  t );.  if( (pIn1
93a0: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
93b0: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
93c0: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
93d0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
93e0: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
93f0: 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e  .  }.  if( Expan
9400: 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45  dBlob(pIn1) || E
9410: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20  xpandBlob(pIn2) 
9420: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
9430: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c   Stringify(pIn1,
9440: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74   encoding);.  St
9450: 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e  ringify(pIn2, en
9460: 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65  coding);.  nByte
9470: 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e   = pIn1->n + pIn
9480: 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74  2->n;.  if( nByt
9490: 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
94a0: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
94b0: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
94c0: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d  o_big;.  }.  Mem
94d0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
94e0: 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66  , MEM_Str);.  if
94f0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
9500: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
9510: 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70  nByte+2, pOut==p
9520: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
9530: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69   no_mem;.  }.  i
9540: 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b  f( pOut!=pIn2 ){
9550: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74  .    memcpy(pOut
9560: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49  ->z, pIn2->z, pI
9570: 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65  n2->n);.  }.  me
9580: 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49  mcpy(&pOut->z[pI
9590: 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c  n2->n], pIn1->z,
95a0: 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75   pIn1->n);.  pOu
95b0: 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30 3b  t->z[nByte] = 0;
95c0: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
95d0: 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d  +1] = 0;.  pOut-
95e0: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
95f0: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  rm;.  pOut->n = 
9600: 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
9610: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
9620: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
9630: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9640: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9650: 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50  Opcode: Add P1 P
9660: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 P3 * *.**.** A
9670: 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  dd the value in 
9680: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
9690: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
96a0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
96b0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
96c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
96d0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
96e0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
96f0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9700: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  */./* Opcode: Mu
9710: 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20  ltiply P1 P2 P3 
9720: 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c  * *.**.**.** Mul
9730: 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20  tiply the value 
9740: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
9750: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
9760: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
9770: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
9780: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
9790: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
97a0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
97b0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
97c0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
97d0: 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20   Subtract P1 P2 
97e0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62  P3 * *.**.** Sub
97f0: 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
9800: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66  in register P1 f
9810: 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rom the value in
9820: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
9830: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9840: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
9850: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
9860: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
9870: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
9880: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
9890: 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20  e: Divide P1 P2 
98a0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76  P3 * *.**.** Div
98b0: 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ide the value in
98c0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
98d0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
98e0: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
98f0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
9900: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
9910: 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74  (P3=P2/P1). If t
9920: 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20  he value in .** 
9930: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
9940: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ero, then the re
9950: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66  sult is NULL. If
9960: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
9970: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72   .** NULL, the r
9980: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
9990: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d  /./* Opcode: Rem
99a0: 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20  ainder P1 P2 P3 
99b0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74  * *.**.** Comput
99c0: 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  e the remainder 
99d0: 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 64 69  after integer di
99e0: 76 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 76 61  vision of the va
99f0: 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  lue in.** regist
9a00: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
9a10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9a20: 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  2 and store the 
9a30: 72 65 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a 2a  result in P3. .*
9a40: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
9a50: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  n register P2 is
9a60: 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74   zero the result
9a70: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20   is NULL..** If 
9a80: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
9a90: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
9aa0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
9ab0: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9ad0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53   same as TK_PLUS
9ae0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9af0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74   */.case OP_Subt
9b00: 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20  ract:           
9b10: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9b20: 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32  _MINUS, in1, in2
9b30: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
9b40: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20  P_Multiply:     
9b50: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9b60: 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31   as TK_STAR, in1
9b70: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
9b80: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20  ase OP_Divide:  
9b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9ba0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53   same as TK_SLAS
9bb0: 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  H, in1, in2, out
9bc0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d  3 */.case OP_Rem
9bd0: 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20  ainder: {       
9be0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9bf0: 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_REM, in1, in2,
9c00: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 66   out3 */.  int f
9c10: 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f  lags;      /* Co
9c20: 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61  mbined MEM_* fla
9c30: 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70  gs from both inp
9c40: 75 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  uts */.  i64 iA;
9c50: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
9c60: 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  ger value of lef
9c70: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
9c80: 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f  64 iB;         /
9c90: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
9ca0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
9cb0: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b   */.  double rA;
9cc0: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
9cd0: 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  lue of left oper
9ce0: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
9cf0: 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rB;      /* Real
9d00: 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20   value of right 
9d10: 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49  operand */..  pI
9d20: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
9d30: 70 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65  p1];.  applyNume
9d40: 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31  ricAffinity(pIn1
9d50: 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
9d60: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70  m[pOp->p2];.  ap
9d70: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
9d80: 74 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74  ty(pIn2);.  pOut
9d90: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
9da0: 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  ];.  flags = pIn
9db0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
9dc0: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
9dd0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
9de0: 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  !=0 ) goto arith
9df0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9e00: 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49 6e  null;.  if( (pIn
9e10: 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32 2d  1->flags & pIn2-
9e20: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
9e30: 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20  )==MEM_Int ){.  
9e40: 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69    iA = pIn1->u.i
9e50: 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d  ;.    iB = pIn2-
9e60: 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69 74 63 68  >u.i;.    switch
9e70: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
9e80: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
9e90: 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71  dd:       if( sq
9ea0: 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69  lite3AddInt64(&i
9eb0: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
9ec0: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
9ed0: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
9ee0: 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74  ract:  if( sqlit
9ef0: 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69  e3SubInt64(&iB,i
9f00: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
9f10: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
9f20: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
9f30: 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d  y:  if( sqlite3M
9f40: 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ulInt64(&iB,iA) 
9f50: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
9f60: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
9f70: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
9f80: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
9f90: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
9fa0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
9fb0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
9fc0: 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d  iA==-1 && iB==SM
9fd0: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67  ALLEST_INT64 ) g
9fe0: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20  oto fp_math;.   
9ff0: 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20       iB /= iA;. 
a000: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a010: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
a020: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
a030: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
a040: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a050: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
a060: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
a070: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
a080: 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20  iB %= iA;.      
a090: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
a0a0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
a0b0: 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d  >u.i = iB;.    M
a0c0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a0d0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
a0e0: 7d 65 6c 73 65 7b 0a 66 70 5f 6d 61 74 68 3a 0a  }else{.fp_math:.
a0f0: 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33      rA = sqlite3
a100: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
a110: 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71  n1);.    rB = sq
a120: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
a130: 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77  ue(pIn2);.    sw
a140: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
a150: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
a160: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
a170: 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20  rB += rA;       
a180: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
a190: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
a1a0: 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20    rB -= rA;     
a1b0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
a1c0: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
a1d0: 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20      rB *= rA;   
a1e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a1f0: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
a200: 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64   {.        /* (d
a210: 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20  ouble)0 In case 
a220: 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  of SQLITE_OMIT_F
a230: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e  LOATING_POINT...
a240: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
a250: 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20  rA==(double)0 ) 
a260: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
a270: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
a280: 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41          rB /= rA
a290: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
a2a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64  .      }.      d
a2b0: 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20  efault: {.      
a2c0: 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a    iA = (i64)rA;.
a2d0: 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69 36          iB = (i6
a2e0: 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66  4)rB;.        if
a2f0: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
a300: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
a310: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
a320: 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69    if( iA==-1 ) i
a330: 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72  A = 1;.        r
a340: 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20  B = (double)(iB 
a350: 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62  % iA);.        b
a360: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
a370: 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
a380: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
a390: 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e  POINT.    pOut->
a3a0: 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.i = rB;.    Me
a3b0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
a3c0: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c  t, MEM_Int);.#el
a3d0: 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  se.    if( sqlit
a3e0: 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20  e3IsNaN(rB) ){. 
a3f0: 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d       goto arithm
a400: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a410: 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  ull;.    }.    p
a420: 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20  Out->r = rB;.   
a430: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
a440: 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pOut, MEM_Real);
a450: 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 20  .    if( (flags 
a460: 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
a470: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
a480: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
a490: 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a  ty(pOut);.    }.
a4a0: 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
a4b0: 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f  ak;..arithmetic_
a4c0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a  result_is_null:.
a4d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a4e0: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
a4f0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a500: 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20  code: CollSeq * 
a510: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  * P4.**.** P4 is
a520: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
a530: 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20  CollSeq struct. 
a540: 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c  If the next call
a550: 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74   to a user funct
a560: 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67  ion.** or aggreg
a570: 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65  ate calls sqlite
a580: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
a590: 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f  ), this collatio
a5a0: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a  n sequence will.
a5b0: 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20  ** be returned. 
a5c0: 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
a5d0: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e  the built-in min
a5e0: 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75  (), max() and nu
a5f0: 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69  llif().** functi
a600: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69  ons..**.** The i
a610: 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62 79  nterface used by
a620: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
a630: 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65  ion of the afore
a640: 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69  mentioned functi
a650: 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65  ons.** to retrie
a660: 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  ve the collation
a670: 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79   sequence set by
a680: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
a690: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  not available.**
a6a0: 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20   publicly, only 
a6b0: 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  to user function
a6c0: 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e  s defined in fun
a6d0: 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  c.c..*/.case OP_
a6e0: 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73  CollSeq: {.  ass
a6f0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
a700: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
a710: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a720: 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20  pcode: Function 
a730: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
a740: 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73  *.** Invoke a us
a750: 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20  er function (P4 
a760: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
a770: 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63  a Function struc
a780: 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  ture that.** def
a790: 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  ines the functio
a7a0: 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d  n) with P5 argum
a7b0: 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ents taken from 
a7c0: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a  register P2 and.
a7d0: 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20  ** successors.  
a7e0: 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  The result of th
a7f0: 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74  e function is st
a800: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
a810: 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72   P3..** Register
a820: 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P3 must not be 
a830: 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  one of the funct
a840: 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a  ion inputs..**.*
a850: 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74  * P1 is a 32-bit
a860: 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74   bitmask indicat
a870: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
a880: 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  ot each argument
a890: 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63   to the .** func
a8a0: 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69  tion was determi
a8b0: 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61  ned to be consta
a8c0: 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69  nt at compile ti
a8d0: 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74  me. If the first
a8e0: 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73  .** argument was
a8f0: 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62   constant then b
a900: 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65  it 0 of P1 is se
a910: 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  t. This is used 
a920: 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  to determine.** 
a930: 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74  whether meta dat
a940: 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  a associated wit
a950: 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  h a user functio
a960: 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67  n argument using
a970: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
a980: 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50  set_auxdata() AP
a990: 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20  I may be safely 
a9a0: 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74  retained until t
a9b0: 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63  he next.** invoc
a9c0: 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70  ation of this op
a9d0: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
a9e0: 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e  also: AggStep an
a9f0: 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61  d AggFinal.*/.ca
aa00: 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20  se OP_Function: 
aa10: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  {.  int i;.  Mem
aa20: 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65   *pArg;.  sqlite
aa30: 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
aa40: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
aa50: 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b  *apVal;.  int n;
aa60: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ..  n = pOp->p5;
aa70: 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70  .  apVal = p->ap
aa80: 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61  Arg;.  assert( a
aa90: 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a  pVal || n==0 );.
aaa0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
aab0: 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
aac0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
aad0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
aae0: 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
aaf0: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
ab00: 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30  ..  assert( n==0
ab10: 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26   || (pOp->p2>0 &
ab20: 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e  & pOp->p2+n<=p->
ab30: 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73  nMem+1) );.  ass
ab40: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
ab50: 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p2 || pOp->p3>
ab60: 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20  =pOp->p2+n );.  
ab70: 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pArg = &aMem[pOp
ab80: 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p2];.  for(i=0
ab90: 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67  ; i<n; i++, pArg
aba0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
abb0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67   memIsValid(pArg
abc0: 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ) );.    apVal[i
abd0: 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65  ] = pArg;.    De
abe0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72  ephemeralize(pAr
abf0: 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  g);.    sqlite3V
ac00: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
ac10: 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53  pArg);.    REGIS
ac20: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
ac30: 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a  2+i, pArg);.  }.
ac40: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
ac50: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
ac60: 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70  EF || pOp->p4typ
ac70: 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43 20 29  e==P4_VDBEFUNC )
ac80: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  ;.  if( pOp->p4t
ac90: 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
aca0: 29 7b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63  ){.    ctx.pFunc
acb0: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
acc0: 3b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65 46  ;.    ctx.pVdbeF
acd0: 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  unc = 0;.  }else
ace0: 7b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65 46  {.    ctx.pVdbeF
acf0: 75 6e 63 20 3d 20 28 56 64 62 65 46 75 6e 63 2a  unc = (VdbeFunc*
ad00: 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75  )pOp->p4.pVdbeFu
ad10: 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e  nc;.    ctx.pFun
ad20: 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e  c = ctx.pVdbeFun
ad30: 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20  c->pFunc;.  }.. 
ad40: 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d   ctx.s.flags = M
ad50: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73  EM_Null;.  ctx.s
ad60: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e  .db = db;.  ctx.
ad70: 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
ad80: 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  x.s.zMalloc = 0;
ad90: 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
ada0: 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
adb0: 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
adc0: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
add0: 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65  .  ** the pointe
ade0: 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e  r to ctx.s so in
adf0: 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66   case the user-f
ae00: 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a  unction can use.
ae10: 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79    ** the already
ae20: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
ae30: 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
ae40: 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e  ocating a new on
ae50: 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
ae60: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74  3VdbeMemMove(&ct
ae70: 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65  x.s, pOut);.  Me
ae80: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74  mSetTypeFlag(&ct
ae90: 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  x.s, MEM_Null);.
aea0: 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
aeb0: 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46   0;.  if( ctx.pF
aec0: 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  unc->flags & SQL
aed0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
aee0: 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  L ){.    assert(
aef0: 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20   pOp>aOp );.    
af00: 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
af10: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
af20: 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EQ );.    assert
af30: 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
af40: 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
af50: 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20      ctx.pColl = 
af60: 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c  pOp[-1].p4.pColl
af70: 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c 61 73 74  ;.  }.  db->last
af80: 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
af90: 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63  d;.  (*ctx.pFunc
afa0: 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e  ->xFunc)(&ctx, n
afb0: 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50  , apVal); /* IMP
afc0: 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
afd0: 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64 20 3d  */.  lastRowid =
afe0: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
aff0: 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 61 75 78  .  /* If any aux
b000: 69 6c 69 61 72 79 20 64 61 74 61 20 66 75 6e 63  iliary data func
b010: 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e 20  tions have been 
b020: 63 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20 75  called by this u
b030: 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20  ser function,.  
b040: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 63  ** immediately c
b050: 61 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63 74  all the destruct
b060: 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73  or for any non-s
b070: 74 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20 20  tatic values..  
b080: 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56 64  */.  if( ctx.pVd
b090: 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73 71  beFunc ){.    sq
b0a0: 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41  lite3VdbeDeleteA
b0b0: 75 78 44 61 74 61 28 63 74 78 2e 70 56 64 62 65  uxData(ctx.pVdbe
b0c0: 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  Func, pOp->p1);.
b0d0: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62      pOp->p4.pVdb
b0e0: 65 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62  eFunc = ctx.pVdb
b0f0: 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e  eFunc;.    pOp->
b100: 70 34 74 79 70 65 20 3d 20 50 34 5f 56 44 42 45  p4type = P4_VDBE
b110: 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  FUNC;.  }..  if(
b120: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
b130: 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e  d ){.    /* Even
b140: 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63   though a malloc
b150: 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74  () has failed, t
b160: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
b170: 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  n of the.    ** 
b180: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61  user function ma
b190: 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e  y have called an
b1a0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
b1b0: 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20  XXX() function. 
b1c0: 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20     ** to return 
b1d0: 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c  a value. The fol
b1e0: 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65  lowing call rele
b1f0: 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63  ases any resourc
b200: 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69  es.    ** associ
b210: 61 74 65 64 20 77 69 74 68 20 73 75 63 68 20 61  ated with such a
b220: 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
b230: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b240: 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29  mRelease(&ctx.s)
b250: 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ;.    goto no_me
b260: 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  m;.  }..  /* If 
b270: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  the function ret
b280: 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20  urned an error, 
b290: 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69  throw an excepti
b2a0: 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e  on */.  if( ctx.
b2b0: 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73  isError ){.    s
b2c0: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
b2d0: 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
b2e0: 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
b2f0: 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73  alue_text(&ctx.s
b300: 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78  ));.    rc = ctx
b310: 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  .isError;.  }.. 
b320: 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
b330: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
b340: 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ion into registe
b350: 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65  r P3 */.  sqlite
b360: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
b370: 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f  ing(&ctx.s, enco
b380: 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  ding);.  sqlite3
b390: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
b3a0: 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28  , &ctx.s);.  if(
b3b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
b3c0: 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20  ooBig(pOut) ){. 
b3d0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
b3e0: 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f 2a  .  }..#if 0.  /*
b3f0: 20 54 68 65 20 61 70 70 2d 64 65 66 69 6e 65 64   The app-defined
b400: 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 64 6f   function has do
b410: 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  ne something tha
b420: 74 20 61 73 20 63 61 75 73 65 64 20 74 68 69 73  t as caused this
b430: 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  .  ** statement 
b440: 74 6f 20 65 78 70 69 72 65 2e 20 20 28 50 65 72  to expire.  (Per
b450: 68 61 70 73 20 74 68 65 20 66 75 6e 63 74 69 6f  haps the functio
b460: 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69 74 65 33  n called sqlite3
b470: 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20 77 69 74  _exec().  ** wit
b480: 68 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  h a CREATE TABLE
b490: 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20 2a   statement.).  *
b4a0: 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72  /.  if( p->expir
b4b0: 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45  ed ) rc = SQLITE
b4c0: 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a 0a  _ABORT;.#endif..
b4d0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
b4e0: 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b  (pOp->p3, pOut);
b4f0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
b500: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
b510: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
b520: 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50  ode: BitAnd P1 P
b530: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
b540: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
b550: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
b560: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
b570: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
b580: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
b590: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b5a0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
b5b0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
b5c0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b5d0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .*/./* Opcode: B
b5e0: 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  itOr P1 P2 P3 * 
b5f0: 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  *.**.** Take the
b600: 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20   bit-wise OR of 
b610: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
b620: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
b630: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
b640: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b650: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b660: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b670: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b680: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b690: 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74  pcode: ShiftLeft
b6a0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b6b0: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
b6c0: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
b6d0: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
b6e0: 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a  e left by the.**
b6f0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
b700: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
b710: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
b720: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
b730: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b740: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b750: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b760: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b770: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b780: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
b790: 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a  Right P1 P2 P3 *
b7a0: 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74   *.**.** Shift t
b7b0: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
b7c0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
b7d0: 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79 20  to the right by 
b7e0: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
b7f0: 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20   bits specified 
b800: 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  by the integer i
b810: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
b820: 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75  * Store the resu
b830: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b840: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b850: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b860: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b870: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  L..*/.case OP_Bi
b880: 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20  tAnd:           
b890: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b8a0: 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c   TK_BITAND, in1,
b8b0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
b8c0: 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20  se OP_BitOr:    
b8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b8e0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f   same as TK_BITO
b8f0: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
b900: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69  3 */.case OP_Shi
b910: 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20  ftLeft:         
b920: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b930: 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20  TK_LSHIFT, in1, 
b940: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b950: 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a  e OP_ShiftRight:
b960: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
b970: 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46  same as TK_RSHIF
b980: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
b990: 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20  3 */.  i64 iA;. 
b9a0: 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69   u64 uA;.  i64 i
b9b0: 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70  B;.  u8 op;..  p
b9c0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
b9d0: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
b9e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
b9f0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
ba00: 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
ba10: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
ba20: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
ba30: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
ba40: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
ba50: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
ba60: 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73  ak;.  }.  iA = s
ba70: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
ba80: 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d  ue(pIn2);.  iB =
ba90: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
baa0: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70  alue(pIn1);.  op
bab0: 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
bac0: 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74    if( op==OP_Bit
bad0: 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d  And ){.    iA &=
bae0: 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   iB;.  }else if(
baf0: 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b   op==OP_BitOr ){
bb00: 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20  .    iA |= iB;. 
bb10: 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30   }else if( iB!=0
bb20: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
bb30: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68  op==OP_ShiftRigh
bb40: 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  t || op==OP_Shif
bb50: 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a  tLeft );..    /*
bb60: 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79 20   If shifting by 
bb70: 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e  a negative amoun
bb80: 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65 20  t, shift in the 
bb90: 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20  other direction 
bba0: 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20  */.    if( iB<0 
bbb0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
bbc0: 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d   OP_ShiftRight==
bbd0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29  OP_ShiftLeft+1 )
bbe0: 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f  ;.      op = 2*O
bbf0: 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20  P_ShiftLeft + 1 
bc00: 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d  - op;.      iB =
bc10: 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20   iB>(-64) ? -iB 
bc20: 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  : 64;.    }..   
bc30: 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20   if( iB>=64 ){. 
bc40: 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30       iA = (iA>=0
bc50: 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74   || op==OP_Shift
bc60: 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a  Left) ? 0 : -1;.
bc70: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
bc80: 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41   memcpy(&uA, &iA
bc90: 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20  , sizeof(uA));. 
bca0: 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f       if( op==OP_
bcb0: 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20  ShiftLeft ){.   
bcc0: 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a       uA <<= iB;.
bcd0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
bce0: 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a       uA >>= iB;.
bcf0: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d          /* Sign-
bd00: 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68  extend on a righ
bd10: 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67  t shift of a neg
bd20: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a  ative number */.
bd30: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c 30          if( iA<0
bd40: 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34   ) uA |= ((((u64
bd50: 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32  )0xffffffff)<<32
bd60: 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c  )|0xffffffff) <<
bd70: 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20   (64-iB);.      
bd80: 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26  }.      memcpy(&
bd90: 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28  iA, &uA, sizeof(
bda0: 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  iA));.    }.  }.
bdb0: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41    pOut->u.i = iA
bdc0: 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
bdd0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
bde0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
bdf0: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d  * Opcode: AddImm
be00: 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a    P1 P2 * * *.**
be10: 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e   .** Add the con
be20: 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20  stant P2 to the 
be30: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
be40: 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73  r P1..** The res
be50: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e  ult is always an
be60: 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
be70: 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67  To force any reg
be80: 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69  ister to be an i
be90: 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64  nteger, just add
bea0: 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41   0..*/.case OP_A
beb0: 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20  ddImm: {        
bec0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
bed0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
bee0: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
bef0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
bf00: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
bf10: 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
bf20: 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  In1);.  pIn1->u.
bf30: 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  i += pOp->p2;.  
bf40: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
bf50: 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50  ode: MustBeInt P
bf60: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a  1 P2 * * *.** .*
bf70: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
bf80: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
bf90: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
bfa0: 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  r.  If the value
bfb0: 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74  .** in P1 is not
bfc0: 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20   an integer and 
bfd0: 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
bfe0: 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
bff0: 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64  ger.** without d
c000: 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a  ata loss, then j
c010: 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
c020: 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d  to P2, or if P2=
c030: 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53  =0.** raise an S
c040: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65  QLITE_MISMATCH e
c050: 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  xception..*/.cas
c060: 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20  e OP_MustBeInt: 
c070: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
c080: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
c090: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
c0a0: 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66 66  >p1];.  applyAff
c0b0: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
c0c0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
c0d0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28  encoding);.  if(
c0e0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c0f0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
c100: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
c110: 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
c120: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b  SQLITE_MISMATCH;
c130: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
c140: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
c150: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
c160: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
c170: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
c180: 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
c190: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49  Flag(pIn1, MEM_I
c1a0: 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
c1b0: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
c1c0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
c1d0: 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64  G_POINT./* Opcod
c1e0: 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20  e: RealAffinity 
c1f0: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
c200: 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20   If register P1 
c210: 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
c220: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c230: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a   real value..**.
c240: 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
c250: 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74 72  s used when extr
c260: 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  acting informati
c270: 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e  on from a column
c280: 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41   that.** has REA
c290: 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63  L affinity.  Suc
c2a0: 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20  h column values 
c2b0: 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f  may still be sto
c2c0: 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65  red as.** intege
c2d0: 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66  rs, for space ef
c2e0: 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66  ficiency, but af
c2f0: 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77  ter extraction w
c300: 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74  e want them.** t
c310: 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65  o have only a re
c320: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73  al value..*/.cas
c330: 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74  e OP_RealAffinit
c340: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
c350: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
c360: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
c370: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
c380: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c390: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69  _Int ){.    sqli
c3a0: 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66  te3VdbeMemRealif
c3b0: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
c3c0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
c3d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
c3e0: 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f  MIT_CAST./* Opco
c3f0: 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20  de: ToText P1 * 
c400: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
c410: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
c420: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
c430: 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65   text..** If the
c440: 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69   value is numeri
c450: 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  c, convert it to
c460: 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20   a string using 
c470: 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  the.** equivalen
c480: 74 20 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20  t of printf().  
c490: 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20  Blob values are 
c4a0: 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a  unchanged and.**
c4b0: 20 61 72 65 20 61 66 74 65 72 77 61 72 64 73 20   are afterwards 
c4c0: 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74  simply interpret
c4d0: 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a  ed as text..**.*
c4e0: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
c4f0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
c500: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
c510: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
c520: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65  .*/.case OP_ToTe
c530: 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  xt: {           
c540: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c550: 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e  s TK_TO_TEXT, in
c560: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
c570: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
c580: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
c590: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28  (p, pIn1);.  if(
c5a0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
c5b0: 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b  EM_Null ) break;
c5c0: 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53  .  assert( MEM_S
c5d0: 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33  tr==(MEM_Blob>>3
c5e0: 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  ) );.  pIn1->fla
c5f0: 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  gs |= (pIn1->fla
c600: 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b  gs&MEM_Blob)>>3;
c610: 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  .  applyAffinity
c620: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
c630: 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67  F_TEXT, encoding
c640: 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
c650: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73  Blob(pIn1);.  as
c660: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
c670: 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64  s & MEM_Str || d
c680: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
c690: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
c6a0: 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45   &= ~(MEM_Int|ME
c6b0: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c  M_Real|MEM_Blob|
c6c0: 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44  MEM_Zero);.  UPD
c6d0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
c6e0: 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b  (pIn1);.  break;
c6f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
c700: 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a  oBlob P1 * * * *
c710: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
c720: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c730: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c  er P1 to be a BL
c740: 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  OB..** If the va
c750: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
c760: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
c770: 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a  string first..**
c780: 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d   Strings are sim
c790: 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74 65  ply reinterprete
c7a0: 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20  d as blobs with 
c7b0: 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20  no change.** to 
c7c0: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
c7d0: 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ata..**.** A NUL
c7e0: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
c7f0: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
c800: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
c810: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
c820: 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20  e OP_ToBlob: {  
c830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c840: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
c850: 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20  _BLOB, in1 */.  
c860: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
c870: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
c880: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
c890: 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69  ull ) break;.  i
c8a0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
c8b0: 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29  & MEM_Blob)==0 )
c8c0: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
c8d0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
c8e0: 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64  _AFF_TEXT, encod
c8f0: 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ing);.    assert
c900: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
c910: 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d  MEM_Str || db->m
c920: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
c930: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
c940: 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pIn1, MEM_Blob
c950: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
c960: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pIn1->flags &= ~
c970: 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d  (MEM_TypeMask&~M
c980: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20  EM_Blob);.  }.  
c990: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
c9a0: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  IZE(pIn1);.  bre
c9b0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
c9c0: 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a  : ToNumeric P1 *
c9d0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c9e0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c9f0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
ca00: 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65  e numeric (eithe
ca10: 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20  r an.** integer 
ca20: 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  or a floating-po
ca30: 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20  int number.).** 
ca40: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
ca50: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72  text or blob, tr
ca60: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  y to convert it 
ca70: 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a  to an using the.
ca80: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
ca90: 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28   atoi() or atof(
caa0: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
cab0: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
cac0: 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69  ion .** is possi
cad0: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ble..**.** A NUL
cae0: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
caf0: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
cb00: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
cb10: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
cb20: 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20  e OP_ToNumeric: 
cb30: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
cb40: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
cb50: 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31  _TO_NUMERIC, in1
cb60: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
cb70: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73  em[pOp->p1];.  s
cb80: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d  qlite3VdbeMemNum
cb90: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 62  erify(pIn1);.  b
cba0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
cbb0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  * SQLITE_OMIT_CA
cbc0: 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ST */../* Opcode
cbd0: 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a  : ToInt P1 * * *
cbe0: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
cbf0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
cc00: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e  ster P1 to be an
cc10: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a   integer.  If.**
cc20: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75   The value is cu
cc30: 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e  rrently a real n
cc40: 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20  umber, drop its 
cc50: 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e  fractional part.
cc60: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
cc70: 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62   is text or blob
cc80: 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  , try to convert
cc90: 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65   it to an intege
cca0: 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  r using the.** e
ccb0: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
ccc0: 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20  i() and store 0 
ccd0: 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65  if no such conve
cce0: 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c  rsion is possibl
ccf0: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
cd00: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
cd10: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
cd20: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
cd30: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
cd40: 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20  OP_ToInt: {     
cd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cd60: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e  same as TK_TO_IN
cd70: 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  T, in1 */.  pIn1
cd80: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
cd90: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
cda0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
cdb0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
cdc0: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
cdd0: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  rify(pIn1);.  }.
cde0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20    break;.}..#if 
cdf0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
ce00: 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21 64  OMIT_CAST) && !d
ce10: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
ce20: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
ce30: 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  T)./* Opcode: To
ce40: 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Real P1 * * * *.
ce50: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
ce60: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
ce70: 72 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c 6f  r P1 to be a flo
ce80: 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
ce90: 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76 61  er..** If The va
cea0: 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79  lue is currently
ceb0: 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e   an integer, con
cec0: 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74  vert it..** If t
ced0: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
cee0: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
cef0: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
cf00: 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20  n integer using 
cf10: 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  the.** equivalen
cf20: 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20  t of atoi() and 
cf30: 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f 20  store 0.0 if no 
cf40: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
cf50: 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a  is possible..**.
cf60: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
cf70: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
cf80: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
cf90: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
cfa0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52  ..*/.case OP_ToR
cfb0: 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eal: {          
cfc0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
cfd0: 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69  as TK_TO_REAL, i
cfe0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
cff0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
d000: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
d010: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66  e(p, pIn1);.  if
d020: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
d030: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
d040: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d050: 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29  MemRealify(pIn1)
d060: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
d070: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
d080: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
d090: 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  CAST) && !define
d0a0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
d0b0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f  OATING_POINT) */
d0c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20  ../* Opcode: Lt 
d0d0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
d0e0: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65  *.** Compare the
d0f0: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
d100: 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ter P1 and P3.  
d110: 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50  If reg(P3)<reg(P
d120: 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20  1) then.** jump 
d130: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20  to address P2.  
d140: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
d150: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
d160: 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74  bit of P5 is set
d170: 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28   and either reg(
d180: 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33  P1) or.** reg(P3
d190: 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  ) is NULL then t
d1a0: 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49  ake the jump.  I
d1b0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
d1c0: 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20  PIFNULL .** bit 
d1d0: 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61  is clear then fa
d1e0: 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69  ll through if ei
d1f0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
d200: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
d210: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
d220: 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75  portion of P5 mu
d230: 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74  st be an affinit
d240: 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a  y character -.**
d250: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
d260: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  , SQLITE_AFF_INT
d270: 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72  EGER, and so for
d280: 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69  th. An attempt i
d290: 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f  s made .** to co
d2a0: 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73  erce both inputs
d2b0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
d2c0: 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f  is affinity befo
d2d0: 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  re the.** compar
d2e0: 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66  ison is made. If
d2f0: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
d300: 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68  MASK is 0x00, th
d310: 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66  en numeric.** af
d320: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20  finity is used. 
d330: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66  Note that the af
d340: 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f  finity conversio
d350: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a  ns are stored.**
d360: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69   back into the i
d370: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50  nput registers P
d380: 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68  1 and P3.  So th
d390: 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61  is opcode can ca
d3a0: 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e  use.** persisten
d3b0: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67  t changes to reg
d3c0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
d3d0: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79  ..**.** Once any
d3e0: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76   conversions hav
d3f0: 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61  e taken place, a
d400: 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65  nd neither value
d410: 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68   is NULL, .** th
d420: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  e values are com
d430: 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76  pared. If both v
d440: 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20  alues are blobs 
d450: 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73  then memcmp() is
d460: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65  .** used to dete
d470: 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  rmine the result
d480: 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  s of the compari
d490: 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61  son.  If both va
d4a0: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74  lues.** are text
d4b0: 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f  , then the appro
d4c0: 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67  priate collating
d4d0: 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66   function specif
d4e0: 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20  ied in.** P4 is 
d4f0: 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20   used to do the 
d500: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
d510: 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  P4 is not specif
d520: 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63  ied then.** memc
d530: 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  mp() is used to 
d540: 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72  compare text str
d550: 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61  ing.  If both va
d560: 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65  lues are.** nume
d570: 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65  ric, then a nume
d580: 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  ric comparison i
d590: 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74  s used. If the t
d5a0: 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  wo values.** are
d5b0: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79   of different ty
d5c0: 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72  pes, then number
d5d0: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
d5e0: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74   less than.** st
d5f0: 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67  rings and string
d600: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
d610: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
d620: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
d630: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69  QLITE_STOREP2 bi
d640: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  t of P5 is set, 
d650: 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70  then do not jump
d660: 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73  .  Instead,.** s
d670: 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72  tore a boolean r
d680: 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c  esult (either 0,
d690: 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20   or 1, or NULL) 
d6a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
d6b0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  */./* Opcode: Ne
d6c0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
d6d0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
d6e0: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
d6f0: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
d700: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
d710: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
d720: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
d730: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
d740: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20   are not equal. 
d750: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
d760: 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69  de for.** additi
d770: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
d780: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ..**.** If SQLIT
d790: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
d7a0: 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72  in P5 then the r
d7b0: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
d7c0: 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69  son is always ei
d7d0: 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20  ther.** true or 
d7e0: 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76  false and is nev
d7f0: 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74  er NULL.  If bot
d800: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
d810: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
d820: 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72  ult.** of compar
d830: 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20  ison is false.  
d840: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
d850: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  d is NULL then t
d860: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 72 75  he result is tru
d870: 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72  e..** If neither
d880: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
d890: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
d8a0: 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f  he same as it wo
d8b0: 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65  uld be if.** the
d8c0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66   SQLITE_NULLEQ f
d8d0: 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64  lag were omitted
d8e0: 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20   from P5..*/./* 
d8f0: 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32  Opcode: Eq P1 P2
d900: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
d910: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
d920: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
d930: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
d940: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
d950: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
d960: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
d970: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65   P1 and P3 are e
d980: 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65  qual..** See the
d990: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
d9a0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
d9b0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
d9c0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
d9d0: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
d9e0: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
d9f0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
da00: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
da10: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
da20: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
da30: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
da40: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
da50: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
da60: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
da70: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
da80: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
da90: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
daa0: 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65   false..** If ne
dab0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
dac0: 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74   NULL the result
dad0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
dae0: 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a  it would be if.*
daf0: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  * the SQLITE_NUL
db00: 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d  LEQ flag were om
db10: 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a  itted from P5..*
db20: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20  /./* Opcode: Le 
db30: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
db40: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
db50: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
db60: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
db70: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
db80: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
db90: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
dba0: 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74  ter P3 is less t
dbb0: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
dbc0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
dbd0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
dbe0: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
dbf0: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
dc00: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
dc10: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50  ./* Opcode: Gt P
dc20: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
dc30: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
dc40: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
dc50: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
dc60: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
dc70: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
dc80: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
dc90: 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72  er P3 is greater
dca0: 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e   than the conten
dcb0: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
dcc0: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
dcd0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
dce0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
dcf0: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
dd00: 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34  : Ge P1 P2 P3 P4
dd10: 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
dd20: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
dd30: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
dd40: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
dd50: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
dd60: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
dd70: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
dd80: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
dd90: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
dda0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
ddb0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
ddc0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
ddd0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
dde0: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
ddf0: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
de00: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
de10: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
de20: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
de30: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
de40: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
de50: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
de60: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
de80: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
de90: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
dea0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
dec0: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
ded0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
dee0: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
def0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
df00: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
df10: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
df20: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
df30: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
df40: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
df50: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
df60: 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
df70: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
df80: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
df90: 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70  f pIn1 against p
dfa0: 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  In3 */.  char af
dfb0: 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20  finity;      /* 
dfc0: 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20  Affinity to use 
dfd0: 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a  for comparison *
dfe0: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20  /.  u16 flags1; 
dff0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
e000: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
e010: 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20   of pIn1->flags 
e020: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b  */.  u16 flags3;
e030: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
e040: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
e050: 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73  e of pIn3->flags
e060: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
e070: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
e080: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
e090: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20  ->p3];.  flags1 
e0a0: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn1->flags;. 
e0b0: 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
e0c0: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
e0d0: 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d  ags1 | flags3)&M
e0e0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
e0f0: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
e100: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
e110: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
e120: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
e130: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
e140: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
e150: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
e160: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
e170: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
e180: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
e190: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
e1a0: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
e1b0: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
e1c0: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
e1d0: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
e1e0: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
e1f0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
e200: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
e210: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
e220: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
e230: 65 20 29 3b 0a 20 20 20 20 20 20 72 65 73 20 3d  e );.      res =
e240: 20 28 66 6c 61 67 73 31 20 26 20 66 6c 61 67 73   (flags1 & flags
e250: 33 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  3 & MEM_Null)==0
e260: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
e270: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c     /* SQLITE_NUL
e280: 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64  LEQ is clear and
e290: 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70   at least one op
e2a0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20  erand is NULL,. 
e2b0: 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
e2c0: 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
e2d0: 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a  s NULL..      **
e2e0: 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   The jump is tak
e2f0: 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45  en if the SQLITE
e300: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
e310: 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f  is set..      */
e320: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
e330: 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
e340: 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70  EP2 ){.        p
e350: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
e360: 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65  >p2];.        Me
e370: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
e380: 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
e390: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
e3a0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
e3b0: 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ut);.      }else
e3c0: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
e3d0: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
e3e0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d   ){.        pc =
e3f0: 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20   pOp->p2-1;.    
e400: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
e410: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
e420: 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f      /* Neither o
e430: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20  perand is NULL. 
e440: 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   Do a comparison
e450: 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74  . */.    affinit
e460: 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  y = pOp->p5 & SQ
e470: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20  LITE_AFF_MASK;. 
e480: 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 20     if( affinity 
e490: 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  ){.      applyAf
e4a0: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66 66  finity(pIn1, aff
e4b0: 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29  inity, encoding)
e4c0: 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  ;.      applyAff
e4d0: 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69  inity(pIn3, affi
e4e0: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
e4f0: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6d  .      if( db->m
e500: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
e510: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
e520: 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ..    assert( pO
e530: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
e540: 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
e550: 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
e560: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
e570: 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  );.    ExpandBlo
e580: 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 72 65 73  b(pIn3);.    res
e590: 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
e5a0: 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c  pare(pIn3, pIn1,
e5b0: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b   pOp->p4.pColl);
e5c0: 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70  .  }.  switch( p
e5d0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
e5e0: 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20    case OP_Eq:   
e5f0: 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20   res = res==0;  
e600: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
e610: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73  se OP_Ne:    res
e620: 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62   = res!=0;     b
e630: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
e640: 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Lt:    res = r
e650: 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es<0;      break
e660: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65  ;.    case OP_Le
e670: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d  :    res = res<=
e680: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
e690: 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20    case OP_Gt:   
e6a0: 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20   res = res>0;   
e6b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
e6c0: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73  fault:       res
e6d0: 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62   = res>=0;     b
e6e0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
e6f0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
e700: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
e710: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
e720: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41  p->p2];.    memA
e730: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
e740: 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65  pOut);.    MemSe
e750: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
e760: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
e770: 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20  ut->u.i = res;. 
e780: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
e790: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
e7a0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65  ;.  }else if( re
e7b0: 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
e7c0: 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 0a 20 20  p->p2-1;.  }..  
e7d0: 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e  /* Undo any chan
e7e0: 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c  ges made by appl
e7f0: 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74  yAffinity() to t
e800: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
e810: 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66  rs. */.  pIn1->f
e820: 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e 66 6c  lags = (pIn1->fl
e830: 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73  ags&~MEM_TypeMas
e840: 6b 29 20 7c 20 28 66 6c 61 67 73 31 26 4d 45 4d  k) | (flags1&MEM
e850: 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 70 49  _TypeMask);.  pI
e860: 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e  n3->flags = (pIn
e870: 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79  3->flags&~MEM_Ty
e880: 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
e890: 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b  3&MEM_TypeMask);
e8a0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
e8b0: 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
e8c0: 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
e8d0: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
e8e0: 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
e8f0: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
e900: 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74  operator to be t
e910: 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69  he array.** of i
e920: 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a  ntegers in P4..*
e930: 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61  *.** The permuta
e940: 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c  tion is only val
e950: 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  id until the nex
e960: 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  t OP_Permutation
e970: 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a  , OP_Compare,.**
e980: 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f 50 5f   OP_Halt, or OP_
e990: 52 65 73 75 6c 74 52 6f 77 2e 20 20 54 79 70 69  ResultRow.  Typi
e9a0: 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72  cally the OP_Per
e9b0: 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20  mutation should 
e9c0: 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64 69 61  occur.** immedia
e9d0: 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68  tely prior to th
e9e0: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f  e OP_Compare..*/
e9f0: 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61  .case OP_Permuta
ea00: 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74  tion: {.  assert
ea10: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
ea20: 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
ea30: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
ea40: 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65  ai );.  aPermute
ea50: 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
ea60: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
ea70: 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31  code: Compare P1
ea80: 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
ea90: 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65  * Compare two ve
eaa0: 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65  ctors of registe
eab0: 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72  rs in reg(P1)..r
eac0: 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c  eg(P1+P3-1) (cal
ead0: 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72  l this.** vector
eae0: 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67   "A") and in reg
eaf0: 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d  (P2)..reg(P2+P3-
eb00: 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65 20  1) ("B").  Save 
eb10: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a  the result of.**
eb20: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
eb30: 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6e  for use by the n
eb40: 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74  ext OP_Jump inst
eb50: 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  ruct..**.** P4 i
eb60: 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  s a KeyInfo stru
eb70: 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e  cture that defin
eb80: 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  es collating seq
eb90: 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a  uences and sort.
eba0: 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68  ** orders for th
ebb0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54  e comparison.  T
ebc0: 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61  he permutation a
ebd0: 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74  pplies to regist
ebe0: 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  ers.** only.  Th
ebf0: 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e  e KeyInfo elemen
ec00: 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71 75  ts are used sequ
ec10: 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  entially..**.** 
ec20: 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  The comparison i
ec30: 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69  s a sort compari
ec40: 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f  son, so NULLs co
ec50: 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20  mpare equal,.** 
ec60: 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74  NULLs are less t
ec70: 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d  han numbers, num
ec80: 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74 68  bers are less th
ec90: 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61  an strings,.** a
eca0: 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c  nd strings are l
ecb0: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
ecc0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61  */.case OP_Compa
ecd0: 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20  re: {.  int n;. 
ece0: 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31   int i;.  int p1
ecf0: 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f  ;.  int p2;.  co
ed00: 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  nst KeyInfo *pKe
ed10: 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78  yInfo;.  int idx
ed20: 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f  ;.  CollSeq *pCo
ed30: 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  ll;    /* Collat
ed40: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20  ing sequence to 
ed50: 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d  use on this term
ed60: 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20   */.  int bRev; 
ed70: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
ed80: 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20   for DESCENDING 
ed90: 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20  sort order */.. 
eda0: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
edb0: 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
edc0: 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61  p4.pKeyInfo;.  a
edd0: 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20  ssert( n>0 );.  
ede0: 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
edf0: 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f  !=0 );.  p1 = pO
ee00: 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
ee10: 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54  p->p2;.#if SQLIT
ee20: 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61 50  E_DEBUG.  if( aP
ee30: 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e  ermute ){.    in
ee40: 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20  t k, mx = 0;.   
ee50: 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b   for(k=0; k<n; k
ee60: 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74 65  ++) if( aPermute
ee70: 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50  [k]>mx ) mx = aP
ee80: 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61  ermute[k];.    a
ee90: 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
eea0: 31 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  1+mx<=p->nMem+1 
eeb0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
eec0: 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 70 2d  2>0 && p2+mx<=p-
eed0: 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 65 6c  >nMem+1 );.  }el
eee0: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
eef0: 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d  p1>0 && p1+n<=p-
ef00: 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61  >nMem+1 );.    a
ef10: 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
ef20: 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29  2+n<=p->nMem+1 )
ef30: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
ef40: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
ef50: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
ef60: 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20  i++){.    idx = 
ef70: 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d  aPermute ? aPerm
ef80: 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20  ute[i] : i;.    
ef90: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
efa0: 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  id(&aMem[p1+idx]
efb0: 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
efc0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
efd0: 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p2+idx]) );.  
efe0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
eff0: 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p1+idx, &aMem[p
f000: 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47  1+idx]);.    REG
f010: 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69  ISTER_TRACE(p2+i
f020: 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  dx, &aMem[p2+idx
f030: 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
f040: 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  i<pKeyInfo->nFie
f050: 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20  ld );.    pColl 
f060: 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c  = pKeyInfo->aCol
f070: 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d  l[i];.    bRev =
f080: 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74   pKeyInfo->aSort
f090: 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43  Order[i];.    iC
f0a0: 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33  ompare = sqlite3
f0b0: 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d  MemCompare(&aMem
f0c0: 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b  [p1+idx], &aMem[
f0d0: 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b  p2+idx], pColl);
f0e0: 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72  .    if( iCompar
f0f0: 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62  e ){.      if( b
f100: 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d  Rev ) iCompare =
f110: 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20   -iCompare;.    
f120: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
f130: 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20   }.  aPermute = 
f140: 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
f150: 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50  * Opcode: Jump P
f160: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
f170: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e  * Jump to the in
f180: 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64  struction at add
f190: 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20  ress P1, P2, or 
f1a0: 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  P3 depending on 
f1b0: 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68  whether.** in th
f1c0: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
f1d0: 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63  _Compare instruc
f1e0: 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74  tion the P1 vect
f1f0: 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e  or was less than
f200: 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72  .** equal to, or
f210: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
f220: 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73  e P2 vector, res
f230: 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61  pectively..*/.ca
f240: 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20  se OP_Jump: {   
f250: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
f260: 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70  p */.  if( iComp
f270: 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20  are<0 ){.    pc 
f280: 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20  = pOp->p1 - 1;. 
f290: 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70   }else if( iComp
f2a0: 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  are==0 ){.    pc
f2b0: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
f2c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20    }else{.    pc 
f2d0: 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20  = pOp->p3 - 1;. 
f2e0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
f2f0: 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31  * Opcode: And P1
f300: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
f310: 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61   Take the logica
f320: 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c  l AND of the val
f330: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  ues in registers
f340: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
f350: 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75  * write the resu
f360: 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  lt into register
f370: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69   P3..**.** If ei
f380: 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73  ther P1 or P2 is
f390: 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20   0 (false) then 
f3a0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20  the result is 0 
f3b0: 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  even if.** the o
f3c0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
f3d0: 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20  LL.  A NULL and 
f3e0: 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  true or two NULL
f3f0: 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c  s give.** a NULL
f400: 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f   output..*/./* O
f410: 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20  pcode: Or P1 P2 
f420: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
f430: 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52  e the logical OR
f440: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
f450: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
f460: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
f470: 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20  e the answer in 
f480: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
f490: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
f4a0: 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f  or P2 is nonzero
f4b0: 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65   (true) then the
f4c0: 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72   result is 1 (tr
f4d0: 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74  ue).** even if t
f4e0: 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
f4f0: 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
f500: 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f  and false or two
f510: 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61   NULLs.** give a
f520: 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
f530: 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20  .case OP_And:   
f540: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f550: 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e  me as TK_AND, in
f560: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
f570: 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20  case OP_Or: {   
f580: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f590: 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c  e as TK_OR, in1,
f5a0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
f5b0: 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65  int v1;    /* Le
f5c0: 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d  ft operand:  0==
f5d0: 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
f5e0: 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
f5f0: 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20  LL */.  int v2; 
f600: 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72     /* Right oper
f610: 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31  and: 0==FALSE, 1
f620: 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
f630: 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20  WN or NULL */.. 
f640: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
f650: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
f660: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
f670: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d  Null ){.    v1 =
f680: 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   2;.  }else{.   
f690: 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v1 = sqlite3Vdb
f6a0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
f6b0: 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d  =0;.  }.  pIn2 =
f6c0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
f6d0: 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61  .  if( pIn2->fla
f6e0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
f6f0: 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d  .    v2 = 2;.  }
f700: 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73  else{.    v2 = s
f710: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
f720: 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d  ue(pIn2)!=0;.  }
f730: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
f740: 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20  de==OP_And ){.  
f750: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
f760: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64  nsigned char and
f770: 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
f780: 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30  0, 0, 0, 1, 2, 0
f790: 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 2, 2 };.    v1
f7a0: 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a   = and_logic[v1*
f7b0: 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  3+v2];.  }else{.
f7c0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
f7d0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f   unsigned char o
f7e0: 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  r_logic[] = { 0,
f7f0: 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 2, 1, 1, 1, 
f800: 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76  2, 1, 2 };.    v
f810: 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a  1 = or_logic[v1*
f820: 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75  3+v2];.  }.  pOu
f830: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
f840: 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20  3];.  if( v1==2 
f850: 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ){.    MemSetTyp
f860: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
f870: 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Null);.  }else{.
f880: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
f890: 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  v1;.    MemSetTy
f8a0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
f8b0: 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
f8c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
f8d0: 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  : Not P1 P2 * * 
f8e0: 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  *.**.** Interpre
f8f0: 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
f900: 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20  egister P1 as a 
f910: 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20  boolean value.  
f920: 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f  Store the.** boo
f930: 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20  lean complement 
f940: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
f950: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
f960: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
f970: 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61  .** NULL, then a
f980: 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20   NULL is stored 
f990: 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
f9a0: 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  P_Not: {        
f9b0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f9c0: 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20  as TK_NOT, in1, 
f9d0: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
f9e0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
f9f0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
fa00: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
fa10: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
fa20: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
fa30: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
fa40: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  ull(pOut);.  }el
fa50: 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
fa60: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
fa70: 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62  Out, !sqlite3Vdb
fa80: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29  eIntValue(pIn1))
fa90: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
faa0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
fab0: 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
fac0: 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
fad0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
fae0: 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e  egister P1 as an
faf0: 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65   integer.  Store
fb00: 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d   the.** ones-com
fb10: 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50  plement of the P
fb20: 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  1 value into reg
fb30: 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31  ister P2.  If P1
fb40: 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c   holds.** a NULL
fb50: 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55   then store a NU
fb60: 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  LL in P2..*/.cas
fb70: 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20  e OP_BitNot: {  
fb80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
fb90: 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c  me as TK_BITNOT,
fba0: 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
fbb0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
fbc0: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
fbd0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
fbe0: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
fbf0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
fc00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
fc10: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
fc20: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
fc30: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
fc40: 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69  nt64(pOut, ~sqli
fc50: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
fc60: 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72  pIn1));.  }.  br
fc70: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
fc80: 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20  e: Once P1 P2 * 
fc90: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  * *.**.** Check 
fca0: 69 66 20 4f 50 5f 4f 6e 63 65 20 66 6c 61 67 20  if OP_Once flag 
fcb0: 50 31 20 69 73 20 73 65 74 2e 20 49 66 20 73 6f  P1 is set. If so
fcc0: 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
fcd0: 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77  ction P2. Otherw
fce0: 69 73 65 2c 0a 2a 2a 20 73 65 74 20 74 68 65 20  ise,.** set the 
fcf0: 66 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20 74 68  flag and fall th
fd00: 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
fd10: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
fd20: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4a  *.** See also: J
fd30: 75 6d 70 4f 6e 63 65 0a 2a 2f 0a 63 61 73 65 20  umpOnce.*/.case 
fd40: 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20  OP_Once: {      
fd50: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
fd60: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
fd70: 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67  >p1<p->nOnceFlag
fd80: 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e   );.  if( p->aOn
fd90: 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20  ceFlag[pOp->p1] 
fda0: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
fdb0: 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  >p2-1;.  }else{.
fdc0: 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67      p->aOnceFlag
fdd0: 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20  [pOp->p1] = 1;. 
fde0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
fdf0: 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20  * Opcode: If P1 
fe00: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
fe10: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
fe20: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
fe30: 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20  ter P1 is true. 
fe40: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
fe50: 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65   considered true
fe60: 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69   if it is numeri
fe70: 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  c and non-zero. 
fe80: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
fe90: 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
fea0: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
feb0: 70 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  p if P3 is non-z
fec0: 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ero..*/./* Opcod
fed0: 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50  e: IfNot P1 P2 P
fee0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
fef0: 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
ff00: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ff10: 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68  P1 is False.  Th
ff20: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f  e value.** is co
ff30: 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69  nsidered false i
ff40: 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72  f it has a numer
ff50: 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f  ic value of zero
ff60: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
ff70: 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
ff80: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
ff90: 75 6d 70 20 69 66 20 50 33 20 69 73 20 7a 65 72  ump if P3 is zer
ffa0: 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  o..*/.case OP_If
ffb0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
ffc0: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
ffd0: 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a  /.case OP_IfNot:
ffe0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
fff0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
10000 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20  int c;.  pIn1 = 
10010 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
10020 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
10030 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
10040 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b      c = pOp->p3;
10050 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66  .  }else{.#ifdef
10060 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
10070 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
10080 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
10090 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
100a0 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20  ;.#else.    c = 
100b0 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
100c0 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b  alue(pIn1)!=0.0;
100d0 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
100e0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
100f0 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a  IfNot ) c = !c;.
10100 20 20 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a 20    }.  if( c ){. 
10110 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d     pc = pOp->p2-
10120 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
10130 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73  }../* Opcode: Is
10140 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
10150 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
10160 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
10170 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
10180 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
10190 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
101a0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
101b0 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
101c0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
101d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
101e0 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
101f0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10200 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  )!=0 ){.    pc =
10210 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
10220 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
10230 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c   Opcode: NotNull
10240 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
10250 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
10260 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
10270 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74  gister P1 is not
10280 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65   NULL.  .*/.case
10290 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20   OP_NotNull: {  
102a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
102b0 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c  e as TK_NOTNULL,
102c0 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
102d0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
102e0 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
102f0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10300 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
10310 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
10320 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10330 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  ../* Opcode: Col
10340 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  umn P1 P2 P3 P4 
10350 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  P5.**.** Interpr
10360 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74  et the data that
10370 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
10380 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74  s to as a struct
10390 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a  ure built using.
103a0 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ** the MakeRecor
103b0 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  d instruction.  
103c0 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63  (See the MakeRec
103d0 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61  ord opcode for a
103e0 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66  dditional.** inf
103f0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
10400 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
10410 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74   data.)  Extract
10420 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
10430 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72  n.** from this r
10440 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65  ecord.  If there
10450 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28   are less that (
10460 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73  P2+1) .** values
10470 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
10480 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a  extract a NULL..
10490 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
104a0 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f  extracted is sto
104b0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
104c0 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P3..**.** If the
104d0 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73   column contains
104e0 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66   fewer than P2 f
104f0 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72  ields, then extr
10500 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c  act a NULL.  Or,
10510 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72  .** if the P4 ar
10520 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d  gument is a P4_M
10530 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  EM use the value
10540 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   of the P4 argum
10550 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ent as.** the re
10560 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sult..**.** If t
10570 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  he OPFLAG_CLEARC
10580 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20  ACHE bit is set 
10590 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20  on P5 and P1 is 
105a0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  a pseudo-table c
105b0 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74  ursor,.** then t
105c0 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20  he cache of the 
105d0 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20  cursor is reset 
105e0 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74  prior to extract
105f0 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a  ing the column..
10600 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f  ** The first OP_
10610 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61  Column against a
10620 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66   pseudo-table af
10630 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ter the value of
10640 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
10650 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61  register has cha
10660 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65  nged should have
10670 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a   this bit set..*
10680 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e  /.case OP_Column
10690 3a 20 7b 0a 20 20 75 33 32 20 70 61 79 6c 6f 61  : {.  u32 payloa
106a0 64 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62  dSize;   /* Numb
106b0 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
106c0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
106d0 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64 payloadSize64
106e0 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62  ; /* Number of b
106f0 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
10700 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20  rd */.  int p1; 
10710 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 31             /* P1
10720 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70   value of the op
10730 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32  code */.  int p2
10740 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10750 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f  column number to
10760 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56   retrieve */.  V
10770 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
10780 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
10790 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rsor */.  char *
107a0 7a 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  zRec;        /* 
107b0 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c  Pointer to compl
107c0 65 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20  ete record-data 
107d0 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  */.  BtCursor *p
107e0 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42  Crsr;   /* The B
107f0 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20  Tree cursor */. 
10800 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20   u32 *aType;    
10810 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20      /* aType[i] 
10820 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69  holds the numeri
10830 63 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d  c type of the i-
10840 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75  th column */.  u
10850 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20  32 *aOffset;    
10860 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20    /* aOffset[i] 
10870 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61  is offset to sta
10880 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69  rt of data for i
10890 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
108a0 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
108b0 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20     /* number of 
108c0 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
108d0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  cord */.  int le
108e0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
108f0 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  The length of th
10900 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74  e serialized dat
10910 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  a for the column
10920 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
10930 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
10940 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68   counter */.  ch
10950 61 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20  ar *zData;      
10960 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20   /* Part of the 
10970 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
10980 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  oded */.  Mem *p
10990 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Dest;        /* 
109a0 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74  Where to write t
109b0 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c  he extracted val
109c0 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d  ue */.  Mem sMem
109d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
109e0 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
109f0 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
10a00 65 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78  ed */.  u8 *zIdx
10a10 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
10a20 64 65 78 20 69 6e 74 6f 20 68 65 61 64 65 72 20  dex into header 
10a30 2a 2f 0a 20 20 75 38 20 2a 7a 45 6e 64 48 64 72  */.  u8 *zEndHdr
10a40 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
10a50 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
10a60 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
10a70 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65  r */.  u32 offse
10a80 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66  t;        /* Off
10a90 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  set into the dat
10aa0 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65  a */.  u32 szFie
10ab0 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ld;       /* Num
10ac0 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
10ad0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
10ae0 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20   field */.  int 
10af0 73 7a 48 64 72 3b 20 20 20 20 20 20 20 20 20 2f  szHdr;         /
10b00 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65  * Size of the he
10b10 61 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20  ader size field 
10b20 61 74 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f  at start of reco
10b30 72 64 20 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69  rd */.  int avai
10b40 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
10b50 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
10b60 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20   available data 
10b70 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20  */.  u32 t;     
10b80 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70          /* A typ
10b90 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  e code from the 
10ba0 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f  record header */
10bb0 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20  .  Mem *pReg;   
10bc0 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54        /* PseudoT
10bd0 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73  able input regis
10be0 74 65 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20  ter */...  p1 = 
10bf0 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
10c00 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20  pOp->p2;.  pC = 
10c10 30 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65  0;.  memset(&sMe
10c20 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
10c30 6d 29 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  m));.  assert( p
10c40 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
10c50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
10c60 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
10c70 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65  p->nMem );.  pDe
10c80 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
10c90 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
10ca0 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
10cb0 29 3b 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a 0a  );.  zRec = 0;..
10cc0 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20    /* This block 
10cd0 73 65 74 73 20 74 68 65 20 76 61 72 69 61 62 6c  sets the variabl
10ce0 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f  e payloadSize to
10cf0 20 62 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   be the total nu
10d00 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74  mber of.  ** byt
10d10 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
10d20 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63  ..  **.  ** zRec
10d30 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68   is set to be th
10d40 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  e complete text 
10d50 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 66  of the record if
10d60 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65   it is available
10d70 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c  ..  ** The compl
10d80 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74 20  ete record text 
10d90 69 73 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61  is always availa
10da0 62 6c 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  ble for pseudo-t
10db0 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68  ables.  ** If th
10dc0 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
10dd0 65 64 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20  ed in a cursor, 
10de0 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63  the complete rec
10df0 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69  ord text.  ** mi
10e00 67 68 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65  ght be available
10e10 20 69 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f   in the  pC->aRo
10e20 77 20 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20  w cache.  Or it 
10e30 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20  might not be..  
10e40 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 20 69  ** If the data i
10e50 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20  s unavailable,  
10e60 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e  zRec is set to N
10e70 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  ULL..  **.  ** W
10e80 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74  e also compute t
10e90 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
10ea0 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f  umns in the reco
10eb0 72 64 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73  rd.  For cursors
10ec0 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65  ,.  ** the numbe
10ed0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20  r of columns is 
10ee0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64  stored in the Vd
10ef0 62 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20  beCursor.nField 
10f00 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20  element..  */.  
10f10 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31  pC = p->apCsr[p1
10f20 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
10f30 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  =0 );.#ifndef SQ
10f40 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
10f50 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28  LTABLE.  assert(
10f60 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
10f70 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ==0 );.#endif.  
10f80 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
10f90 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72  sor;.  if( pCrsr
10fa0 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  !=0 ){.    /* Th
10fb0 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
10fc0 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a  ed in a B-Tree *
10fd0 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
10fe0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
10ff0 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
11000 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
11010 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
11020 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
11030 77 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f  w ){.      paylo
11040 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20  adSize = 0;.    
11050 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61  }else if( pC->ca
11060 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61  cheStatus==p->ca
11070 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20  cheCtr ){.      
11080 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43  payloadSize = pC
11090 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  ->payloadSize;. 
110a0 20 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61       zRec = (cha
110b0 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20  r*)pC->aRow;.   
110c0 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69   }else if( pC->i
110d0 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20  sIndex ){.      
110e0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
110f0 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
11100 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
11110 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
11120 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
11130 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79  Size(pCrsr, &pay
11140 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20  loadSize64);.   
11150 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
11160 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
11170 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66   True because of
11180 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
11190 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20  call above */.  
111a0 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74      /* sqlite3Bt
111b0 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28  reeParseCellPtr(
111c0 29 20 75 73 65 73 20 67 65 74 56 61 72 69 6e 74  ) uses getVarint
111d0 33 32 28 29 20 74 6f 20 65 78 74 72 61 63 74 20  32() to extract 
111e0 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 70 61 79  the.      ** pay
111f0 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74  load size, so it
11200 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66   is impossible f
11210 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  or payloadSize64
11220 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20   to be.      ** 
11230 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32 20 62  larger than 32 b
11240 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  its. */.      as
11250 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69  sert( (payloadSi
11260 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41  ze64 & SQLITE_MA
11270 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79  X_U32)==(u64)pay
11280 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20  loadSize64 );.  
11290 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
112a0 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69  = (u32)payloadSi
112b0 7a 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ze64;.    }else{
112c0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
112d0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
112e0 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
112f0 29 3b 0a 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c  );.      VVA_ONL
11300 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
11310 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
11320 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
11330 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
11340 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
11350 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28  ;   /* DataSize(
11360 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
11370 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
11380 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 73  f( ALWAYS(pC->ps
11390 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 29 20  eudoTableReg>0) 
113a0 29 7b 0a 20 20 20 20 70 52 65 67 20 3d 20 26 61  ){.    pReg = &a
113b0 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61  Mem[pC->pseudoTa
113c0 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 61 73 73  bleReg];.    ass
113d0 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73  ert( pReg->flags
113e0 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
113f0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
11400 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20  Valid(pReg) );. 
11410 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
11420 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 7a 52   pReg->n;.    zR
11430 65 63 20 3d 20 70 52 65 67 2d 3e 7a 3b 0a 20 20  ec = pReg->z;.  
11440 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
11450 73 20 3d 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46  s = (pOp->p5&OPF
11460 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 29 20  LAG_CLEARCACHE) 
11470 3f 20 43 41 43 48 45 5f 53 54 41 4c 45 20 3a 20  ? CACHE_STALE : 
11480 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20  p->cacheCtr;.   
11490 20 61 73 73 65 72 74 28 20 70 61 79 6c 6f 61 64   assert( payload
114a0 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52 65 63 21  Size==0 || zRec!
114b0 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  =0 );.  }else{. 
114c0 20 20 20 2f 2a 20 43 6f 6e 73 69 64 65 72 20 74     /* Consider t
114d0 68 65 20 72 6f 77 20 74 6f 20 62 65 20 4e 55 4c  he row to be NUL
114e0 4c 20 2a 2f 0a 20 20 20 20 70 61 79 6c 6f 61 64  L */.    payload
114f0 53 69 7a 65 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20  Size = 0;.  }.. 
11500 20 2f 2a 20 49 66 20 70 61 79 6c 6f 61 64 53 69   /* If payloadSi
11510 7a 65 20 69 73 20 30 2c 20 74 68 65 6e 20 6a 75  ze is 0, then ju
11520 73 74 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 2e  st store a NULL.
11530 20 20 54 68 69 73 20 63 61 6e 20 68 61 70 70 65    This can happe
11540 6e 20 62 65 63 61 75 73 65 20 6f 66 0a 20 20 2a  n because of.  *
11550 2a 20 6e 75 6c 6c 52 6f 77 20 6f 72 20 62 65 63  * nullRow or bec
11560 61 75 73 65 20 6f 66 20 61 20 63 6f 72 72 75 70  ause of a corrup
11570 74 20 64 61 74 61 62 61 73 65 2e 20 2a 2f 0a 20  t database. */. 
11580 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65   if( payloadSize
11590 3d 3d 30 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65  ==0 ){.    MemSe
115a0 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
115b0 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
115c0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
115d0 75 74 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  ut;.  }.  assert
115e0 28 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  ( db->aLimit[SQL
115f0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
11600 5d 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 61  ]>=0 );.  if( pa
11610 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32  yloadSize > (u32
11620 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
11630 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
11640 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
11650 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69  _big;.  }..  nFi
11660 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64  eld = pC->nField
11670 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 6e  ;.  assert( p2<n
11680 46 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52  Field );..  /* R
11690 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 74 68  ead and parse th
116a0 65 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e 20  e table header. 
116b0 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
116c0 74 73 20 6f 66 20 74 68 65 20 70 61 72 73 65 0a  ts of the parse.
116d0 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72 65    ** into the re
116e0 63 6f 72 64 20 68 65 61 64 65 72 20 63 61 63 68  cord header cach
116f0 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
11700 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61  cursor..  */.  a
11710 54 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65  Type = pC->aType
11720 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68  ;.  if( pC->cach
11730 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68  eStatus==p->cach
11740 65 43 74 72 20 29 7b 0a 20 20 20 20 61 4f 66 66  eCtr ){.    aOff
11750 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65  set = pC->aOffse
11760 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
11770 61 73 73 65 72 74 28 61 54 79 70 65 29 3b 0a 20  assert(aType);. 
11780 20 20 20 61 76 61 69 6c 20 3d 20 30 3b 0a 20 20     avail = 0;.  
11790 20 20 70 43 2d 3e 61 4f 66 66 73 65 74 20 3d 20    pC->aOffset = 
117a0 61 4f 66 66 73 65 74 20 3d 20 26 61 54 79 70 65  aOffset = &aType
117b0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 70 43  [nField];.    pC
117c0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
117d0 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20  payloadSize;.   
117e0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
117f0 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a   = p->cacheCtr;.
11800 0a 20 20 20 20 2f 2a 20 46 69 67 75 72 65 20 6f  .    /* Figure o
11810 75 74 20 68 6f 77 20 6d 61 6e 79 20 62 79 74 65  ut how many byte
11820 73 20 61 72 65 20 69 6e 20 74 68 65 20 68 65 61  s are in the hea
11830 64 65 72 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a  der */.    if( z
11840 52 65 63 20 29 7b 0a 20 20 20 20 20 20 7a 44 61  Rec ){.      zDa
11850 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20 20 7d  ta = zRec;.    }
11860 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20  else{.      if( 
11870 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20  pC->isIndex ){. 
11880 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28         zData = (
11890 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72  char*)sqlite3Btr
118a0 65 65 4b 65 79 46 65 74 63 68 28 70 43 72 73 72  eeKeyFetch(pCrsr
118b0 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20  , &avail);.     
118c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
118d0 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73  zData = (char*)s
118e0 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46  qlite3BtreeDataF
118f0 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
11900 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  il);.      }.   
11910 20 20 20 2f 2a 20 49 66 20 4b 65 79 46 65 74 63     /* If KeyFetc
11920 68 28 29 2f 44 61 74 61 46 65 74 63 68 28 29 20  h()/DataFetch() 
11930 6d 61 6e 61 67 65 64 20 74 6f 20 67 65 74 20 74  managed to get t
11940 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61  he entire payloa
11950 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  d,.      ** save
11960 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e 20   the payload in 
11970 74 68 65 20 70 43 2d 3e 61 52 6f 77 20 63 61 63  the pC->aRow cac
11980 68 65 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 73  he.  That will s
11990 61 76 65 20 75 73 20 66 72 6f 6d 0a 20 20 20 20  ave us from.    
119a0 20 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f 20 6d    ** having to m
119b0 61 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 63  ake additional c
119c0 61 6c 6c 73 20 74 6f 20 66 65 74 63 68 20 74 68  alls to fetch th
119d0 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74 69 6f  e content portio
119e0 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68  n of.      ** th
119f0 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20  e record..      
11a00 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
11a10 20 61 76 61 69 6c 3e 3d 30 20 29 3b 0a 20 20 20   avail>=0 );.   
11a20 20 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69     if( payloadSi
11a30 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c  ze <= (u32)avail
11a40 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 52 65 63   ){.        zRec
11a50 20 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20 20 20   = zData;.      
11a60 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38    pC->aRow = (u8
11a70 2a 29 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 7d  *)zData;.      }
11a80 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43  else{.        pC
11a90 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ->aRow = 0;.    
11aa0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a    }.    }.    /*
11ab0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
11ac0 73 73 65 72 74 20 69 73 20 74 72 75 65 20 69 6e  ssert is true in
11ad0 20 61 6c 6c 20 63 61 73 65 73 20 61 63 63 65 70   all cases accep
11ae0 74 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20 74 68  t when.    ** th
11af0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
11b00 68 61 73 20 62 65 65 6e 20 63 6f 72 72 75 70 74  has been corrupt
11b10 65 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e 0a 20  ed externally.. 
11b20 20 20 20 2a 2a 20 20 20 20 61 73 73 65 72 74 28     **    assert(
11b30 20 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76 61 69   zRec!=0 || avai
11b40 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20 7c  l>=payloadSize |
11b50 7c 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f  | avail>=9 ); */
11b60 0a 20 20 20 20 73 7a 48 64 72 20 3d 20 67 65 74  .    szHdr = get
11b70 56 61 72 69 6e 74 33 32 28 28 75 38 2a 29 7a 44  Varint32((u8*)zD
11b80 61 74 61 2c 20 6f 66 66 73 65 74 29 3b 0a 0a 20  ata, offset);.. 
11b90 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
11ba0 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
11bb0 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e  se has not given
11bc0 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20   us an oversize 
11bd0 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44  header..    ** D
11be0 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76  o this now to av
11bf0 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20  oid an oversize 
11c00 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
11c10 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  n..    **.    **
11c20 20 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61   Type entries ca
11c30 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61  n be between 1 a
11c40 6e 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e  nd 5 bytes each.
11c50 20 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79    But 4 and 5 by
11c60 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20  te.    ** types 
11c70 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61  use so much data
11c80 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72   space that ther
11c90 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30  e can only be 40
11ca0 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20  96 and 32 of.   
11cb0 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63   ** them, respec
11cc0 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20  tively.  So the 
11cd0 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c  maximum header l
11ce0 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72  ength results fr
11cf0 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79  om a.    ** 3-by
11d00 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68  te type for each
11d10 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   of the maximum 
11d20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73  of 32768 columns
11d30 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20   plus three.    
11d40 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66  ** extra bytes f
11d50 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65  or the header le
11d60 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32  ngth itself.  32
11d70 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30  768*3 + 3 = 9830
11d80 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  7..    */.    if
11d90 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37  ( offset > 98307
11da0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
11db0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
11dc0 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f  PT;.      goto o
11dd0 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
11de0 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d 70    }..    /* Comp
11df0 75 74 65 20 69 6e 20 6c 65 6e 20 74 68 65 20 6e  ute in len the n
11e00 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
11e10 66 20 64 61 74 61 20 77 65 20 6e 65 65 64 20 74  f data we need t
11e20 6f 20 72 65 61 64 20 69 6e 20 6f 72 64 65 72 0a  o read in order.
11e30 20 20 20 20 2a 2a 20 74 6f 20 67 65 74 20 6e 46      ** to get nF
11e40 69 65 6c 64 20 74 79 70 65 20 76 61 6c 75 65 73  ield type values
11e50 2e 20 20 6f 66 66 73 65 74 20 69 73 20 61 6e 20  .  offset is an 
11e60 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74  upper bound on t
11e70 68 69 73 2e 20 20 42 75 74 0a 20 20 20 20 2a 2a  his.  But.    **
11e80 20 6e 46 69 65 6c 64 20 6d 69 67 68 74 20 62 65   nField might be
11e90 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 20 6c   significantly l
11ea0 65 73 73 20 74 68 61 6e 20 74 68 65 20 74 72 75  ess than the tru
11eb0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
11ec0 6d 6e 73 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68  mns.    ** in th
11ed0 65 20 74 61 62 6c 65 2c 20 61 6e 64 20 69 6e 20  e table, and in 
11ee0 74 68 61 74 20 63 61 73 65 2c 20 35 2a 6e 46 69  that case, 5*nFi
11ef0 65 6c 64 2b 33 20 6d 69 67 68 74 20 62 65 20 73  eld+3 might be s
11f00 6d 61 6c 6c 65 72 20 74 68 61 6e 20 6f 66 66 73  maller than offs
11f10 65 74 2e 0a 20 20 20 20 2a 2a 20 57 65 20 77 61  et..    ** We wa
11f20 6e 74 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 6c  nt to minimize l
11f30 65 6e 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c  en in order to l
11f40 69 6d 69 74 20 74 68 65 20 73 69 7a 65 20 6f 66  imit the size of
11f50 20 74 68 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20   the memory.    
11f60 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 65  ** allocation, e
11f70 73 70 65 63 69 61 6c 6c 79 20 69 66 20 61 20 63  specially if a c
11f80 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20  orrupt database 
11f90 66 69 6c 65 20 68 61 73 20 63 61 75 73 65 64 20  file has caused 
11fa0 6f 66 66 73 65 74 0a 20 20 20 20 2a 2a 20 74 6f  offset.    ** to
11fb0 20 62 65 20 6f 76 65 72 73 69 7a 65 64 2e 20 4f   be oversized. O
11fc0 66 66 73 65 74 20 69 73 20 6c 69 6d 69 74 65 64  ffset is limited
11fd0 20 74 6f 20 39 38 33 30 37 20 61 62 6f 76 65 2e   to 98307 above.
11fe0 20 20 42 75 74 20 39 38 33 30 37 20 6d 69 67 68    But 98307 migh
11ff0 74 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 65  t.    ** still e
12000 78 63 65 65 64 20 52 6f 62 73 6f 6e 20 6d 65 6d  xceed Robson mem
12010 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c  ory allocation l
12020 69 6d 69 74 73 20 6f 6e 20 73 6f 6d 65 20 63 6f  imits on some co
12030 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0a 20 20  nfigurations..  
12040 20 20 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20    ** On systems 
12050 74 68 61 74 20 63 61 6e 6e 6f 74 20 74 6f 6c 65  that cannot tole
12060 72 61 74 65 20 6c 61 72 67 65 20 6d 65 6d 6f 72  rate large memor
12070 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 6e  y allocations, n
12080 46 69 65 6c 64 2a 35 2b 33 0a 20 20 20 20 2a 2a  Field*5+3.    **
12090 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20   will likely be 
120a0 6d 75 63 68 20 73 6d 61 6c 6c 65 72 20 73 69 6e  much smaller sin
120b0 63 65 20 6e 46 69 65 6c 64 20 77 69 6c 6c 20 6c  ce nField will l
120c0 69 6b 65 6c 79 20 62 65 20 6c 65 73 73 20 74 68  ikely be less th
120d0 61 6e 0a 20 20 20 20 2a 2a 20 32 30 20 6f 72 20  an.    ** 20 or 
120e0 73 6f 2e 20 20 54 68 69 73 20 69 6e 73 75 72 65  so.  This insure
120f0 73 20 74 68 61 74 20 52 6f 62 73 6f 6e 20 6d 65  s that Robson me
12100 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
12110 6c 69 6d 69 74 73 20 61 72 65 0a 20 20 20 20 2a  limits are.    *
12120 2a 20 6e 6f 74 20 65 78 63 65 65 64 65 64 20 65  * not exceeded e
12130 76 65 6e 20 66 6f 72 20 63 6f 72 72 75 70 74 20  ven for corrupt 
12140 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a  database files..
12150 20 20 20 20 2a 2f 0a 20 20 20 20 6c 65 6e 20 3d      */.    len =
12160 20 6e 46 69 65 6c 64 2a 35 20 2b 20 33 3b 0a 20   nField*5 + 3;. 
12170 20 20 20 69 66 28 20 6c 65 6e 20 3e 20 28 69 6e     if( len > (in
12180 74 29 6f 66 66 73 65 74 20 29 20 6c 65 6e 20 3d  t)offset ) len =
12190 20 28 69 6e 74 29 6f 66 66 73 65 74 3b 0a 0a 20   (int)offset;.. 
121a0 20 20 20 2f 2a 20 54 68 65 20 4b 65 79 46 65 74     /* The KeyFet
121b0 63 68 28 29 20 6f 72 20 44 61 74 61 46 65 74 63  ch() or DataFetc
121c0 68 28 29 20 61 62 6f 76 65 20 61 72 65 20 66 61  h() above are fa
121d0 73 74 20 61 6e 64 20 77 69 6c 6c 20 67 65 74 20  st and will get 
121e0 74 68 65 20 65 6e 74 69 72 65 0a 20 20 20 20 2a  the entire.    *
121f0 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  * record header 
12200 69 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e 20 20  in most cases.  
12210 42 75 74 20 74 68 65 79 20 77 69 6c 6c 20 66 61  But they will fa
12220 69 6c 20 74 6f 20 67 65 74 20 74 68 65 20 63 6f  il to get the co
12230 6d 70 6c 65 74 65 0a 20 20 20 20 2a 2a 20 72 65  mplete.    ** re
12240 63 6f 72 64 20 68 65 61 64 65 72 20 69 66 20 74  cord header if t
12250 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  he record header
12260 20 64 6f 65 73 20 6e 6f 74 20 66 69 74 20 6f 6e   does not fit on
12270 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 0a 20   a single page. 
12280 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 42 2d 54     ** in the B-T
12290 72 65 65 2e 20 20 57 68 65 6e 20 74 68 61 74 20  ree.  When that 
122a0 68 61 70 70 65 6e 73 2c 20 75 73 65 20 73 71 6c  happens, use sql
122b0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
122c0 74 72 65 65 28 29 20 74 6f 0a 20 20 20 20 2a 2a  tree() to.    **
122d0 20 61 63 71 75 69 72 65 20 74 68 65 20 63 6f 6d   acquire the com
122e0 70 6c 65 74 65 20 68 65 61 64 65 72 20 74 65 78  plete header tex
122f0 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  t..    */.    if
12300 28 20 21 7a 52 65 63 20 26 26 20 61 76 61 69 6c  ( !zRec && avail
12310 3c 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 73 4d  <len ){.      sM
12320 65 6d 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20  em.flags = 0;.  
12330 20 20 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b      sMem.db = 0;
12340 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
12350 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
12360 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6c 65  ree(pCrsr, 0, le
12370 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20  n, pC->isIndex, 
12380 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66  &sMem);.      if
12390 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
123a0 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
123b0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
123c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61       }.      zDa
123d0 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20  ta = sMem.z;.   
123e0 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20 3d   }.    zEndHdr =
123f0 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6c 65   (u8 *)&zData[le
12400 6e 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20 28  n];.    zIdx = (
12410 75 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48 64  u8 *)&zData[szHd
12420 72 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63 61 6e  r];..    /* Scan
12430 20 74 68 65 20 68 65 61 64 65 72 20 61 6e 64 20   the header and 
12440 75 73 65 20 69 74 20 74 6f 20 66 69 6c 6c 20 69  use it to fill i
12450 6e 20 74 68 65 20 61 54 79 70 65 5b 5d 20 61 6e  n the aType[] an
12460 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20 20 20  d aOffset[].    
12470 2a 2a 20 61 72 72 61 79 73 2e 20 20 61 54 79 70  ** arrays.  aTyp
12480 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69  e[i] will contai
12490 6e 20 74 68 65 20 74 79 70 65 20 69 6e 74 65 67  n the type integ
124a0 65 72 20 66 6f 72 20 74 68 65 20 69 2d 74 68 0a  er for the i-th.
124b0 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e      ** column an
124c0 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 77 69 6c  d aOffset[i] wil
124d0 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 6f 66  l contain the of
124e0 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
124f0 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 6f  ginning.    ** o
12500 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
12510 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65  the start of the
12520 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 69 2d   data for the i-
12530 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f  th column.    */
12540 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
12550 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20  nField; i++){.  
12560 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a 45 6e      if( zIdx<zEn
12570 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20  dHdr ){.        
12580 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66  aOffset[i] = off
12590 73 65 74 3b 0a 20 20 20 20 20 20 20 20 69 66 28  set;.        if(
125a0 20 7a 49 64 78 5b 30 5d 3c 30 78 38 30 20 29 7b   zIdx[0]<0x80 ){
125b0 0a 20 20 20 20 20 20 20 20 20 20 74 20 3d 20 7a  .          t = z
125c0 49 64 78 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20  Idx[0];.        
125d0 20 20 7a 49 64 78 2b 2b 3b 0a 20 20 20 20 20 20    zIdx++;.      
125e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
125f0 20 20 20 7a 49 64 78 20 2b 3d 20 73 71 6c 69 74     zIdx += sqlit
12600 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a 49  e3GetVarint32(zI
12610 64 78 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20  dx, &t);.       
12620 20 7d 0a 20 20 20 20 20 20 20 20 61 54 79 70 65   }.        aType
12630 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20 20  [i] = t;.       
12640 20 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c 69 74   szField = sqlit
12650 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
12660 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20  Len(t);.        
12670 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c  offset += szFiel
12680 64 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6f  d;.        if( o
12690 66 66 73 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b  ffset<szField ){
126a0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 66 66    /* True if off
126b0 73 65 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f  set overflows */
126c0 0a 20 20 20 20 20 20 20 20 20 20 7a 49 64 78 20  .          zIdx 
126d0 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20  = &zEndHdr[1];  
126e0 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c 49 54 45  /* Forces SQLITE
126f0 5f 43 4f 52 52 55 50 54 20 72 65 74 75 72 6e 20  _CORRUPT return 
12700 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20  below */.       
12710 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
12720 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b    }.      }else{
12730 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 69  .        /* If i
12740 20 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e 46   is less that nF
12750 69 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72 65  ield, then there
12760 20 61 72 65 20 6c 65 73 73 20 66 69 65 6c 64 73   are less fields
12770 20 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20   in this.       
12780 20 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20   ** record than 
12790 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e  SetNumColumns in
127a0 64 69 63 61 74 65 64 20 74 68 65 72 65 20 61 72  dicated there ar
127b0 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
127c0 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c  .        ** tabl
127d0 65 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73 65  e. Set the offse
127e0 74 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20  t for any extra 
127f0 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73  columns not pres
12800 65 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a  ent in.        *
12810 2a 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  * the record to 
12820 30 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f  0. This tells co
12830 64 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72  de below to stor
12840 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20  e a NULL.       
12850 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 64   ** instead of d
12860 65 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76  eserializing a v
12870 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65  alue from the re
12880 63 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f  cord..        */
12890 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74  .        aOffset
128a0 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  [i] = 0;.      }
128b0 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
128c0 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
128d0 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65  (&sMem);.    sMe
128e0 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  m.flags = MEM_Nu
128f0 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77  ll;..    /* If w
12900 65 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65  e have read more
12910 20 68 65 61 64 65 72 20 64 61 74 61 20 74 68 61   header data tha
12920 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20  n was contained 
12930 69 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20  in the header,. 
12940 20 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20     ** or if the 
12950 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
12960 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
12970 20 62 65 20 70 61 73 74 20 74 68 65 20 65 6e 64   be past the end
12980 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72   of the.    ** r
12990 65 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65  ecord, or if the
129a0 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74   end of the last
129b0 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74   field appears t
129c0 6f 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20  o be before the 
129d0 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  end.    ** of th
129e0 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61  e record (when a
129f0 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e  ll fields presen
12a00 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74  t), then we must
12a10 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20   be dealing .   
12a20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75   ** with a corru
12a30 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  pt database..   
12a40 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49 64   */.    if( (zId
12a50 78 20 3e 20 7a 45 6e 64 48 64 72 29 20 7c 7c 20  x > zEndHdr) || 
12a60 28 6f 66 66 73 65 74 20 3e 20 70 61 79 6c 6f 61  (offset > payloa
12a70 64 53 69 7a 65 29 0a 20 20 20 20 20 20 20 20 20  dSize).         
12a80 7c 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64  || (zIdx==zEndHd
12a90 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70 61 79  r && offset!=pay
12aa0 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20 20  loadSize) ){.   
12ab0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
12ac0 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
12ad0 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
12ae0 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  n_out;.    }.  }
12af0 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63  ..  /* Get the c
12b00 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  olumn informatio
12b10 6e 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32  n. If aOffset[p2
12b20 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  ] is non-zero, t
12b30 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72 69  hen .  ** deseri
12b40 61 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65 20  alize the value 
12b50 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e  from the record.
12b60 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20   If aOffset[p2] 
12b70 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68  is zero,.  ** th
12b80 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74  en there are not
12b90 20 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20 69   enough fields i
12ba0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  n the record to 
12bb0 73 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a 2a  satisfy the.  **
12bc0 20 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74 68   request.  In th
12bd0 69 73 20 63 61 73 65 2c 20 73 65 74 20 74 68 65  is case, set the
12be0 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74   value NULL or t
12bf0 6f 20 50 34 20 69 66 20 50 34 20 69 73 0a 20 20  o P4 if P4 is.  
12c00 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** a pointer to 
12c10 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20  a Mem object..  
12c20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65 74  */.  if( aOffset
12c30 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73 65  [p2] ){.    asse
12c40 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
12c50 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65  K );.    if( zRe
12c60 63 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65 4d  c ){.      VdbeM
12c70 65 6d 52 65 6c 65 61 73 65 28 70 44 65 73 74 29  emRelease(pDest)
12c80 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
12c90 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38  dbeSerialGet((u8
12ca0 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73 65 74   *)&zRec[aOffset
12cb0 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d  [p2]], aType[p2]
12cc0 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
12cd0 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d  lse{.      len =
12ce0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
12cf0 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b  alTypeLen(aType[
12d00 70 32 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  p2]);.      sqli
12d10 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26  te3VdbeMemMove(&
12d20 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20  sMem, pDest);.  
12d30 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
12d40 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
12d50 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b  (pCrsr, aOffset[
12d60 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73  p2], len, pC->is
12d70 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20  Index, &sMem);. 
12d80 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
12d90 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
12da0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
12db0 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
12dc0 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d      zData = sMem
12dd0 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  .z;.      sqlite
12de0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
12df0 75 38 2a 29 7a 44 61 74 61 2c 20 61 54 79 70 65  u8*)zData, aType
12e00 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20  [p2], pDest);.  
12e10 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e 65    }.    pDest->e
12e20 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
12e30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
12e40 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
12e50 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  MEM ){.      sql
12e60 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
12e70 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
12e80 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
12e90 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c  Static);.    }el
12ea0 73 65 7b 0a 20 20 20 20 20 20 4d 65 6d 53 65 74  se{.      MemSet
12eb0 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20  TypeFlag(pDest, 
12ec0 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 7d  MEM_Null);.    }
12ed0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65  .  }..  /* If we
12ee0 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
12ef0 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f 20  ocated space to 
12f00 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28 69  hold the data (i
12f10 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74  n the.  ** sqlit
12f20 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
12f30 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 29  ee() call above)
12f40 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72 20 63   then transfer c
12f50 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20  ontrol of that. 
12f60 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   ** dynamically 
12f70 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
12f80 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44 65 73  over to the pDes
12f90 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20 2a  t structure..  *
12fa0 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20  * This prevents 
12fb0 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20  a memory copy.. 
12fc0 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a   */.  if( sMem.z
12fd0 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73  Malloc ){.    as
12fe0 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d  sert( sMem.z==sM
12ff0 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20  em.zMalloc );.  
13000 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73    assert( !(pDes
13010 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  t->flags & MEM_D
13020 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  yn) );.    asser
13030 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67  t( !(pDest->flag
13040 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
13050 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74  M_Str)) || pDest
13060 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20  ->z==sMem.z );. 
13070 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
13080 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d  &= ~(MEM_Ephem|M
13090 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
130a0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20  pDest->flags |= 
130b0 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44  MEM_Term;.    pD
130c0 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b  est->z = sMem.z;
130d0 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c  .    pDest->zMal
130e0 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c  loc = sMem.zMall
130f0 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20  oc;.  }..  rc = 
13100 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61  sqlite3VdbeMemMa
13110 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44 65 73  keWriteable(pDes
13120 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  t);..op_column_o
13130 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ut:.  UPDATE_MAX
13140 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
13150 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
13160 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73  CE(pOp->p3, pDes
13170 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
13180 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e  /* Opcode: Affin
13190 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ity P1 P2 * P4 *
131a0 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66  .**.** Apply aff
131b0 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e  inities to a ran
131c0 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65  ge of P2 registe
131d0 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  rs starting with
131e0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73   P1..**.** P4 is
131f0 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
13200 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
13210 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68  long. The nth ch
13220 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
13230 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
13240 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
13250 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
13260 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
13270 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79  he nth.** memory
13280 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e   cell in the ran
13290 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ge..*/.case OP_A
132a0 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e  ffinity: {.  con
132b0 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  st char *zAffini
132c0 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66  ty;   /* The aff
132d0 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
132e0 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41  ied */.  char cA
132f0 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ff;             
13300 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68    /* A single ch
13310 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e  aracter of affin
13320 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e  ity */..  zAffin
13330 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
13340 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
13350 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73  nity!=0 );.  ass
13360 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70  ert( zAffinity[p
13370 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20  Op->p2]==0 );.  
13380 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
13390 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20  ->p1];.  while( 
133a0 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e  (cAff = *(zAffin
133b0 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20  ity++))!=0 ){.  
133c0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c    assert( pIn1 <
133d0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d  = &p->aMem[p->nM
133e0 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em] );.    asser
133f0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
13400 6e 31 29 20 29 3b 0a 20 20 20 20 45 78 70 61 6e  n1) );.    Expan
13410 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20  dBlob(pIn1);.   
13420 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
13430 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64  In1, cAff, encod
13440 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ing);.    pIn1++
13450 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
13460 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b  ../* Opcode: Mak
13470 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33  eRecord P1 P2 P3
13480 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76   P4 *.**.** Conv
13490 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73  ert P2 registers
134a0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
134b0 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63  P1 into the [rec
134c0 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75  ord format].** u
134d0 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
134e0 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
134f0 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
13500 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
13510 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  ex.  The OP_Colu
13520 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
13530 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
13540 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  later..**.** P4 
13550 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
13560 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
13570 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
13580 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
13590 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
135a0 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
135b0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
135c0 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
135d0 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
135e0 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e   field of the in
135f0 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  dex key..**.** T
13600 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
13610 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
13620 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
13630 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
13640 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
13650 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
13660 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  .h..**.** If P4 
13670 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
13680 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
13690 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
136a0 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NONE..*/.case OP
136b0 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20  _MakeRecord: {. 
136c0 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b   u8 *zNewRecord;
136d0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66          /* A buf
136e0 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  fer to hold the 
136f0 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77  data for the new
13700 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
13710 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
13720 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
13730 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e  ecord */.  u64 n
13740 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
13750 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
13760 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
13770 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72  ce */.  int nHdr
13780 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
13790 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
137a0 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
137b0 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  e */.  i64 nByte
137c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
137d0 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
137e0 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
137f0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a  cord */.  int nZ
13800 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20  ero;            
13810 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
13820 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
13830 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
13840 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69  d */.  int nVari
13850 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
13860 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
13870 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a   in a varint */.
13880 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70    u32 serial_typ
13890 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65  e;       /* Type
138a0 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20   field */.  Mem 
138b0 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20  *pData0;        
138c0 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c     /* First fiel
138d0 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64  d to be combined
138e0 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
138f0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
13900 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13910 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68  Last field of th
13920 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
13930 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
13940 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13950 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
13960 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72  record */.  char
13970 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20   *zAffinity;    
13980 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
13990 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
139a0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
139b0 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  t file_format;  
139c0 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72       /* File for
139d0 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65  mat to use for e
139e0 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
139f0 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
13a00 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
13a10 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
13a20 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  ] */.  int len; 
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13a40 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
13a50 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
13a60 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
13a70 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
13a80 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
13a90 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
13aa0 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
13ab0 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
13ac0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13ad0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13ae0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13af0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
13b00 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
13b10 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
13b20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
13b30 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
13b40 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
13b50 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
13b60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13b70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13b80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13b90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
13ba0 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
13bb0 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
13bc0 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
13bd0 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
13be0 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
13bf0 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a  nd so froth..  *
13c00 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
13c10 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
13c20 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
13c30 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
13c40 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
13c50 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
13c60 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
13c70 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
13c80 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
13c90 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
13ca0 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
13cb0 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
13cc0 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
13cd0 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
13ce0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
13cf0 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
13d00 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
13d10 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
13d20 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
13d30 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
13d40 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13d50 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
13d60 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
13d70 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
13d80 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
13d90 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
13da0 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
13db0 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
13dc0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
13dd0 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
13de0 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
13df0 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
13e00 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
13e10 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  ield<=p->nMem+1 
13e20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61  );.  pData0 = &a
13e30 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e  Mem[nField];.  n
13e40 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b  Field = pOp->p2;
13e50 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
13e60 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20  a0[nField-1];.  
13e70 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d  file_format = p-
13e80 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
13e90 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74  mat;..  /* Ident
13ea0 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72  ify the output r
13eb0 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73  egister */.  ass
13ec0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
13ed0 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p1 || pOp->p3>
13ee0 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32  =pOp->p1+pOp->p2
13ef0 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
13f00 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
13f10 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
13f20 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20  p, pOut);..  /* 
13f30 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65  Loop through the
13f40 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77   elements that w
13f50 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ill make up the 
13f60 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65  record to figure
13f70 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75  .  ** out how mu
13f80 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75  ch space is requ
13f90 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77  ired for the new
13fa0 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20   record..  */.  
13fb0 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
13fc0 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
13fd0 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  ec++){.    asser
13fe0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
13ff0 65 63 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  ec) );.    if( z
14000 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
14010 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
14020 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b  pRec, zAffinity[
14030 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e  pRec-pData0], en
14040 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20  coding);.    }. 
14050 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
14060 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70  gs&MEM_Zero && p
14070 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20  Rec->n>0 ){.    
14080 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
14090 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
140a0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72 69  ;.    }.    seri
140b0 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
140c0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
140d0 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
140e0 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71  t);.    len = sq
140f0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14100 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  ypeLen(serial_ty
14110 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b  pe);.    nData +
14120 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20  = len;.    nHdr 
14130 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  += sqlite3Varint
14140 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
14150 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
14160 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
14170 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c   ){.      /* Onl
14180 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c  y pure zero-fill
14190 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65 20  ed BLOBs can be 
141a0 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f 70  input to this Op
141b0 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57  code..      ** W
141c0 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62  e do not allow b
141d0 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65 66  lobs with a pref
141e0 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69  ix and a zero-fi
141f0 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20  lled tail. */.  
14200 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
14210 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
14220 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29 7b  }else if( len ){
14230 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  .      nZero = 0
14240 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
14250 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61  * Add the initia
14260 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20  l header varint 
14270 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69  and total the si
14280 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20  ze */.  nHdr += 
14290 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
142a0 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
142b0 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c  ;.  if( nVarint<
142c0 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
142d0 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e 48  (nHdr) ){.    nH
142e0 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  dr++;.  }.  nByt
142f0 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e  e = nHdr+nData-n
14300 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74  Zero;.  if( nByt
14310 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
14320 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
14330 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
14340 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
14350 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
14360 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
14370 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
14380 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
14390 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
143a0 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
143b0 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
143c0 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
143d0 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
143e0 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
143f0 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
14400 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
14410 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
14420 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
14430 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  w() could clobbe
14440 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
14450 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
14460 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
14470 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f  e3VdbeMemGrow(pO
14480 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20  ut, (int)nByte, 
14490 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  0) ){.    goto n
144a0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65  o_mem;.  }.  zNe
144b0 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29  wRecord = (u8 *)
144c0 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57  pOut->z;..  /* W
144d0 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  rite the record 
144e0 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69  */.  i = putVari
144f0 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c  nt32(zNewRecord,
14500 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52   nHdr);.  for(pR
14510 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
14520 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
14530 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
14540 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
14550 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66  rialType(pRec, f
14560 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20  ile_format);.   
14570 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33   i += putVarint3
14580 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d  2(&zNewRecord[i]
14590 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
145a0 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74       /* serial t
145b0 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72  ype */.  }.  for
145c0 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
145d0 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
145e0 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20 64  +){  /* serial d
145f0 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20  ata */.    i += 
14600 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14610 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64  lPut(&zNewRecord
14620 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74 65  [i], (int)(nByte
14630 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66  -i), pRec,file_f
14640 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73  ormat);.  }.  as
14650 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29  sert( i==nByte )
14660 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
14670 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
14680 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
14690 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
146a0 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  Byte;.  pOut->fl
146b0 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c  ags = MEM_Blob |
146c0 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74   MEM_Dyn;.  pOut
146d0 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66  ->xDel = 0;.  if
146e0 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70  ( nZero ){.    p
146f0 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e  Out->u.nZero = n
14700 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Zero;.    pOut->
14710 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72  flags |= MEM_Zer
14720 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  o;.  }.  pOut->e
14730 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
14740 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
14750 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
14760 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74  onverted to text
14770 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54   */.  REGISTER_T
14780 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
14790 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
147a0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
147b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
147c0 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50   Opcode: Count P
147d0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
147e0 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
147f0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
14800 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
14810 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
14820 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
14830 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
14840 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
14850 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
14860 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
14870 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
14880 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
14890 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
148a0 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74  i64 nEntry;.  Bt
148b0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a  Cursor *pCrsr;..
148c0 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43    pCrsr = p->apC
148d0 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75  sr[pOp->p1]->pCu
148e0 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41  rsor;.  if( ALWA
148f0 59 53 28 70 43 72 73 72 29 20 29 7b 0a 20 20 20  YS(pCrsr) ){.   
14900 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
14910 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26  eeCount(pCrsr, &
14920 6e 45 6e 74 72 79 29 3b 0a 20 20 7d 65 6c 73 65  nEntry);.  }else
14930 7b 0a 20 20 20 20 6e 45 6e 74 72 79 20 3d 20 30  {.    nEntry = 0
14940 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
14950 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72  i = nEntry;.  br
14960 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
14970 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f  * Opcode: Savepo
14980 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  int P1 * * P4 *.
14990 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65  **.** Open, rele
149a0 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20  ase or rollback 
149b0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61  the savepoint na
149c0 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72  med by parameter
149d0 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a   P4, depending.*
149e0 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  * on the value o
149f0 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20  f P1. To open a 
14a00 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  new savepoint, P
14a10 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65  1==0. To release
14a20 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20   (commit) an.** 
14a30 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
14a40 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f  nt, P1==1, or to
14a50 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69   rollback an exi
14a60 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20  sting savepoint 
14a70 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  P1==2..*/.case O
14a80 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20  P_Savepoint: {. 
14a90 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ab0 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20   /* Value of P1 
14ac0 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61  operand */.  cha
14ad0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14af0 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e  Name of savepoin
14b00 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65  t */.  int nName
14b10 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
14b20 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  New;.  Savepoint
14b30 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20   *pSavepoint;.  
14b40 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b  Savepoint *pTmp;
14b50 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
14b60 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20  t;.  int ii;..  
14b70 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
14b80 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  zName = pOp->p4.
14b90 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20  z;..  /* Assert 
14ba0 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61  that the p1 para
14bb0 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20  meter is valid. 
14bc0 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  Also that if the
14bd0 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20  re is no open.  
14be0 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
14bf0 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f  then there canno
14c00 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69  t be any savepoi
14c10 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73  nts. .  */.  ass
14c20 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
14c30 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75  int==0 || db->au
14c40 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
14c50 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56   assert( p1==SAV
14c60 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31  EPOINT_BEGIN||p1
14c70 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
14c80 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  ASE||p1==SAVEPOI
14c90 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20  NT_ROLLBACK );. 
14ca0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
14cb0 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69  vepoint || db->i
14cc0 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
14cd0 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  point==0 );.  as
14ce0 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70  sert( checkSavep
14cf0 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b  ointCount(db) );
14d00 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45  ..  if( p1==SAVE
14d10 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20  POINT_BEGIN ){. 
14d20 20 20 20 69 66 28 20 64 62 2d 3e 77 72 69 74 65     if( db->write
14d30 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20  VdbeCnt>0 ){.   
14d40 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65     /* A new save
14d50 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20  point cannot be 
14d60 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65  created if there
14d70 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
14d80 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74  e .      ** stat
14d90 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65  ements (i.e. ope
14da0 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63  n read/write inc
14db0 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61  remental blob ha
14dc0 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f  ndles)..      */
14dd0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
14de0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
14df0 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
14e00 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20   open savepoint 
14e10 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
14e20 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
14e30 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
14e40 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
14e50 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
14e60 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69      nName = sqli
14e70 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d  te3Strlen30(zNam
14e80 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  e);..#ifndef SQL
14e90 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
14ea0 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54  TABLE.      /* T
14eb0 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65  his call is Ok e
14ec0 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65  ven if this save
14ed0 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c  point is actuall
14ee0 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  y a transaction.
14ef0 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
14f00 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72  nt (and therefor
14f10 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f  e should not pro
14f20 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29  mpt xSavepoint()
14f30 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20  ) callbacks..   
14f40 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73     ** If this is
14f50 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73   a transaction s
14f60 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
14f70 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61  pened, it is gua
14f80 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a  ranteed.      **
14f90 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56   that the db->aV
14fa0 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73  Trans[] array is
14fb0 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20   empty.  */.    
14fc0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75    assert( db->au
14fd0 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64  toCommit==0 || d
14fe0 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b  b->nVTrans==0 );
14ff0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
15000 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
15010 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42  (db, SAVEPOINT_B
15020 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20  EGIN,.          
15030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15040 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
15050 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f  ment+db->nSavepo
15060 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  int);.      if( 
15070 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
15080 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
15090 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a  o_error;.#endif.
150a0 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65  .      /* Create
150b0 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
150c0 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20   structure. */. 
150d0 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69       pNew = sqli
150e0 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
150f0 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f  b, sizeof(Savepo
15100 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20  int)+nName+1);. 
15110 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b       if( pNew ){
15120 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a  .        pNew->z
15130 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26  Name = (char *)&
15140 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20  pNew[1];.       
15150 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e   memcpy(pNew->zN
15160 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d  ame, zName, nNam
15170 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20  e+1);.    .     
15180 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
15190 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61  s no open transa
151a0 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b  ction, then mark
151b0 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69   this as a speci
151c0 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74  al.        ** "t
151d0 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
151e0 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20  oint". */.      
151f0 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f    if( db->autoCo
15200 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20  mmit ){.        
15210 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
15220 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
15230 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
15240 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a  nSavepoint = 1;.
15250 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
15260 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
15270 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20  vepoint++;.     
15280 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20     }.    .      
15290 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65    /* Link the ne
152a0 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f  w savepoint into
152b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
152c0 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a  ndle's list. */.
152d0 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e          pNew->pN
152e0 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  ext = db->pSavep
152f0 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
15300 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
15310 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  New;.        pNe
15320 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  w->nDeferredCons
15330 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
15340 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Cons;.      }.  
15350 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
15360 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b   iSavepoint = 0;
15370 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68  ..    /* Find th
15380 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e  e named savepoin
15390 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  t. If there is n
153a0 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
153b0 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a  , then an.    **
153c0 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74   an error is ret
153d0 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65  urned to the use
153e0 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a  r.  */.    for(.
153f0 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
15400 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
15410 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65 70  t; .      pSavep
15420 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53  oint && sqlite3S
15430 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e  trICmp(pSavepoin
15440 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29  t->zName, zName)
15450 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69  ;.      pSavepoi
15460 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  nt = pSavepoint-
15470 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20  >pNext.    ){.  
15480 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b      iSavepoint++
15490 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
154a0 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  !pSavepoint ){. 
154b0 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
154c0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
154d0 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68 20  g, db, "no such 
154e0 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20  savepoint: %s", 
154f0 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63  zName);.      rc
15500 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
15510 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 0a  .    }else if( .
15520 20 20 20 20 20 20 20 20 64 62 2d 3e 77 72 69 74          db->writ
15530 65 56 64 62 65 43 6e 74 3e 30 20 7c 7c 20 28 70  eVdbeCnt>0 || (p
15540 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
15550 4c 42 41 43 4b 20 26 26 20 64 62 2d 3e 61 63 74  LBACK && db->act
15560 69 76 65 56 64 62 65 43 6e 74 3e 31 29 20 0a 20  iveVdbeCnt>1) . 
15570 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49     ){.      /* I
15580 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
15590 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  e to release (co
155a0 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e  mmit) a savepoin
155b0 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a  t if there are .
155c0 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20        ** active 
155d0 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  write statements
155e0 2e 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  . It is not poss
155f0 69 62 6c 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  ible to rollback
15600 20 61 20 73 61 76 65 70 6f 69 6e 74 0a 20 20 20   a savepoint.   
15610 20 20 20 2a 2a 20 69 66 20 74 68 65 72 65 20 61     ** if there a
15620 72 65 20 61 6e 79 20 61 63 74 69 76 65 20 73 74  re any active st
15630 61 74 65 6d 65 6e 74 73 20 61 74 20 61 6c 6c 2e  atements at all.
15640 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
15650 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
15660 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
15670 2c 20 0a 20 20 20 20 20 20 20 20 22 63 61 6e 6e  , .        "cann
15680 6f 74 20 25 73 20 73 61 76 65 70 6f 69 6e 74 20  ot %s savepoint 
15690 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  - SQL statements
156a0 20 69 6e 20 70 72 6f 67 72 65 73 73 22 2c 0a 20   in progress",. 
156b0 20 20 20 20 20 20 20 28 70 31 3d 3d 53 41 56 45         (p1==SAVE
156c0 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 3f  POINT_ROLLBACK ?
156d0 20 22 72 6f 6c 6c 62 61 63 6b 22 3a 20 22 72 65   "rollback": "re
156e0 6c 65 61 73 65 22 29 0a 20 20 20 20 20 20 29 3b  lease").      );
156f0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
15700 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
15710 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65  se{..      /* De
15720 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
15730 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61  or not this is a
15740 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
15750 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20  epoint. If so,. 
15760 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73       ** and this
15770 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f   is a RELEASE co
15780 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20  mmand, then the 
15790 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
157a0 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73  ion .      ** is
157b0 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20   committed. .   
157c0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20     */.      int 
157d0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20  isTransaction = 
157e0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
157f0 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72  t==0 && db->isTr
15800 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
15810 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73  nt;.      if( is
15820 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70  Transaction && p
15830 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
15840 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
15850 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
15860 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
15870 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
15880 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
15890 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
158a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
158b0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
158c0 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
158d0 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
158e0 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
158f0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ){.          p->
15900 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20  pc = pc;.       
15910 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
15920 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
15930 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
15940 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
15950 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
15960 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
15970 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54  .        db->isT
15980 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
15990 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  int = 0;.       
159a0 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20   rc = p->rc;.   
159b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
159c0 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
159d0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
159e0 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
159f0 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
15a00 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
15a10 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  ++){.          r
15a20 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
15a30 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44  Savepoint(db->aD
15a40 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69  b[ii].pBt, p1, i
15a50 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
15a60 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
15a70 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
15a80 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
15a90 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
15aa0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
15ab0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
15ac0 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
15ad0 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28 64 62 2d  ROLLBACK && (db-
15ae0 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 49 6e  >flags&SQLITE_In
15af0 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 20  ternChanges)!=0 
15b00 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
15b10 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
15b20 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
15b30 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
15b40 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
15b50 53 63 68 65 6d 61 28 64 62 2c 20 2d 31 29 3b 0a  Schema(db, -1);.
15b60 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c            db->fl
15b70 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73  ags = (db->flags
15b80 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e   | SQLITE_Intern
15b90 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20  Changes);.      
15ba0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20    }.      }.  . 
15bb0 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65       /* Regardle
15bc0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68  ss of whether th
15bd0 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20  is is a RELEASE 
15be0 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73  or ROLLBACK, des
15bf0 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20  troy all .      
15c00 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65  ** savepoints ne
15c10 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74  sted inside of t
15c20 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
15c30 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20  ng operated on. 
15c40 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  */.      while( 
15c50 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d  db->pSavepoint!=
15c60 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20  pSavepoint ){.  
15c70 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d        pTmp = db-
15c80 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
15c90 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
15ca0 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78  int = pTmp->pNex
15cb0 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
15cc0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d  e3DbFree(db, pTm
15cd0 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  p);.        db->
15ce0 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
15cf0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
15d00 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41  If it is a RELEA
15d10 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79  SE, then destroy
15d20 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62   the savepoint b
15d30 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
15d40 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20   .      ** too. 
15d50 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42  If it is a ROLLB
15d60 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74  ACK TO, then set
15d70 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
15d80 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a  eferred .      *
15d90 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  * constraint vio
15da0 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20  lations present 
15db0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
15dc0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  to the value sto
15dd0 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65  red.      ** whe
15de0 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  n the savepoint 
15df0 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f  was created.  */
15e00 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53  .      if( p1==S
15e10 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
15e20 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
15e30 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d  rt( pSavepoint==
15e40 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29  db->pSavepoint )
15e50 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
15e60 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
15e70 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20  point->pNext;.  
15e80 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
15e90 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69  ree(db, pSavepoi
15ea0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
15eb0 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20   !isTransaction 
15ec0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
15ed0 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
15ee0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
15ef0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62  else{.        db
15f00 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
15f10 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
15f20 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
15f30 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20     }..      if( 
15f40 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29  !isTransaction )
15f50 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
15f60 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
15f70 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76  int(db, p1, iSav
15f80 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
15f90 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
15fa0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
15fb0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
15fc0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
15fd0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
15fe0 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d  Opcode: AutoComm
15ff0 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  it P1 P2 * * *.*
16000 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74  *.** Set the dat
16010 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  abase auto-commi
16020 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20  t flag to P1 (1 
16030 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20  or 0). If P2 is 
16040 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61  true, roll.** ba
16050 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79  ck any currently
16060 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72   active btree tr
16070 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74  ansactions. If t
16080 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
16090 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72  ive.** VMs (apar
160a0 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29  t from this one)
160b0 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43  , then a ROLLBAC
160c0 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d  K fails.  A COMM
160d0 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74  IT fails if.** t
160e0 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
160f0 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61  writing VMs or a
16100 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75  ctive VMs that u
16110 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e  se shared cache.
16120 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
16130 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74  ruction causes t
16140 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a  he VM to halt..*
16150 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f  /.case OP_AutoCo
16160 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65  mmit: {.  int de
16170 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
16180 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b  .  int iRollback
16190 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43  ;.  int turnOnAC
161a0 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f  ;..  desiredAuto
161b0 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
161c0 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20  ;.  iRollback = 
161d0 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f  pOp->p2;.  turnO
161e0 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41 75 74  nAC = desiredAut
161f0 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e  oCommit && !db->
16200 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73  autoCommit;.  as
16210 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
16220 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65  oCommit==1 || de
16230 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
16240 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
16250 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
16260 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63  t==1 || iRollbac
16270 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  k==0 );.  assert
16280 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  ( db->activeVdbe
16290 43 6e 74 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20  Cnt>0 );  /* At 
162a0 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56  least this one V
162b0 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a  M is active */..
162c0 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26    if( turnOnAC &
162d0 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64  & iRollback && d
162e0 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
162f0 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  >1 ){.    /* If 
16300 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
16310 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f   implements a RO
16320 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72  LLBACK and other
16330 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20   VMs are.    ** 
16340 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61  still running, a
16350 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  nd a transaction
16360 20 69 73 20 61 63 74 69 76 65 2c 20 72 65 74 75   is active, retu
16370 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
16380 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68  cating.    ** th
16390 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
163a0 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
163b0 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20  irst. .    */.  
163c0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
163d0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
163e0 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  db, "cannot roll
163f0 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e  back transaction
16400 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
16410 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
16420 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
16430 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
16440 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 74 75  ;.  }else if( tu
16450 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c  rnOnAC && !iRoll
16460 62 61 63 6b 20 26 26 20 64 62 2d 3e 77 72 69 74  back && db->writ
16470 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20  eVdbeCnt>0 ){.  
16480 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
16490 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
164a0 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64  nts a COMMIT and
164b0 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77   other VMs are w
164c0 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  riting.    ** re
164d0 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e  turn an error in
164e0 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68  dicating that th
164f0 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74  e other VMs must
16500 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e   complete first.
16510 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c   .    */.    sql
16520 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
16530 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
16540 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72  cannot commit tr
16550 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20  ansaction - ".  
16560 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
16570 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
16580 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  s");.    rc = SQ
16590 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
165a0 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75  se if( desiredAu
165b0 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75  toCommit!=db->au
165c0 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
165d0 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b  if( iRollback ){
165e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
165f0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
16600 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ==1 );.      sql
16610 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
16620 64 62 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61  db);.      db->a
16630 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
16640 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63     }else if( (rc
16650 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
16660 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
16670 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
16680 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
16690 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  n;.    }else{.  
166a0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
166b0 69 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64  it = (u8)desired
166c0 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20  AutoCommit;.    
166d0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
166e0 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
166f0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
16700 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20   p->pc = pc;.   
16710 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
16720 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73  mit = (u8)(1-des
16730 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b  iredAutoCommit);
16740 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  .        p->rc =
16750 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
16760 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  Y;.        goto 
16770 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
16780 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61     }.    }.    a
16790 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
167a0 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20  ement==0 );.    
167b0 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
167c0 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  points(db);.    
167d0 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  if( p->rc==SQLIT
167e0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
167f0 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   = SQLITE_DONE;.
16800 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
16810 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
16820 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  OR;.    }.    go
16830 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
16840 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
16850 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
16860 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20  ->zErrMsg, db,. 
16870 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64         (!desired
16880 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e  AutoCommit)?"can
16890 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e  not start a tran
168a0 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61  saction within a
168b0 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a   transaction":(.
168c0 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61          (iRollba
168d0 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  ck)?"cannot roll
168e0 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61  back - no transa
168f0 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
16900 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
16910 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d       "cannot com
16920 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  mit - no transac
16930 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29  tion is active")
16940 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20  );.         .   
16950 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
16960 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  OR;.  }.  break;
16970 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
16980 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32  ransaction P1 P2
16990 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67   * * *.**.** Beg
169a0 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
169b0 2e 20 20 54 68 65 20 74 72 61 6e 73 61 63 74 69  .  The transacti
169c0 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43  on ends when a C
169d0 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63  ommit or Rollbac
169e0 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65  k.** opcode is e
169f0 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70  ncountered.  Dep
16a00 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e  ending on the ON
16a10 20 43 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e   CONFLICT settin
16a20 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61  g, the.** transa
16a30 63 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f  ction might also
16a40 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
16a50 69 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65  if an error is e
16a60 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a  ncountered..**.*
16a70 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
16a80 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
16a90 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20  e file on which 
16aa0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
16ab0 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20  is.** started.  
16ac0 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d  Index 0 is the m
16ad0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
16ae0 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73  e and index 1 is
16af0 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65   the.** file use
16b00 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  d for temporary 
16b10 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73  tables.  Indices
16b20 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72   of 2 or more ar
16b30 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74  e used for.** at
16b40 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
16b50 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73  ..**.** If P2 is
16b60 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
16b70 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
16b80 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20  ion is started. 
16b90 20 41 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b   A RESERVED lock
16ba0 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20   is.** obtained 
16bb0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
16bc0 66 69 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74  file when a writ
16bd0 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
16be0 20 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a   started.  No.**
16bf0 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 63   other process c
16c00 61 6e 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72  an start another
16c10 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
16c20 6f 6e 20 77 68 69 6c 65 20 74 68 69 73 20 74 72  on while this tr
16c30 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20  ansaction is.** 
16c40 75 6e 64 65 72 77 61 79 2e 20 20 53 74 61 72 74  underway.  Start
16c50 69 6e 67 20 61 20 77 72 69 74 65 20 74 72 61 6e  ing a write tran
16c60 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65  saction also cre
16c70 61 74 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  ates a rollback 
16c80 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72  journal. A.** wr
16c90 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
16ca0 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
16cb0 62 65 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67  before any chang
16cc0 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  es can be made t
16cd0 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
16ce0 65 2e 20 20 49 66 20 50 32 20 69 73 20 32 20 6f  e.  If P2 is 2 o
16cf0 72 20 67 72 65 61 74 65 72 20 74 68 65 6e 20 61  r greater then a
16d00 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
16d10 20 69 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65   is also obtaine
16d20 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65  d.** on the file
16d30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69  ..**.** If a wri
16d40 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
16d50 73 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68  s started and th
16d60 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a  e Vdbe.usesStmtJ
16d70 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a  ournal flag is.*
16d80 2a 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61  * true (this fla
16d90 67 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20  g is set if the 
16da0 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20  Vdbe may modify 
16db0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f  more than one ro
16dc0 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72  w and may.** thr
16dd0 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
16de0 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d  ption), a statem
16df0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
16e00 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e  may also be open
16e10 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63  ed..** More spec
16e20 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74  ifically, a stat
16e30 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
16e40 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20  n is opened iff 
16e50 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
16e60 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75  connection is cu
16e70 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61  rrently not in a
16e80 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20  utocommit mode, 
16e90 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20  or if there are 
16ea0 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20  other.** active 
16eb0 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74  statements. A st
16ec0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
16ed0 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 61  ion allows the a
16ee0 66 66 65 63 74 73 20 6f 66 20 74 68 69 73 0a 2a  ffects of this.*
16ef0 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c  * VDBE to be rol
16f00 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61  led back after a
16f10 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20  n error without 
16f20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62  having to roll b
16f30 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72  ack the.** entir
16f40 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  e transaction. I
16f50 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e  f no error is en
16f60 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73  countered, the s
16f70 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
16f80 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74  tion.** will aut
16f90 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69  omatically commi
16fa0 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  t when the VDBE 
16fb0 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  halts..**.** If 
16fc0 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P2 is zero, then
16fd0 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20   a read-lock is 
16fe0 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20  obtained on the 
16ff0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
17000 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61  /.case OP_Transa
17010 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65  ction: {.  Btree
17020 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
17030 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
17040 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
17050 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
17060 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
17070 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
17080 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42  >p1))!=0 );.  pB
17090 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
170a0 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  >p1].pBt;..  if(
170b0 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
170c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
170d0 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
170e0 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72  ->p2);.    if( r
170f0 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
17100 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
17110 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20  pc;.      p->rc 
17120 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
17130 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  SY;.      goto v
17140 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
17150 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
17160 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
17170 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17180 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
17190 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
171a0 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
171b0 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
171c0 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
171d0 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65  =0 || db->active
171e0 56 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20  VdbeCnt>1) .    
171f0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
17200 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
17210 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20  nTrans(pBt) );. 
17220 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61       if( p->iSta
17230 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  tement==0 ){.   
17240 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
17250 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26  >nStatement>=0 &
17260 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  & db->nSavepoint
17270 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64  >=0 );.        d
17280 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b  b->nStatement++;
17290 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74   .        p->iSt
172a0 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53  atement = db->nS
172b0 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e  avepoint + db->n
172c0 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20  Statement;.     
172d0 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73   }..      rc = s
172e0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
172f0 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
17300 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61  T_BEGIN, p->iSta
17310 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20  tement-1);.     
17320 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
17330 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
17340 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
17350 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d  eginStmt(pBt, p-
17360 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20  >iStatement);.  
17370 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
17380 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e  Store the curren
17390 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  t value of the d
173a0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20  atabase handles 
173b0 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
173c0 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75  int.      ** cou
173d0 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61  nter. If the sta
173e0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
173f0 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  on needs to be r
17400 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20  olled back,.    
17410 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f    ** the value o
17420 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e  f this counter n
17430 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f  eeds to be resto
17440 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20  red too.  */.   
17450 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f     p->nStmtDefCo
17460 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
17470 65 64 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20 20  edCons;.    }.  
17480 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
17490 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
174a0 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
174b0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
174c0 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
174d0 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
174e0 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
174f0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
17500 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P3==1 is the sch
17510 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
17520 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
17530 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
17540 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  3==3 is the reco
17550 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
17560 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
17570 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
17580 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
17590 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
175a0 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
175b0 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
175c0 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
175d0 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
175e0 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62  .** There must b
175f0 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e  e a read-lock on
17600 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65   the database (e
17610 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
17620 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73  ion.** must be s
17630 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20  tarted or there 
17640 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20  must be an open 
17650 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a  cursor) before.*
17660 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  * executing this
17670 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
17680 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f  .case OP_ReadCoo
17690 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  kie: {          
176a0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
176b0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
176c0 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44   iMeta;.  int iD
176d0 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  b;.  int iCookie
176e0 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  ;..  iDb = pOp->
176f0 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20  p1;.  iCookie = 
17700 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
17710 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54  t( pOp->p3<SQLIT
17720 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
17730 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
17740 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
17750 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
17760 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21  b->aDb[iDb].pBt!
17770 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
17780 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
17790 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69  (((yDbMask)1)<<i
177a0 44 62 29 29 21 3d 30 20 29 3b 0a 0a 20 20 73 71  Db))!=0 );..  sq
177b0 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
177c0 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  a(db->aDb[iDb].p
177d0 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33  Bt, iCookie, (u3
177e0 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70  2 *)&iMeta);.  p
177f0 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61  Out->u.i = iMeta
17800 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
17810 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
17820 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
17830 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
17840 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
17850 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65  ter P3 (interpre
17860 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
17870 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69  r).** into cooki
17880 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
17890 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d  atabase P1.  P2=
178a0 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
178b0 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50   version.  .** P
178c0 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
178d0 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d  base format. P2=
178e0 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
178f0 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
17900 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
17910 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
17920 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
17930 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
17940 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
17950 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
17960 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
17970 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
17980 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
17990 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
179a0 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
179b0 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
179c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
179d0 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a  okie: {       /*
179e0 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44   in3 */.  Db *pD
179f0 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
17a00 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
17a10 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
17a20 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
17a30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
17a40 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
17a50 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
17a60 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
17a70 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
17a80 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
17a90 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
17aa0 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
17ab0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
17ac0 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
17ad0 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Held(db, pOp->p1
17ae0 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d  , 0) );.  pIn3 =
17af0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
17b00 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
17b10 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33  mIntegerify(pIn3
17b20 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  );.  /* See note
17b30 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
17b40 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
17b50 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
17b60 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
17b70 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
17b80 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29  , pOp->p2, (int)
17b90 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66  pIn3->u.i);.  if
17ba0 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
17bb0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
17bc0 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74  ){.    /* When t
17bd0 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
17be0 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64   changes, record
17bf0 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20   the new cookie 
17c00 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20  internally */.  
17c10 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
17c20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
17c30 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a  (int)pIn3->u.i;.
17c40 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
17c50 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
17c60 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69  anges;.  }else i
17c70 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
17c80 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b  E_FILE_FORMAT ){
17c90 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63  .    /* Record c
17ca0 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69  hanges in the fi
17cb0 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20  le format */.   
17cc0 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
17cd0 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38  ile_format = (u8
17ce0 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a  )pIn3->u.i;.  }.
17cf0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31    if( pOp->p1==1
17d00 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c   ){.    /* Inval
17d10 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72  idate all prepar
17d20 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68  ed statements wh
17d30 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20  enever the TEMP 
17d40 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20  database.    ** 
17d50 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65  schema is change
17d60 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34  d.  Ticket #1644
17d70 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45   */.    sqlite3E
17d80 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
17d90 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
17da0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
17db0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
17dc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72 69  ./* Opcode: Veri
17dd0 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  fyCookie P1 P2 P
17de0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63  3 * *.**.** Chec
17df0 6b 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67  k the value of g
17e00 6c 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20 70  lobal database p
17e10 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
17e20 30 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  0 (the.** schema
17e30 20 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61   version) and ma
17e40 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 65 71  ke sure it is eq
17e50 75 61 6c 20 74 6f 20 50 32 20 61 6e 64 20 74 68  ual to P2 and th
17e60 61 74 20 74 68 65 0a 2a 2a 20 67 65 6e 65 72 61  at the.** genera
17e70 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 6f 6e 20  tion counter on 
17e80 74 68 65 20 6c 6f 63 61 6c 20 73 63 68 65 6d 61  the local schema
17e90 20 70 61 72 73 65 20 65 71 75 61 6c 73 20 50 33   parse equals P3
17ea0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
17eb0 65 20 64 61 74 61 62 61 73 65 20 6e 75 6d 62 65  e database numbe
17ec0 72 20 77 68 69 63 68 20 69 73 20 30 20 66 6f 72  r which is 0 for
17ed0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
17ee0 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31  se file.** and 1
17ef0 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 68 6f   for the file ho
17f00 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61 72 79 20  lding temporary 
17f10 74 61 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20  tables and some 
17f20 68 69 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a  higher number.**
17f30 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20 64   for auxiliary d
17f40 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
17f50 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
17f60 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
17f70 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
17f80 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
17f90 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
17fa0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
17fb0 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
17fc0 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
17fd0 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
17fe0 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
17ff0 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
18000 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
18010 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72  ma..**.** Either
18020 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e   a transaction n
18030 65 65 64 73 20 74 6f 20 68 61 76 65 20 62 65 65  eeds to have bee
18040 6e 20 73 74 61 72 74 65 64 20 6f 72 20 61 6e 20  n started or an 
18050 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a  OP_Open needs.**
18060 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20   to be executed 
18070 28 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20  (to establish a 
18080 72 65 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72  read lock) befor
18090 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  e this opcode is
180a0 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a  .** invoked..*/.
180b0 63 61 73 65 20 4f 50 5f 56 65 72 69 66 79 43 6f  case OP_VerifyCo
180c0 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d  okie: {.  int iM
180d0 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b  eta;.  int iGen;
180e0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
180f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
18100 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
18110 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
18120 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
18130 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
18140 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  1)<<pOp->p1))!=0
18150 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
18160 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
18170 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Held(db, pOp->p1
18180 2c 20 30 29 20 29 3b 0a 20 20 70 42 74 20 3d 20  , 0) );.  pBt = 
18190 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
181a0 2e 70 42 74 3b 0a 20 20 69 66 28 20 70 42 74 20  .pBt;.  if( pBt 
181b0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  ){.    sqlite3Bt
181c0 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
181d0 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
181e0 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d  SION, (u32 *)&iM
181f0 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d  eta);.    iGen =
18200 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
18210 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65  ].pSchema->iGene
18220 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b  ration;.  }else{
18230 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74  .    iGen = iMet
18240 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  a = 0;.  }.  if(
18250 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20   iMeta!=pOp->p2 
18260 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 33  || iGen!=pOp->p3
18270 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
18280 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
18290 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
182a0 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44  rrMsg = sqlite3D
182b0 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74  bStrDup(db, "dat
182c0 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
182d0 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20   changed");.    
182e0 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  /* If the schema
182f0 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65  -cookie from the
18300 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
18310 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69  atches the cooki
18320 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64  e .    ** stored
18330 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d   with the in-mem
18340 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69  ory representati
18350 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  on of the schema
18360 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20  , do.    ** not 
18370 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
18380 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  a from the datab
18390 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a  ase file..    **
183a0 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75  .    ** If virtu
183b0 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e  al-tables are in
183c0 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f   use, this is no
183d0 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69  t just an optimi
183e0 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f  zation..    ** O
183f0 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73  ften, v-tables s
18400 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20  tore their data 
18410 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  in other SQLite 
18420 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20  tables, which.  
18430 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64    ** are queried
18440 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65   from within xNe
18450 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76  xt() and other v
18460 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75  -table methods u
18470 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70  sing.    ** prep
18480 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66  ared queries. If
18490 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73   such a query is
184a0 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65   out-of-date, we
184b0 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a   do not want to.
184c0 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74      ** discard t
184d0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
184e0 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20  ma, as the user 
184f0 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  code implementin
18500 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74  g the.    ** v-t
18510 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20  able would have 
18520 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20  to be ready for 
18530 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
18540 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c   structure itsel
18550 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69  f.    ** to be i
18560 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65  nvalidated whene
18570 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ver sqlite3_step
18580 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  () is called fro
18590 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a  m within .    **
185a0 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f   a v-table metho
185b0 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
185c0 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  ( db->aDb[pOp->p
185d0 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  1].pSchema->sche
185e0 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61  ma_cookie!=iMeta
185f0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
18600 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63  3ResetInternalSc
18610 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31  hema(db, pOp->p1
18620 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d  );.    }..    p-
18630 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
18640 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43    rc = SQLITE_SC
18650 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61  HEMA;.  }.  brea
18660 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
18670 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20   OpenRead P1 P2 
18680 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f  P3 P4 P5.**.** O
18690 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20  pen a read-only 
186a0 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64  cursor for the d
186b0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77 68  atabase table wh
186c0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  ose root page is
186d0 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61  .** P2 in a data
186e0 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20  base file.  The 
186f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
18700 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50   determined by P
18710 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61  3. .** P3==0 mea
18720 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ns the main data
18730 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e  base, P3==1 mean
18740 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  s the database u
18750 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70  sed for .** temp
18760 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e  orary tables, an
18770 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65  d P3>1 means use
18780 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  d the correspond
18790 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20  ing attached.** 
187a0 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65 20  database.  Give 
187b0 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61  the new cursor a
187c0 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20  n identifier of 
187d0 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76  P1.  The P1.** v
187e0 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62  alues need not b
187f0 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74  e contiguous but
18800 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73   all P1 values s
18810 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69  hould be small i
18820 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69  ntegers..** It i
18830 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50  s an error for P
18840 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65  1 to be negative
18850 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30  ..**.** If P5!=0
18860 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f   then use the co
18870 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
18880 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74  r P2 as the root
18890 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68   page, not.** th
188a0 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74  e value of P2 it
188b0 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  self..**.** Ther
188c0 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64  e will be a read
188d0 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74   lock on the dat
188e0 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20 74  abase whenever t
188f0 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70  here is an.** op
18900 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74  en cursor.  If t
18910 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73 20  he database was 
18920 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74  unlocked prior t
18930 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  o this instructi
18940 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61  on.** then a rea
18950 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  d lock is acquir
18960 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
18970 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
18980 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20   A read.** lock 
18990 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f  allows other pro
189a0 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20 74  cesses to read t
189b0 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74 20  he database but 
189c0 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79  prohibits.** any
189d0 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 66   other process f
189e0 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68  rom modifying th
189f0 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
18a00 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a   read lock is.**
18a10 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61   released when a
18a20 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 63  ll cursors are c
18a30 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73 20  losed.  If this 
18a40 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65  instruction atte
18a50 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61  mpts.** to get a
18a60 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66   read lock but f
18a70 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74  ails, the script
18a80 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68   terminates with
18a90 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55   an.** SQLITE_BU
18aa0 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a  SY error code..*
18ab0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
18ac0 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
18ad0 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
18ae0 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
18af0 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
18b00 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
18b10 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
18b20 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
18b30 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
18b40 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
18b50 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
18b60 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
18b70 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
18b80 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
18b90 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
18ba0 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
18bb0 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
18bc0 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
18bd0 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
18be0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
18bf0 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
18c00 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
18c10 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a  o OpenWrite..*/.
18c20 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57  /* Opcode: OpenW
18c30 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50 34  rite P1 P2 P3 P4
18c40 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61   P5.**.** Open a
18c50 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
18c60 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74  or named P1 on t
18c70 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
18c80 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20  x whose root.** 
18c90 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20  page is P2.  Or 
18ca0 69 66 20 50 35 21 3d 30 20 75 73 65 20 74 68 65  if P5!=0 use the
18cb0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
18cc0 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20  ster P2 to find 
18cd0 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  the.** root page
18ce0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
18cf0 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
18d00 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
18d10 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
18d20 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
18d30 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
18d40 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
18d50 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
18d60 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
18d70 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
18d80 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
18d90 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
18da0 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
18db0 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
18dc0 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
18dd0 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
18de0 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
18df0 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
18e00 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
18e10 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
18e20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
18e30 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a  able, or to the.
18e40 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78  ** largest index
18e50 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f   of any column o
18e60 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
18e70 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65   is actually use
18e80 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  d..**.** This in
18e90 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20  struction works 
18ea0 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65  just like OpenRe
18eb0 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ad except that i
18ec0 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73  t opens the curs
18ed0 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72  or.** in read/wr
18ee0 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61  ite mode.  For a
18ef0 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68   given table, th
18f00 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f  ere can be one o
18f10 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79  r more read-only
18f20 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61  .** cursors or a
18f30 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69   single read/wri
18f40 74 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f  te cursor but no
18f50 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65  t both..**.** Se
18f60 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e  e also OpenRead.
18f70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
18f80 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70  Read:.case OP_Op
18f90 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74  enWrite: {.  int
18fa0 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e   nField;.  KeyIn
18fb0 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
18fc0 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44  int p2;.  int iD
18fd0 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b  b;.  int wrFlag;
18fe0 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20  .  Btree *pX;.  
18ff0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
19000 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
19010 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29  if( p->expired )
19020 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
19030 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65  E_ABORT;.    bre
19040 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c  ak;.  }..  nFiel
19050 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66  d = 0;.  pKeyInf
19060 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f  o = 0;.  p2 = pO
19070 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70  p->p2;.  iDb = p
19080 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
19090 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
190a0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
190b0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
190c0 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
190d0 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  1)<<iDb))!=0 );.
190e0 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
190f0 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44  [iDb];.  pX = pD
19100 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74  b->pBt;.  assert
19110 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pX!=0 );.  if(
19120 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
19130 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20  _OpenWrite ){.  
19140 20 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20    wrFlag = 1;.  
19150 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
19160 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
19170 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
19180 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63      if( pDb->pSc
19190 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
191a0 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t < p->minWriteF
191b0 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20  ileFormat ){.   
191c0 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69     p->minWriteFi
191d0 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e  leFormat = pDb->
191e0 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
191f0 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  rmat;.    }.  }e
19200 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  lse{.    wrFlag 
19210 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  = 0;.  }.  if( p
19220 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 61 73  Op->p5 ){.    as
19230 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20  sert( p2>0 );.  
19240 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 70 2d    assert( p2<=p-
19250 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 70 49 6e  >nMem );.    pIn
19260 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  2 = &aMem[p2];. 
19270 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
19280 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20  Valid(pIn2) );. 
19290 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32     assert( (pIn2
192a0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
192b0 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  t)!=0 );.    sql
192c0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
192d0 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20  erify(pIn2);.   
192e0 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d   p2 = (int)pIn2-
192f0 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65  >u.i;.    /* The
19300 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73   p2 value always
19310 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72   comes from a pr
19320 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62  ior OP_CreateTab
19330 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20  le opcode and.  
19340 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65    ** that opcode
19350 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74   will always set
19360 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f   the p2 value to
19370 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c   2 or more or el
19380 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20  se fail..    ** 
19390 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20  If there were a 
193a0 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65  failure, the pre
193b0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
193c0 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65  would have halte
193d0 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20  d.    ** before 
193e0 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e  reaching this in
193f0 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  struction. */.  
19400 20 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32    if( NEVER(p2<2
19410 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d  ) ) {.      rc =
19420 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
19430 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BKPT;.      goto
19440 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19450 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ror;.    }.  }. 
19460 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
19470 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a  ==P4_KEYINFO ){.
19480 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70      pKeyInfo = p
19490 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
194a0 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  .    pKeyInfo->e
194b0 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b  nc = ENC(p->db);
194c0 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b  .    nField = pK
194d0 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31  eyInfo->nField+1
194e0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
194f0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
19500 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c  T32 ){.    nFiel
19510 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
19520 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
19530 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 75  ->p1>=0 );.  pCu
19540 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
19550 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e  or(p, pOp->p1, n
19560 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a  Field, iDb, 1);.
19570 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20    if( pCur==0 ) 
19580 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
19590 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  Cur->nullRow = 1
195a0 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65  ;.  pCur->isOrde
195b0 72 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  red = 1;.  rc = 
195c0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
195d0 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61  or(pX, p2, wrFla
195e0 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75  g, pKeyInfo, pCu
195f0 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  r->pCursor);.  p
19600 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
19610 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 2f 2a 20  pKeyInfo;..  /* 
19620 53 69 6e 63 65 20 69 74 20 70 65 72 66 6f 72 6d  Since it perform
19630 73 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  s no memory allo
19640 63 61 74 69 6f 6e 20 6f 72 20 49 4f 2c 20 74 68  cation or IO, th
19650 65 20 6f 6e 6c 79 20 76 61 6c 75 65 20 74 68 61  e only value tha
19660 74 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74  t.  ** sqlite3Bt
19670 72 65 65 43 75 72 73 6f 72 28 29 20 6d 61 79 20  reeCursor() may 
19680 72 65 74 75 72 6e 20 69 73 20 53 51 4c 49 54 45  return is SQLITE
19690 5f 4f 4b 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74  _OK. */.  assert
196a0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
196b0 29 3b 0a 0a 20 20 2f 2a 20 53 65 74 20 74 68 65  );..  /* Set the
196c0 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61   VdbeCursor.isTa
196d0 62 6c 65 20 61 6e 64 20 69 73 49 6e 64 65 78 20  ble and isIndex 
196e0 76 61 72 69 61 62 6c 65 73 2e 20 50 72 65 76 69  variables. Previ
196f0 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ous versions of.
19700 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64    ** SQLite used
19710 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65   to check if the
19720 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73   root-page flags
19730 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68   were sane at th
19740 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e  is point.  ** an
19750 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73  d report databas
19760 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20  e corruption if 
19770 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62  they were not, b
19780 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61  ut this check ha
19790 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76  s.  ** since mov
197a0 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65  ed into the btre
197b0 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20  e layer.  */  . 
197c0 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d   pCur->isTable =
197d0 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34   pOp->p4type!=P4
197e0 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 70 43 75 72  _KEYINFO;.  pCur
197f0 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 75  ->isIndex = !pCu
19800 72 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72  r->isTable;.  br
19810 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
19820 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  e: OpenEphemeral
19830 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a   P1 P2 * P4 P5.*
19840 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
19850 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74  cursor P1 to a t
19860 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a  ransient table..
19870 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  ** The cursor is
19880 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72   always opened r
19890 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69  ead/write even i
198a0 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  f .** the main d
198b0 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d  atabase is read-
198c0 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d  only.  The ephem
198d0 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73  eral.** table is
198e0 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74   deleted automat
198f0 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20  ically when the 
19900 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64  cursor is closed
19910 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
19920 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
19930 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d  mns in the ephem
19940 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  eral table..** T
19950 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73  he cursor points
19960 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c   to a BTree tabl
19970 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74  e if P4==0 and t
19980 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a  o a BTree index.
19990 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20  ** if P4 is not 
199a0 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  0.  If P4 is not
199b0 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73   NULL, it points
199c0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   to a KeyInfo st
199d0 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20  ructure.** that 
199e0 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d  defines the form
199f0 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68  at of keys in th
19a00 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  e index..**.** T
19a10 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20 6f  his opcode was o
19a20 6e 63 65 20 63 61 6c 6c 65 64 20 4f 70 65 6e 54  nce called OpenT
19a30 65 6d 70 2e 20 20 42 75 74 20 74 68 61 74 20 63  emp.  But that c
19a40 72 65 61 74 65 64 0a 2a 2a 20 63 6f 6e 66 75 73  reated.** confus
19a50 69 6f 6e 20 62 65 63 61 75 73 65 20 74 68 65 20  ion because the 
19a60 74 65 72 6d 20 22 74 65 6d 70 20 74 61 62 6c 65  term "temp table
19a70 22 2c 20 6d 69 67 68 74 20 72 65 66 65 72 20 65  ", might refer e
19a80 69 74 68 65 72 0a 2a 2a 20 74 6f 20 61 20 54 45  ither.** to a TE
19a90 4d 50 20 74 61 62 6c 65 20 61 74 20 74 68 65 20  MP table at the 
19aa0 53 51 4c 20 6c 65 76 65 6c 2c 20 6f 72 20 74 6f  SQL level, or to
19ab0 20 61 20 74 61 62 6c 65 20 6f 70 65 6e 65 64 20   a table opened 
19ac0 62 79 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64  by.** this opcod
19ad0 65 2e 20 20 54 68 65 6e 20 74 68 69 73 20 6f 70  e.  Then this op
19ae0 63 6f 64 65 20 77 61 73 20 63 61 6c 6c 20 4f 70  code was call Op
19af0 65 6e 56 69 72 74 75 61 6c 2e 20 20 42 75 74 0a  enVirtual.  But.
19b00 2a 2a 20 74 68 61 74 20 63 72 65 61 74 65 64 20  ** that created 
19b10 63 6f 6e 66 75 73 69 6f 6e 20 77 69 74 68 20 74  confusion with t
19b20 68 65 20 77 68 6f 6c 65 20 76 69 72 74 75 61 6c  he whole virtual
19b30 2d 74 61 62 6c 65 20 69 64 65 61 2e 0a 2a 2a 0a  -table idea..**.
19b40 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
19b50 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73  ter can be a mas
19b60 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a  k of the BTREE_*
19b70 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a   flags defined.*
19b80 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54  * in btree.h.  T
19b90 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72  hese flags contr
19ba0 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68  ol aspects of th
19bb0 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a  e operation of.*
19bc0 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68  * the btree.  Th
19bd0 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55  e BTREE_OMIT_JOU
19be0 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53  RNAL and BTREE_S
19bf0 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a  INGLE flags are.
19c00 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74  ** added automat
19c10 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70  ically..*/./* Op
19c20 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e  code: OpenAutoin
19c30 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a  dex P1 P2 * P4 *
19c40 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
19c50 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d  de works the sam
19c60 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65  e as OP_OpenEphe
19c70 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61  meral.  It has a
19c80 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61  .** different na
19c90 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73  me to distinguis
19ca0 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c  h its use.  Tabl
19cb0 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
19cc0 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f  .** by this opco
19cd0 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  de will be used 
19ce0 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  for automaticall
19cf0 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73 69  y created transi
19d00 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69  ent.** indices i
19d10 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65  n joins..*/.case
19d20 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65   OP_OpenAutoinde
19d30 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  x: .case OP_Open
19d40 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56  Ephemeral: {.  V
19d50 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
19d60 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
19d70 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20  nt vfsFlags = . 
19d80 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
19d90 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20  _READWRITE |.   
19da0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43     SQLITE_OPEN_C
19db0 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51  REATE |.      SQ
19dc0 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53  LITE_OPEN_EXCLUS
19dd0 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  IVE |.      SQLI
19de0 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e  TE_OPEN_DELETEON
19df0 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51  CLOSE |.      SQ
19e00 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49  LITE_OPEN_TRANSI
19e10 45 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73 65 72  ENT_DB;..  asser
19e20 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
19e30 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
19e40 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
19e50 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c  p1, pOp->p2, -1,
19e60 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   1);.  if( pCx==
19e70 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
19e80 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
19e90 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 1;.  rc = sqli
19ea0 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d  te3BtreeOpen(db-
19eb0 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70  >pVfs, 0, db, &p
19ec0 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20 20  Cx->pBt, .      
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55    BTREE_OMIT_JOU
19ef0 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e  RNAL | BTREE_SIN
19f00 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76  GLE | pOp->p5, v
19f10 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20  fsFlags);.  if( 
19f20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
19f30 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
19f40 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73  3BtreeBeginTrans
19f50 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20  (pCx->pBt, 1);. 
19f60 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
19f70 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a  ITE_OK ){.    /*
19f80 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
19f90 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65  index is require
19fa0 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20  d, create it by 
19fb0 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73  calling.    ** s
19fc0 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
19fd0 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68  eTable() with th
19fe0 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20  e BTREE_BLOBKEY 
19ff0 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20  flag before.    
1a000 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49  ** opening it. I
1a010 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  f a transient ta
1a020 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c  ble is required,
1a030 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20   just use the.  
1a040 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c    ** automatical
1a050 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65  ly created table
1a060 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20   with root-page 
1a070 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45  1 (an BLOB_INTKE
1a080 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f  Y table)..    */
1a090 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
1a0a0 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20  .pKeyInfo ){.   
1a0b0 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20     int pgno;.   
1a0c0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1a0d0 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1a0e0 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  FO );.      rc =
1a0f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1a100 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42  ateTable(pCx->pB
1a110 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f  t, &pgno, BTREE_
1a120 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70  BLOBKEY | pOp->p
1a130 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72  5); .      if( r
1a140 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1a150 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1a160 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f  pgno==MASTER_ROO
1a170 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 72  T+1 );.        r
1a180 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1a190 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c  Cursor(pCx->pBt,
1a1a0 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20   pgno, 1, .     
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1c0 20 20 20 20 20 20 20 20 20 20 20 28 4b 65 79 49             (KeyI
1a1d0 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20  nfo*)pOp->p4.z, 
1a1e0 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  pCx->pCursor);. 
1a1f0 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79         pCx->pKey
1a200 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1a210 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20  KeyInfo;.       
1a220 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1a230 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29  enc = ENC(p->db)
1a240 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1a250 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30  pCx->isTable = 0
1a260 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1a270 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1a280 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1a290 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54  pBt, MASTER_ROOT
1a2a0 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75  , 1, 0, pCx->pCu
1a2b0 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78  rsor);.      pCx
1a2c0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
1a2d0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e     }.  }.  pCx->
1a2e0 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70  isOrdered = (pOp
1a2f0 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52  ->p5!=BTREE_UNOR
1a300 44 45 52 45 44 29 3b 0a 20 20 70 43 78 2d 3e 69  DERED);.  pCx->i
1a310 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e 69  sIndex = !pCx->i
1a320 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b  sTable;.  break;
1a330 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1a340 70 65 6e 53 6f 72 74 65 72 20 50 31 20 50 32 20  penSorter P1 P2 
1a350 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  * P4 *.**.** Thi
1a360 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c  s opcode works l
1a370 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ike OP_OpenEphem
1a380 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74  eral except that
1a390 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74   it opens.** a t
1a3a0 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74  ransient index t
1a3b0 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61  hat is specifica
1a3c0 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20  lly designed to 
1a3d0 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61  sort large.** ta
1a3e0 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78  bles using an ex
1a3f0 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72  ternal merge-sor
1a400 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2f 0a  t algorithm..*/.
1a410 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70  case OP_SorterOp
1a420 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
1a430 6f 72 20 2a 70 43 78 3b 0a 23 69 66 6e 64 65 66  or *pCx;.#ifndef
1a440 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52   SQLITE_OMIT_MER
1a450 47 45 5f 53 4f 52 54 0a 20 20 70 43 78 20 3d 20  GE_SORT.  pCx = 
1a460 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1a470 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1a480 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66  p2, -1, 1);.  if
1a490 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1a4a0 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70  no_mem;.  pCx->p
1a4b0 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1a4c0 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 70 43  4.pKeyInfo;.  pC
1a4d0 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  x->pKeyInfo->enc
1a4e0 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20   = ENC(p->db);. 
1a4f0 20 70 43 78 2d 3e 69 73 53 6f 72 74 65 72 20 3d   pCx->isSorter =
1a500 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   1;.  rc = sqlit
1a510 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74  e3VdbeSorterInit
1a520 28 64 62 2c 20 70 43 78 29 3b 0a 23 65 6c 73 65  (db, pCx);.#else
1a530 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
1a540 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1a550 6c 3b 0a 20 20 70 63 2d 2d 3b 0a 23 65 6e 64 69  l;.  pc--;.#endi
1a560 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  f.  break;.}../*
1a570 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65   Opcode: OpenPse
1a580 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a  udo P1 P2 P3 * *
1a590 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
1a5a0 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f  w cursor that po
1a5b0 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74  ints to a fake t
1a5c0 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
1a5d0 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ns a single.** r
1a5e0 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ow of data.  The
1a5f0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74   content of that
1a600 20 6f 6e 65 20 72 6f 77 20 69 6e 20 74 68 65 20   one row in the 
1a610 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72  content of memor
1a620 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  y.** register P2
1a630 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1a640 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65 63  s, cursor P1 bec
1a650 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  omes an alias fo
1a660 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c  r the .** MEM_Bl
1a670 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61  ob content conta
1a680 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ined in register
1a690 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65   P2..**.** A pse
1a6a0 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65  udo-table create
1a6b0 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
1a6c0 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64   is used to hold
1a6d0 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77   a single.** row
1a6e0 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65   output from the
1a6f0 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20   sorter so that 
1a700 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64  the row can be d
1a710 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a  ecomposed into.*
1a720 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c  * individual col
1a730 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f  umns using the O
1a740 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
1a750 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20    The OP_Column 
1a760 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65  opcode.** is the
1a770 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63   only cursor opc
1a780 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77  ode that works w
1a790 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62  ith a pseudo-tab
1a7a0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  le..**.** P3 is 
1a7b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69  the number of fi
1a7c0 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
1a7d0 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65  rds that will be
1a7e0 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68   stored by.** th
1a7f0 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  e pseudo-table..
1a800 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50  */.case OP_OpenP
1a810 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43  seudo: {.  VdbeC
1a820 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61  ursor *pCx;..  a
1a830 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1a840 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1a850 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1a860 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c  Op->p1, pOp->p3,
1a870 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70   -1, 0);.  if( p
1a880 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1a890 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1a8a0 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1a8b0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d  pseudoTableReg =
1a8c0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d   pOp->p2;.  pCx-
1a8d0 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1a8e0 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 30  pCx->isIndex = 0
1a8f0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1a900 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50   Opcode: Close P
1a910 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
1a920 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70  Close a cursor p
1a930 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
1a940 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69   as P1.  If P1 i
1a950 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74  s not.** current
1a960 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e  ly open, this in
1a970 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e  struction is a n
1a980 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
1a990 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65  _Close: {.  asse
1a9a0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1a9b0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1a9c0 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
1a9d0 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1a9e0 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  p, p->apCsr[pOp-
1a9f0 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  >p1]);.  p->apCs
1aa00 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a  r[pOp->p1] = 0;.
1aa10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1aa20 70 63 6f 64 65 3a 20 53 65 65 6b 47 65 20 50 31  pcode: SeekGe P1
1aa30 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
1aa40 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1aa50 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1aa60 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1aa70 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1aa80 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1aa90 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1aaa0 73 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b  ster P3 as the k
1aab0 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50  ey.  If cursor P
1aac0 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1aad0 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1aae0 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1aaf0 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1ab00 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1ab10 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1ab20 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1ab30 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1ab40 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1ab50 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
1ab60 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1ab70 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
1ab80 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
1ab90 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1aba0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
1abb0 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1abc0 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
1abd0 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
1abe0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1abf0 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1ac00 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1ac10 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  o P2..**.** See 
1ac20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1ac30 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c  Found, Distinct,
1ac40 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c   SeekLt, SeekGt,
1ac50 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1ac60 63 6f 64 65 3a 20 53 65 65 6b 47 74 20 50 31 20  code: SeekGt P1 
1ac70 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1ac80 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1ac90 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1aca0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1acb0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1acc0 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1acd0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1ace0 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1acf0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1ad00 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1ad10 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1ad20 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1ad30 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1ad40 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1ad50 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1ad60 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1ad70 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1ad80 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1ad90 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1ada0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
1adb0 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
1adc0 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
1add0 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
1ade0 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1adf0 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61   no records grea
1ae00 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ter than .** the
1ae10 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1ae20 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1ae30 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1ae40 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1ae50 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69   NotFound, Disti
1ae60 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65  nct, SeekLt, See
1ae70 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
1ae80 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 74  * Opcode: SeekLt
1ae90 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a   P1 P2 P3 P4 * .
1aea0 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1aeb0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1aec0 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1aed0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1aee0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1aef0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1af00 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1af10 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1af20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1af30 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1af40 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1af50 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1af60 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1af70 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1af80 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1af90 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1afa0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1afb0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1afc0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1afd0 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
1afe0 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
1aff0 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1b000 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1b010 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73  e no records les
1b020 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  s than .** the k
1b030 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1b040 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1b050 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65   to P2..**.** Se
1b060 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1b070 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63  otFound, Distinc
1b080 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  t, SeekGt, SeekG
1b090 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  e, SeekLe.*/./* 
1b0a0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50  Opcode: SeekLe P
1b0b0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
1b0c0 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1b0d0 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1b0e0 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1b0f0 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1b100 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1b110 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1b120 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1b130 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1b140 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1b150 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1b160 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1b170 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1b180 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1b190 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1b1a0 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1b1b0 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1b1c0 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1b1d0 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
1b1e0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61  points to the la
1b1f0 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  rgest entry that
1b200 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61   .** is less tha
1b210 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1b220 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1b230 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1b240 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68  ords .** less th
1b250 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1b260 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1b270 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1b280 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1b290 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1b2a0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
1b2b0 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53  tinct, SeekGt, S
1b2c0 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f  eekGe, SeekLt.*/
1b2d0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 74 3a  .case OP_SeekLt:
1b2e0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1b2f0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1b300 5f 53 65 65 6b 4c 65 3a 20 20 20 20 20 20 20 20  _SeekLe:        
1b310 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1b320 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 65 3a  .case OP_SeekGe:
1b330 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1b340 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1b350 5f 53 65 65 6b 47 74 3a 20 7b 20 20 20 20 20 20  _SeekGt: {      
1b360 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1b370 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
1b380 74 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72 73  t oc;.  VdbeCurs
1b390 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b  or *pC;.  Unpack
1b3a0 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e  edRecord r;.  in
1b3b0 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34 20  t nField;.  i64 
1b3c0 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68  iKey;      /* Th
1b3d0 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74  e rowid we are t
1b3e0 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20  o seek to */..  
1b3f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1b400 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1b410 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1b420 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30  sert( pOp->p2!=0
1b430 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1b440 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1b450 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1b460 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1b470 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
1b480 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1b490 5f 53 65 65 6b 4c 65 20 3d 3d 20 4f 50 5f 53 65  _SeekLe == OP_Se
1b4a0 65 6b 4c 74 2b 31 20 29 3b 0a 20 20 61 73 73 65  ekLt+1 );.  asse
1b4b0 72 74 28 20 4f 50 5f 53 65 65 6b 47 65 20 3d 3d  rt( OP_SeekGe ==
1b4c0 20 4f 50 5f 53 65 65 6b 4c 74 2b 32 20 29 3b 0a   OP_SeekLt+2 );.
1b4d0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1b4e0 6b 47 74 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74  kGt == OP_SeekLt
1b4f0 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +3 );.  assert( 
1b500 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
1b510 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
1b520 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b  ->pCursor!=0) ){
1b530 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f  .    oc = pOp->o
1b540 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e 6e  pcode;.    pC->n
1b550 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
1b560 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  if( pC->isTable 
1b570 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ){.      /* The 
1b580 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50  input value in P
1b590 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e  3 might be of an
1b5a0 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c  y type: integer,
1b5b0 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20   real, string,. 
1b5c0 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72       ** blob, or
1b5d0 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e   NULL.  But it n
1b5e0 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e  eeds to be an in
1b5f0 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20  teger before we 
1b600 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a 20  can do.      ** 
1b610 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76  the seek, so cov
1b620 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 20  ert it. */.     
1b630 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1b640 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61 70  p->p3];.      ap
1b650 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
1b660 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20  ty(pIn3);.      
1b670 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  iKey = sqlite3Vd
1b680 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29  beIntValue(pIn3)
1b690 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69  ;.      pC->rowi
1b6a0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20  dIsValid = 0;.. 
1b6b0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50       /* If the P
1b6c0 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f  3 value could no
1b6d0 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
1b6e0 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77  nto an integer w
1b6f0 69 74 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a 20  ithout.      ** 
1b700 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
1b710 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61  ion, then specia
1b720 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  l processing is 
1b730 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20  required... */. 
1b740 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
1b750 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1b760 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
1b770 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1b780 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
1b790 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  {.          /* I
1b7a0 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1b7b0 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
1b7c0 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64  ed into any kind
1b7d0 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20   of a number,.  
1b7e0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
1b7f0 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20  the seek is not 
1b800 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d  possible, so jum
1b810 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20  p to P2 */.     
1b820 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1b830 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  2 - 1;.         
1b840 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
1b850 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  }.        /* If 
1b860 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  we reach this po
1b870 69 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 50 33  int, then the P3
1b880 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 61   value must be a
1b890 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20 20   floating.      
1b8a0 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62 65    ** point numbe
1b8b0 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  r. */.        as
1b8c0 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61  sert( (pIn3->fla
1b8d0 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21 3d  gs & MEM_Real)!=
1b8e0 30 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66  0 );..        if
1b8f0 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53 54  ( iKey==SMALLEST
1b900 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33 2d  _INT64 && (pIn3-
1b910 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20  >r<(double)iKey 
1b920 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29 7b  || pIn3->r>0) ){
1b930 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  .          /* Th
1b940 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 74 6f  e P3 value is to
1b950 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e 69  o large in magni
1b960 74 75 64 65 20 74 6f 20 62 65 20 65 78 70 72 65  tude to be expre
1b970 73 73 65 64 20 61 73 20 61 6e 0a 20 20 20 20 20  ssed as an.     
1b980 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65 72 2e       ** integer.
1b990 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 72 65   */.          re
1b9a0 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  s = 1;.         
1b9b0 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20 29   if( pIn3->r<0 )
1b9c0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  {.            if
1b9d0 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc>=OP_SeekGe 
1b9e0 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1b9f0 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d  OP_SeekGe || oc=
1ba00 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20  =OP_SeekGt );.  
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
1ba20 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72   sqlite3BtreeFir
1ba30 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  st(pC->pCursor, 
1ba40 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20  &res);.         
1ba50 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1ba60 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1ba70 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1ba80 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
1ba90 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
1baa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
1bab0 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b 4c 65 20 29   oc<=OP_SeekLe )
1bac0 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f  {  assert( oc==O
1bad0 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d  P_SeekLt || oc==
1bae0 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20  OP_SeekLe );.   
1baf0 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
1bb00 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
1bb10 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1bb20 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  es);.           
1bb30 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1bb40 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1bb50 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1bb60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
1bb70 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1bb80 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1bb90 20 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20             pc = 
1bba0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1bbb0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1bbc0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1bbd0 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d 3d    }else if( oc==
1bbe0 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
1bbf0 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20  =OP_SeekGe ){.  
1bc00 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
1bc10 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75 6e  he ceiling() fun
1bc20 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74  ction to convert
1bc30 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20   real->int */.  
1bc40 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
1bc50 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69 4b  ->r > (double)iK
1bc60 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20 20  ey ) iKey++;.   
1bc70 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1bc80 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65        /* Use the
1bc90 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69 6f   floor() functio
1bca0 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61  n to convert rea
1bcb0 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20  l->int */.      
1bcc0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d      assert( oc==
1bcd0 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d  OP_SeekLe || oc=
1bce0 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20  =OP_SeekGt );.  
1bcf0 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
1bd00 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69 4b  ->r < (double)iK
1bd10 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20 20  ey ) iKey--;.   
1bd20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 0a       }.      } .
1bd30 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1bd40 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1bd50 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1bd60 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c  r, 0, (u64)iKey,
1bd70 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20   0, &res);.     
1bd80 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1bd90 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
1bda0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1bdb0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
1bdc0 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20       if( res==0 
1bdd0 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72  ){.        pC->r
1bde0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31 3b  owidIsValid = 1;
1bdf0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61 73  .        pC->las
1be00 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20  tRowid = iKey;. 
1be10 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
1be20 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 20 3d  {.      nField =
1be30 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20   pOp->p4.i;.    
1be40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1be50 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1be60 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1be70 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20   nField>0 );.   
1be80 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
1be90 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
1bea0 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
1beb0 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20  u16)nField;..   
1bec0 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c     /* The next l
1bed0 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70  ine of code comp
1bee0 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c  utes as follows,
1bef0 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20   only faster:.  
1bf00 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d      **   if( oc=
1bf10 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63  =OP_SeekGt || oc
1bf20 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20  ==OP_SeekLe ){. 
1bf30 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c       **     r.fl
1bf40 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49  ags = UNPACKED_I
1bf50 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20 20 2a 2a  NCRKEY;.      **
1bf60 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1bf70 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  **     r.flags =
1bf80 20 30 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d   0;.      **   }
1bf90 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1bfa0 72 2e 66 6c 61 67 73 20 3d 20 28 75 31 36 29 28  r.flags = (u16)(
1bfb0 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1bfc0 20 2a 20 28 31 20 26 20 28 6f 63 20 2d 20 4f 50   * (1 & (oc - OP
1bfd0 5f 53 65 65 6b 4c 74 29 29 29 3b 0a 20 20 20 20  _SeekLt)));.    
1bfe0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1bff0 5f 53 65 65 6b 47 74 20 7c 7c 20 72 2e 66 6c 61  _SeekGt || r.fla
1c000 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43  gs==UNPACKED_INC
1c010 52 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61 73  RKEY );.      as
1c020 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1c030 6b 4c 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d  kLe || r.flags==
1c040 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1c050 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1c060 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc!=OP_SeekGe 
1c070 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b  || r.flags==0 );
1c080 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1c090 63 21 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20  c!=OP_SeekLt || 
1c0a0 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 0a 20  r.flags==0 );.. 
1c0b0 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61       r.aMem = &a
1c0c0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
1c0d0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1c0e0 47 0a 20 20 20 20 20 20 7b 20 69 6e 74 20 69 3b  G.      { int i;
1c0f0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
1c100 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
1c110 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1c120 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
1c130 65 6e 64 69 66 0a 20 20 20 20 20 20 45 78 70 61  endif.      Expa
1c140 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a  ndBlob(r.aMem);.
1c150 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1c160 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1c170 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1c180 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
1c190 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
1c1a0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1c1b0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1c1c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1c1d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
1c1e0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1c1f0 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43   0;.    }.    pC
1c200 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1c210 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
1c220 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1c230 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
1c240 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
1c250 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
1c260 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
1c270 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65     if( oc>=OP_Se
1c280 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74 28  ekGe ){  assert(
1c290 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c   oc==OP_SeekGe |
1c2a0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  | oc==OP_SeekGt 
1c2b0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73  );.      if( res
1c2c0 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  <0 || (res==0 &&
1c2d0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20   oc==OP_SeekGt) 
1c2e0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1c2f0 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
1c300 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1c310 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
1c320 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1c330 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1c340 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1c350 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1c360 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65  id = 0;.      }e
1c370 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73  lse{.        res
1c380 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
1c390 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
1c3a0 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1c3b0 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLt || oc==OP_S
1c3c0 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 69  eekLe );.      i
1c3d0 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
1c3e0 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
1c3f0 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20 20 20  ekLt) ){.       
1c400 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1c410 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70  eePrevious(pC->p
1c420 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1c430 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1c440 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1c450 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1c460 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  or;.        pC->
1c470 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1c480 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
1c490 20 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69         /* res mi
1c4a0 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20  ght be negative 
1c4b0 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
1c4c0 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65  e is empty.  Che
1c4d0 63 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a  ck to.        **
1c4e0 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20   see if this is 
1c4f0 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20  the case..      
1c500 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73    */.        res
1c510 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45   = sqlite3BtreeE
1c520 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  of(pC->pCursor);
1c530 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1c540 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1c550 70 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20  p2>0 );.    if( 
1c560 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
1c570 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1c580 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1c590 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
1c5a0 73 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e  s when attemptin
1c5b0 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 71  g to open the sq
1c5c0 6c 69 74 65 33 5f 6d 61 73 74 65 72 20 74 61 62  lite3_master tab
1c5d0 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72 65  le.    ** for re
1c5e0 61 64 20 61 63 63 65 73 73 20 72 65 74 75 72 6e  ad access return
1c5f0 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20  s SQLITE_EMPTY. 
1c600 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 77  In this case alw
1c610 61 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20  ays.    ** take 
1c620 74 68 65 20 6a 75 6d 70 20 28 73 69 6e 63 65 20  the jump (since 
1c630 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1c640 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ords in the tabl
1c650 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70  e)..    */.    p
1c660 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1c670 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1c680 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1c690 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1c6a0 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e  ** P1 is an open
1c6b0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e   table cursor an
1c6c0 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20  d P2 is a rowid 
1c6d0 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67  integer.  Arrang
1c6e0 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d  e.** for P1 to m
1c6f0 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70  ove so that it p
1c700 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77  oints to the row
1c710 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a  id given by P2..
1c720 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63  **.** This is ac
1c730 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65  tually a deferre
1c740 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67  d seek.  Nothing
1c750 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e   actually happen
1c760 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63  s until.** the c
1c770 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f  ursor is used to
1c780 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20   read a record. 
1c790 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f   That way, if no
1c7a0 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c   reads.** occur,
1c7b0 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20   no unnecessary 
1c7c0 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a  I/O happens..*/.
1c7d0 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20  case OP_Seek: { 
1c7e0 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
1c7f0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
1c800 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c810 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1c820 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1c830 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1c840 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1c850 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
1c860 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72   ALWAYS(pC->pCur
1c870 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61  sor!=0) ){.    a
1c880 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1c890 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75  le );.    pC->nu
1c8a0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
1c8b0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
1c8c0 3e 70 32 5d 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f  >p2];.    pC->mo
1c8d0 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c  vetoTarget = sql
1c8e0 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1c8f0 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 43 2d 3e  (pIn2);.    pC->
1c900 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1c910 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1c920 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20  edMoveto = 1;.  
1c930 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a  }.  break;.}.  .
1c940 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e  ./* Opcode: Foun
1c950 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
1c960 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
1c970 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1c980 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1c990 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1c9a0 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
1c9b0 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
1c9c0 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
1c9d0 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
1c9e0 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
1c9f0 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
1ca00 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20  d..**.** Cursor 
1ca10 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
1ca20 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
1ca30 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
1ca40 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
1ca50 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  ** is a prefix o
1ca60 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  f any entry in P
1ca70 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73  1 then a jump is
1ca80 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a   made to P2 and.
1ca90 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  ** P1 is left po
1caa0 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61  inting at the ma
1cab0 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2f  tching entry..*/
1cac0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46  ./* Opcode: NotF
1cad0 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
1cae0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d   *.**.** If P4==
1caf0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1cb00 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1cb10 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1cb20 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1cb30 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1cb40 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1cb50 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1cb60 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1cb70 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1cb80 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
1cb90 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1cba0 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1cbb0 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1cbc0 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1cbd0 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68   P4.** is not th
1cbe0 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20  e prefix of any 
1cbf0 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e  entry in P1 then
1cc00 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   a jump is made 
1cc10 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a  to P2.  If P1 .*
1cc20 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  * does contain a
1cc30 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72  n entry whose pr
1cc40 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65  efix matches the
1cc50 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68   P3/P4 record th
1cc60 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61  en control.** fa
1cc70 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  lls through to t
1cc80 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1cc90 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65  ion and P1 is le
1cca0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1ccb0 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65  he.** matching e
1ccc0 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ntry..**.** See 
1ccd0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1cce0 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71 75 65  Exists, IsUnique
1ccf0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46  .*/.case OP_NotF
1cd00 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a  ound:       /* j
1cd10 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1cd20 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20   OP_Found: {    
1cd30 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1cd40 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64   */.  int alread
1cd50 79 45 78 69 73 74 73 3b 0a 20 20 56 64 62 65 43  yExists;.  VdbeC
1cd60 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
1cd70 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a 70 46   res;.  char *pF
1cd80 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  ree;.  UnpackedR
1cd90 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a  ecord *pIdxKey;.
1cda0 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1cdb0 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70   r;.  char aTemp
1cdc0 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  Rec[ROUND8(sizeo
1cdd0 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  f(UnpackedRecord
1cde0 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29  )) + sizeof(Mem)
1cdf0 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66  *3 + 7];..#ifdef
1ce00 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
1ce10 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75  qlite3_found_cou
1ce20 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  nt++;.#endif..  
1ce30 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
1ce40 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
1ce50 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1ce60 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1ce70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1ce80 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1ce90 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1cea0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1ceb0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1cec0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
1ced0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
1cee0 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73  ALWAYS(pC->pCurs
1cef0 6f 72 21 3d 30 29 20 29 7b 0a 0a 20 20 20 20 61  or!=0) ){..    a
1cf00 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1cf10 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  le==0 );.    if(
1cf20 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a   pOp->p4.i>0 ){.
1cf30 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f        r.pKeyInfo
1cf40 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1cf50 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  .      r.nField 
1cf60 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
1cf70 3b 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d  ;.      r.aMem =
1cf80 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20 53 51   pIn3;.#ifdef SQ
1cf90 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20  LITE_DEBUG.     
1cfa0 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
1cfb0 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
1cfc0 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
1cfd0 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
1cfe0 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
1cff0 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
1d000 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d  NPACKED_PREFIX_M
1d010 41 54 43 48 3b 0a 20 20 20 20 20 20 70 49 64 78  ATCH;.      pIdx
1d020 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 7d 65  Key = &r;.    }e
1d030 6c 73 65 7b 0a 20 20 20 20 20 20 70 49 64 78 4b  lse{.      pIdxK
1d040 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
1d050 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63  AllocUnpackedRec
1d060 6f 72 64 28 0a 20 20 20 20 20 20 20 20 20 20 70  ord(.          p
1d070 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65  C->pKeyInfo, aTe
1d080 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
1d090 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a  empRec), &pFree.
1d0a0 20 20 20 20 20 20 29 3b 20 0a 20 20 20 20 20 20        ); .      
1d0b0 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29  if( pIdxKey==0 )
1d0c0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1d0d0 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
1d0e0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
1d0f0 6f 62 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ob );.      asse
1d100 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  rt( (pIn3->flags
1d110 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20   & MEM_Zero)==0 
1d120 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73  );  /* zeroblobs
1d130 20 61 6c 72 65 61 64 79 20 65 78 70 61 6e 64 65   already expande
1d140 64 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  d */.      sqlit
1d150 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61  e3VdbeRecordUnpa
1d160 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c  ck(pC->pKeyInfo,
1d170 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e   pIn3->n, pIn3->
1d180 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 20  z, pIdxKey);.   
1d190 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67     pIdxKey->flag
1d1a0 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52  s |= UNPACKED_PR
1d1b0 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
1d1c0 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  }.    rc = sqlit
1d1d0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1d1e0 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1d1f0 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
1d200 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
1d210 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b   pOp->p4.i==0 ){
1d220 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
1d230 46 72 65 65 28 64 62 2c 20 70 46 72 65 65 29 3b  Free(db, pFree);
1d240 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
1d250 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1d260 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1d270 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78   }.    alreadyEx
1d280 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b  ists = (res==0);
1d290 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1d2a0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1d2b0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1d2c0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1d2d0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
1d2e0 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
1d2f0 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  ){.    if( alrea
1d300 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20  dyExists ) pc = 
1d310 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1d320 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61  else{.    if( !a
1d330 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70  lreadyExists ) p
1d340 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1d350 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1d360 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e  ./* Opcode: IsUn
1d370 69 71 75 65 20 50 31 20 50 32 20 50 33 20 50 34  ique P1 P2 P3 P4
1d380 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20   *.**.** Cursor 
1d390 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e  P1 is open on an
1d3a0 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 2d 20   index b-tree - 
1d3b0 74 68 61 74 20 69 73 20 74 6f 20 73 61 79 2c 20  that is to say, 
1d3c0 61 20 62 74 72 65 65 20 77 68 69 63 68 0a 2a 2a  a btree which.**
1d3d0 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 77 68 65   no data and whe
1d3e0 72 65 20 74 68 65 20 6b 65 79 20 61 72 65 20 72  re the key are r
1d3f0 65 63 6f 72 64 73 20 67 65 6e 65 72 61 74 65 64  ecords generated
1d400 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72   by OP_MakeRecor
1d410 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 6c 69  d with.** the li
1d420 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67 20 74  st field being t
1d430 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44  he integer ROWID
1d440 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68   of the entry th
1d450 61 74 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20  at the index.** 
1d460 65 6e 74 72 79 20 72 65 66 65 72 73 20 74 6f 2e  entry refers to.
1d470 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72 65  .**.** The P3 re
1d480 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  gister contains 
1d490 61 6e 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  an integer recor
1d4a0 64 20 6e 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74  d number. Call t
1d4b0 68 69 73 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e  his record .** n
1d4c0 75 6d 62 65 72 20 52 2e 20 52 65 67 69 73 74 65  umber R. Registe
1d4d0 72 20 50 34 20 69 73 20 74 68 65 20 66 69 72 73  r P4 is the firs
1d4e0 74 20 69 6e 20 61 20 73 65 74 20 6f 66 20 4e 20  t in a set of N 
1d4f0 63 6f 6e 74 69 67 75 6f 75 73 20 72 65 67 69 73  contiguous regis
1d500 74 65 72 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b  ters.** that mak
1d510 65 20 75 70 20 61 6e 20 75 6e 70 61 63 6b 65 64  e up an unpacked
1d520 20 69 6e 64 65 78 20 6b 65 79 20 74 68 61 74 20   index key that 
1d530 63 61 6e 20 62 65 20 75 73 65 64 20 77 69 74 68  can be used with
1d540 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
1d550 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 20 63 61  he value of N ca
1d560 6e 20 62 65 20 69 6e 66 65 72 72 65 64 20 66 72  n be inferred fr
1d570 6f 6d 20 74 68 65 20 63 75 72 73 6f 72 2e 20 4e  om the cursor. N
1d580 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 72 6f   includes the ro
1d590 77 69 64 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70  wid.** value app
1d5a0 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64  ended to the end
1d5b0 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 72 65   of the index re
1d5c0 63 6f 72 64 2e 20 54 68 69 73 20 72 6f 77 69 64  cord. This rowid
1d5d0 20 76 61 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72   value may.** or
1d5e0 20 6d 61 79 20 6e 6f 74 20 62 65 20 74 68 65 20   may not be the 
1d5f0 73 61 6d 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a  same as R..**.**
1d600 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65 20 4e   If any of the N
1d610 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e   registers begin
1d620 6e 69 6e 67 20 77 69 74 68 20 72 65 67 69 73 74  ning with regist
1d630 65 72 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  er P4 contains a
1d640 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20   NULL.** value, 
1d650 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1d660 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74   to P2..**.** Ot
1d670 68 65 72 77 69 73 65 2c 20 74 68 69 73 20 69 6e  herwise, this in
1d680 73 74 72 75 63 74 69 6f 6e 20 63 68 65 63 6b 73  struction checks
1d690 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 63 6f   if cursor P1 co
1d6a0 6e 74 61 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a  ntains an entry.
1d6b0 2a 2a 20 77 68 65 72 65 20 74 68 65 20 66 69 72  ** where the fir
1d6c0 73 74 20 28 4e 2d 31 29 20 66 69 65 6c 64 73 20  st (N-1) fields 
1d6d0 6d 61 74 63 68 20 62 75 74 20 74 68 65 20 72 6f  match but the ro
1d6e0 77 69 64 20 76 61 6c 75 65 20 61 74 20 74 68 65  wid value at the
1d6f0 20 65 6e 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69   end.** of the i
1d700 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6e 6f  ndex entry is no
1d710 74 20 52 2e 20 49 66 20 74 68 65 72 65 20 69 73  t R. If there is
1d720 20 6e 6f 20 73 75 63 68 20 65 6e 74 72 79 2c 20   no such entry, 
1d730 63 6f 6e 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a  control jumps.**
1d740 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
1d750 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74  P2. Otherwise, t
1d760 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
1d770 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65  conflicting inde
1d780 78 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 63 6f  x.** entry is co
1d790 70 69 65 64 20 74 6f 20 72 65 67 69 73 74 65 72  pied to register
1d7a0 20 50 33 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20   P3 and control 
1d7b0 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
1d7c0 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73   the next.** ins
1d7d0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
1d7e0 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
1d7f0 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 46  nd, NotExists, F
1d800 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ound.*/.case OP_
1d810 49 73 55 6e 69 71 75 65 3a 20 7b 20 20 20 20 20  IsUnique: {     
1d820 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1d830 2a 2f 0a 20 20 75 31 36 20 69 69 3b 0a 20 20 56  */.  u16 ii;.  V
1d840 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1d850 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1d860 72 3b 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  r;.  u16 nField;
1d870 0a 20 20 4d 65 6d 20 2a 61 4d 78 3b 0a 20 20 55  .  Mem *aMx;.  U
1d880 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8a0 20 20 2f 2a 20 42 2d 54 72 65 65 20 69 6e 64 65    /* B-Tree inde
1d8b0 78 20 73 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a  x search key */.
1d8c0 20 20 69 36 34 20 52 3b 20 20 20 20 20 20 20 20    i64 R;        
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8e0 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 73 74       /* Rowid st
1d8f0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1d900 20 50 33 20 2a 2f 0a 0a 20 20 70 49 6e 33 20 3d   P3 */..  pIn3 =
1d910 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1d920 0a 20 20 61 4d 78 20 3d 20 26 61 4d 65 6d 5b 70  .  aMx = &aMem[p
1d930 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20  Op->p4.i];.  /* 
1d940 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
1d950 76 61 6c 75 65 73 20 6f 66 20 70 61 72 61 6d 65  values of parame
1d960 74 65 72 73 20 50 31 20 61 6e 64 20 50 34 20 61  ters P1 and P4 a
1d970 72 65 20 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a  re in range. */.
1d980 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d990 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1d9a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1d9b0 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d  ->p4.i>0 && pOp-
1d9c0 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  >p4.i<=p->nMem )
1d9d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1d9e0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1d9f0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1da00 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 69  .  /* Find the i
1da10 6e 64 65 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a  ndex cursor. */.
1da20 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72    pCx = p->apCsr
1da30 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1da40 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65 72 72  ert( pCx->deferr
1da50 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
1da60 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74   pCx->seekResult
1da70 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63   = 0;.  pCx->cac
1da80 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1da90 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72 73 72 20  _STALE;.  pCrsr 
1daa0 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a  = pCx->pCursor;.
1dab0 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20  .  /* If any of 
1dac0 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 4e  the values are N
1dad0 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65 20 6a 75  ULL, take the ju
1dae0 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  mp. */.  nField 
1daf0 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  = pCx->pKeyInfo-
1db00 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69  >nField;.  for(i
1db10 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20  i=0; ii<nField; 
1db20 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 61  ii++){.    if( a
1db30 4d 78 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d  Mx[ii].flags & M
1db40 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20  EM_Null ){.     
1db50 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1db60 31 3b 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d  1;.      pCrsr =
1db70 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   0;.      break;
1db80 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73  .    }.  }.  ass
1db90 65 72 74 28 20 28 61 4d 78 5b 6e 46 69 65 6c 64  ert( (aMx[nField
1dba0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
1dbb0 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  ll)==0 );..  if(
1dbc0 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20   pCrsr!=0 ){.   
1dbd0 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20 74 68 65   /* Populate the
1dbe0 20 69 6e 64 65 78 20 73 65 61 72 63 68 20 6b 65   index search ke
1dbf0 79 2e 20 2a 2f 0a 20 20 20 20 72 2e 70 4b 65 79  y. */.    r.pKey
1dc00 49 6e 66 6f 20 3d 20 70 43 78 2d 3e 70 4b 65 79  Info = pCx->pKey
1dc10 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1dc20 6c 64 20 3d 20 6e 46 69 65 6c 64 20 2b 20 31 3b  ld = nField + 1;
1dc30 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55  .    r.flags = U
1dc40 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53  NPACKED_PREFIX_S
1dc50 45 41 52 43 48 3b 0a 20 20 20 20 72 2e 61 4d 65  EARCH;.    r.aMe
1dc60 6d 20 3d 20 61 4d 78 3b 0a 23 69 66 64 65 66 20  m = aMx;.#ifdef 
1dc70 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
1dc80 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
1dc90 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
1dca0 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
1dcb0 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
1dcc0 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 0a  ]) ); }.#endif..
1dcd0 20 20 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74      /* Extract t
1dce0 68 65 20 76 61 6c 75 65 20 6f 66 20 52 20 66 72  he value of R fr
1dcf0 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  om register P3. 
1dd00 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
1dd10 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1dd20 70 49 6e 33 29 3b 0a 20 20 20 20 52 20 3d 20 70  pIn3);.    R = p
1dd30 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f  In3->u.i;..    /
1dd40 2a 20 53 65 61 72 63 68 20 74 68 65 20 42 2d 54  * Search the B-T
1dd50 72 65 65 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f  ree index. If no
1dd60 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63   conflicting rec
1dd70 6f 72 64 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75  ord is found, ju
1dd80 6d 70 0a 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e  mp.    ** to P2.
1dd90 20 4f 74 68 65 72 77 69 73 65 2c 20 63 6f 70 79   Otherwise, copy
1dda0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
1ddb0 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65  e conflicting re
1ddc0 63 6f 72 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72  cord to.    ** r
1ddd0 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 66  egister P3 and f
1dde0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
1ddf0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1de00 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20  ion.  */.    rc 
1de10 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1de20 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
1de30 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 70  sr, &r, 0, 0, &p
1de40 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b  Cx->seekResult);
1de50 0a 20 20 20 20 69 66 28 20 28 72 2e 66 6c 61 67  .    if( (r.flag
1de60 73 20 26 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s & UNPACKED_PRE
1de70 46 49 58 5f 53 45 41 52 43 48 29 20 7c 7c 20 72  FIX_SEARCH) || r
1de80 2e 72 6f 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20  .rowid==R ){.   
1de90 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1dea0 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  - 1;.    }else{.
1deb0 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20        pIn3->u.i 
1dec0 3d 20 72 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d  = r.rowid;.    }
1ded0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1dee0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45  ./* Opcode: NotE
1def0 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a  xists P1 P2 P3 *
1df00 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65   *.**.** Use the
1df10 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1df20 73 74 65 72 20 50 33 20 61 73 20 61 6e 20 69 6e  ster P3 as an in
1df30 74 65 67 65 72 20 6b 65 79 2e 20 20 49 66 20 61  teger key.  If a
1df40 20 72 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68   record .** with
1df50 20 74 68 61 74 20 6b 65 79 20 64 6f 65 73 20 6e   that key does n
1df60 6f 74 20 65 78 69 73 74 20 69 6e 20 74 61 62 6c  ot exist in tabl
1df70 65 20 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a 75  e of P1, then ju
1df80 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66  mp to P2. .** If
1df90 20 74 68 65 20 72 65 63 6f 72 64 20 64 6f 65 73   the record does
1dfa0 20 65 78 69 73 74 2c 20 74 68 65 6e 20 66 61 6c   exist, then fal
1dfb0 6c 20 74 68 72 6f 75 67 68 2e 20 20 54 68 65 20  l through.  The 
1dfc0 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 0a  cursor is left .
1dfd0 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  ** pointing to t
1dfe0 68 65 20 72 65 63 6f 72 64 20 69 66 20 69 74 20  he record if it 
1dff0 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  exists..**.** Th
1e000 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
1e010 77 65 65 6e 20 74 68 69 73 20 6f 70 65 72 61 74  ween this operat
1e020 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f 75 6e 64  ion and NotFound
1e030 20 69 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a   is that this.**
1e040 20 6f 70 65 72 61 74 69 6f 6e 20 61 73 73 75 6d   operation assum
1e050 65 73 20 74 68 65 20 6b 65 79 20 69 73 20 61 6e  es the key is an
1e060 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74 68 61   integer and tha
1e070 74 20 50 31 20 69 73 20 61 20 74 61 62 6c 65 20  t P1 is a table 
1e080 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f  whereas.** NotFo
1e090 75 6e 64 20 61 73 73 75 6d 65 73 20 6b 65 79 20  und assumes key 
1e0a0 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  is a blob constr
1e0b0 75 63 74 65 64 20 66 72 6f 6d 20 4d 61 6b 65 52  ucted from MakeR
1e0c0 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20 50 31 20  ecord and.** P1 
1e0d0 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a  is an index..**.
1e0e0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1e0f0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73  nd, NotFound, Is
1e100 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f  Unique.*/.case O
1e110 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20  P_NotExists: {  
1e120 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1e130 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n3 */.  VdbeCurs
1e140 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1e150 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
1e160 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79   res;.  u64 iKey
1e170 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ;..  pIn3 = &aMe
1e180 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
1e190 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1e1a0 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
1e1b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1e1c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1e1d0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1e1e0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1e1f0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1e200 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1e210 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1e220 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1e230 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
1e240 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
1e250 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
1e260 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21  f( ALWAYS(pCrsr!
1e270 3d 30 29 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  =0) ){.    res =
1e280 20 30 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70   0;.    iKey = p
1e290 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 72 63  In3->u.i;.    rc
1e2a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1e2b0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1e2c0 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c  rsr, 0, iKey, 0,
1e2d0 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
1e2e0 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33  lastRowid = pIn3
1e2f0 2d 3e 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72  ->u.i;.    pC->r
1e300 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65  owidIsValid = re
1e310 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70  s==0 ?1:0;.    p
1e320 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1e330 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
1e340 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1e350 45 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  E;.    pC->defer
1e360 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1e370 20 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b     if( res!=0 ){
1e380 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
1e390 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 61  >p2 - 1;.      a
1e3a0 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
1e3b0 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20  IsValid==0 );.  
1e3c0 20 20 7d 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b    }.    pC->seek
1e3d0 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
1e3e0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68  }else{.    /* Th
1e3f0 69 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20  is happens when 
1e400 61 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 6f 70  an attempt to op
1e410 65 6e 20 61 20 72 65 61 64 20 63 75 72 73 6f 72  en a read cursor
1e420 20 6f 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   on the .    ** 
1e430 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
1e440 62 6c 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49  ble returns SQLI
1e450 54 45 5f 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f  TE_EMPTY..    */
1e460 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
1e470 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72  2 - 1;.    asser
1e480 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
1e490 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43  lid==0 );.    pC
1e4a0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30  ->seekResult = 0
1e4b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1e4c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
1e4d0 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20  uence P1 P2 * * 
1e4e0 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65  *.**.** Find the
1e4f0 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   next available 
1e500 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1e510 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
1e520 2a 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75  * Write the sequ
1e530 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f  ence number into
1e540 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1e550 20 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   The sequence nu
1e560 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73  mber on the curs
1e570 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  or is incremente
1e580 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20  d after this.** 
1e590 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a  instruction.  .*
1e5a0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e  /.case OP_Sequen
1e5b0 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ce: {           
1e5c0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
1e5d0 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
1e5e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1e5f0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1e600 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1e610 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21  >apCsr[pOp->p1]!
1e620 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
1e630 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  i = p->apCsr[pOp
1e640 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b  ->p1]->seqCount+
1e650 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  +;.  break;.}...
1e660 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f  /* Opcode: NewRo
1e670 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  wid P1 P2 P3 * *
1e680 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77  .**.** Get a new
1e690 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20   integer record 
1e6a0 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72  number (a.k.a "r
1e6b0 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74  owid") used as t
1e6c0 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c  he key to a tabl
1e6d0 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64  e..** The record
1e6e0 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70   number is not p
1e6f0 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61  reviously used a
1e700 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64  s a key in the d
1e710 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65  atabase.** table
1e720 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
1e730 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20  points to.  The 
1e740 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
1e750 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  r is written.** 
1e760 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73  written to regis
1e770 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
1e780 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73   P3>0 then P3 is
1e790 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74   a register in t
1e7a0 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66  he root frame of
1e7b0 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20   this VDBE that 
1e7c0 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61  holds .** the la
1e7d0 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79  rgest previously
1e7e0 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
1e7f0 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77  d number. No new
1e800 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20   record numbers 
1e810 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74  are.** allowed t
1e820 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74  o be less than t
1e830 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20  his value. When 
1e840 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68  this value reach
1e850 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20  es its maximum, 
1e860 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55  .** an SQLITE_FU
1e870 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65  LL error is gene
1e880 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65  rated. The P3 re
1e890 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65  gister is update
1e8a0 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20  d with the '.** 
1e8b0 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
1e8c0 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33   number. This P3
1e8d0 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73   mechanism is us
1e8e0 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65  ed to help imple
1e8f0 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f  ment the.** AUTO
1e900 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72  INCREMENT featur
1e910 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  e..*/.case OP_Ne
1e920 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  wRowid: {       
1e930 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
1e940 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20  elease */.  i64 
1e950 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v;              
1e960 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f     /* The new ro
1e970 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  wid */.  VdbeCur
1e980 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20  sor *pC;        
1e990 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62  /* Cursor of tab
1e9a0 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65  le to get the ne
1e9b0 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74  w rowid */.  int
1e9c0 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
1e9d0 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
1e9e0 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65   an sqlite3Btree
1e9f0 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Last() */.  int 
1ea00 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  cnt;            
1ea10 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f     /* Counter to
1ea20 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65   limit the numbe
1ea30 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f  r of searches */
1ea40 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
1ea50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
1ea60 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61  ister holding la
1ea70 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20  rgest rowid for 
1ea80 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
1ea90 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
1eaa0 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f  rame;     /* Roo
1eab0 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20  t frame of VDBE 
1eac0 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72  */..  v = 0;.  r
1ead0 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  es = 0;.  assert
1eae0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1eaf0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1eb00 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1eb10 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1eb20 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1eb30 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70  );.  if( NEVER(p
1eb40 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20 29  C->pCursor==0) )
1eb50 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72  {.    /* The zer
1eb60 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  o initialization
1eb70 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68   above is all th
1eb80 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a  at is needed */.
1eb90 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
1eba0 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f  The next rowid o
1ebb0 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
1ebc0 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73  (different terms
1ebd0 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20   for the same.  
1ebe0 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f    ** thing) is o
1ebf0 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f  btained in a two
1ec00 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e  -step algorithm.
1ec10 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46  .    **.    ** F
1ec20 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20  irst we attempt 
1ec30 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67  to find the larg
1ec40 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
1ec50 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20  id and add one. 
1ec60 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20     ** to that.  
1ec70 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65  But if the large
1ec80 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
1ec90 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65  d is already the
1eca0 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20   maximum.    ** 
1ecb0 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72  positive integer
1ecc0 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c  , we have to fal
1ecd0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
1ece0 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70   second.    ** p
1ecf0 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67  robabilistic alg
1ed00 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20  orithm.    **.  
1ed10 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
1ed20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20  algorithm is to 
1ed30 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61  select a rowid a
1ed40 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65  t random and see
1ed50 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c   if.    ** it al
1ed60 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20  ready exists in 
1ed70 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69  the table.  If i
1ed80 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
1ed90 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a  , we have.    **
1eda0 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20   succeeded.  If 
1edb0 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  the random rowid
1edc0 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20   does exist, we 
1edd0 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65  select a new one
1ede0 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20  .    ** and try 
1edf0 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30  again, up to 100
1ee00 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20   times..    */. 
1ee10 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1ee20 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65  sTable );..#ifde
1ee30 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52  f SQLITE_32BIT_R
1ee40 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20  OWID.#   define 
1ee50 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66  MAX_ROWID 0x7fff
1ee60 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f  ffff.#else.    /
1ee70 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  * Some compilers
1ee80 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
1ee90 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65  constants of the
1eea0 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66   form 0x7fffffff
1eeb0 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a  ffffffff..    **
1eec0 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e   Others complain
1eed0 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66   about 0x7ffffff
1eee0 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54  ffffffffffLL.  T
1eef0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1ef00 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20  ro seems.    ** 
1ef10 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63  to provide the c
1ef20 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61  onstant while ma
1ef30 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  king all compile
1ef40 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f  rs happy..    */
1ef50 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
1ef60 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28  ROWID  (i64)( ((
1ef70 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (u64)0x7fffffff)
1ef80 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66  <<32) | (u64)0xf
1ef90 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66  fffffff ).#endif
1efa0 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75  ..    if( !pC->u
1efb0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1efc0 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74  .      v = sqlit
1efd0 65 33 42 74 72 65 65 47 65 74 43 61 63 68 65 64  e3BtreeGetCached
1efe0 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
1eff0 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 76 3d  r);.      if( v=
1f000 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
1f010 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
1f020 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ast(pC->pCursor,
1f030 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1f040 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1f050 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
1f060 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1f070 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1f080 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65  }.        if( re
1f090 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76  s ){.          v
1f0a0 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
1f0b0 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
1f0c0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1f0d0 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1f0e0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
1f0f0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e  rsorIsValid(pC->
1f100 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  pCursor) );.    
1f110 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1f120 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
1f130 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
1f140 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
1f150 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
1f160 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20   );   /* Cannot 
1f170 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42  fail following B
1f180 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
1f190 20 20 20 20 20 20 20 20 69 66 28 20 76 3d 3d 4d          if( v==M
1f1a0 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
1f1b0 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52          pC->useR
1f1c0 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a  andomRowid = 1;.
1f1d0 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
1f1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 2b 2b  .            v++
1f1f0 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39  ;   /* IMP: R-29
1f200 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20  538-34987 */.   
1f210 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1f220 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e   }.      }..#ifn
1f230 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1f240 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
1f250 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20      if( pOp->p3 
1f260 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  ){.        /* As
1f270 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
1f280 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
1f290 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
1f2a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1f2b0 30 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  0 );.        if(
1f2c0 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
1f2d0 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
1f2e0 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
1f2f0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
1f300 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
1f310 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
1f320 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
1f330 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
1f340 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
1f350 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1f360 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65   pOp->p3<=pFrame
1f370 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
1f380 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61      pMem = &pFra
1f390 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  me->aMem[pOp->p3
1f3a0 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ];.        }else
1f3b0 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  {.          /* A
1f3c0 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
1f3d0 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1f3e0 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
1f3f0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1f400 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
1f410 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20           pMem = 
1f420 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1f430 20 20 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f            memAbo
1f440 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d  utToChange(p, pM
1f450 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  em);.        }. 
1f460 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
1f470 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
1f480 29 3b 0a 0a 20 20 20 20 20 20 20 20 52 45 47 49  );..        REGI
1f490 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
1f4a0 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
1f4b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1f4c0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d  mIntegerify(pMem
1f4d0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1f4e0 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
1f4f0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
1f500 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
1f510 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
1f520 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65  .        if( pMe
1f530 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49  m->u.i==MAX_ROWI
1f540 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64  D || pC->useRand
1f550 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
1f560 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1f570 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
1f580 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a   R-12275-61338 *
1f590 2f 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  /.          goto
1f5a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1f5b0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1f5c0 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65         if( v<pMe
1f5d0 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
1f5e0 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
1f5f0 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20  u.i + 1;.       
1f600 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d   }.        pMem-
1f610 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20  >u.i = v;.      
1f620 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  }.#endif..      
1f630 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
1f640 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1f650 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f  Cursor, v<MAX_RO
1f660 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a  WID ? v+1 : 0);.
1f670 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43      }.    if( pC
1f680 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1f690 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50   ){.      /* IMP
1f6a0 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
1f6b0 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66  R-07677-41881 If
1f6c0 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57   the largest ROW
1f6d0 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74  ID is equal to t
1f6e0 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  he.      ** larg
1f6f0 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  est possible int
1f700 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36  eger (9223372036
1f710 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
1f720 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
1f730 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61     ** engine sta
1f740 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69  rts picking posi
1f750 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52  tive candidate R
1f760 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20  OWIDs at random 
1f770 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69  until.      ** i
1f780 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74  t finds one that
1f790 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
1f7a0 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20  ly used. */.    
1f7b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f7c0 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63  3==0 );  /* We c
1f7d0 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64  annot be in rand
1f7e0 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66  om rowid mode if
1f7f0 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20   this is.       
1f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f810 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f        ** an AUTO
1f820 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
1f830 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20   */.      /* on 
1f840 74 68 65 20 66 69 72 73 74 20 61 74 74 65 6d 70  the first attemp
1f850 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65  t, simply do one
1f860 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76 69   more than previ
1f870 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d  ous */.      v =
1f880 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20   lastRowid;.    
1f890 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49    v &= (MAX_ROWI
1f8a0 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65  D>>1); /* ensure
1f8b0 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61   doesn't go nega
1f8c0 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b  tive */.      v+
1f8d0 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e  +; /* ensure non
1f8e0 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63  -zero */.      c
1f8f0 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68  nt = 0;.      wh
1f900 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73 71  ile(   ((rc = sq
1f910 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1f920 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1f930 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
1f940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f970 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c    0, &res))==SQL
1f980 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20  ITE_OK).        
1f990 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a      && (res==0).
1f9a0 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
1f9b0 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20  ++cnt<100)){.   
1f9c0 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f       /* collisio
1f9d0 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72 20  n - try another 
1f9e0 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a  random rowid */.
1f9f0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1fa00 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
1fa10 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20  f(v), &v);.     
1fa20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a     if( cnt<5 ){.
1fa30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 79            /* try
1fa40 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20   "small" random 
1fa50 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20 69  rowids for the i
1fa60 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73 20  nitial attempts 
1fa70 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20 26  */.          v &
1fa80 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20  = 0xffffff;.    
1fa90 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1faa0 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52       v &= (MAX_R
1fab0 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73  OWID>>1); /* ens
1fac0 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e  ure doesn't go n
1fad0 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20  egative */.     
1fae0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b     }.        v++
1faf0 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d  ; /* ensure non-
1fb00 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a  zero */.      }.
1fb10 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
1fb20 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
1fb30 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
1fb40 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
1fb50 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39   /* IMP: R-38219
1fb60 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20  -53002 */.      
1fb70 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1fb80 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1fb90 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
1fba0 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20   v>0 );  /* EV: 
1fbb0 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f  R-40812-03570 */
1fbc0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72  .    }.    pC->r
1fbd0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1fbe0 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1fbf0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1fc00 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1fc10 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1fc20 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
1fc30 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
1fc40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
1fc50 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  rt P1 P2 P3 P4 P
1fc60 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e  5.**.** Write an
1fc70 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20   entry into the 
1fc80 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20  table of cursor 
1fc90 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79  P1.  A new entry
1fca0 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69   is.** created i
1fcb0 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72  f it doesn't alr
1fcc0 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68  eady exist or th
1fcd0 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78  e data for an ex
1fce0 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20  isting.** entry 
1fcf0 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20  is overwritten. 
1fd00 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65   The data is the
1fd10 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20   value MEM_Blob 
1fd20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1fd30 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e  er.** number P2.
1fd40 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72   The key is stor
1fd50 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
1fd60 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a  3. The key must.
1fd70 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e  ** be a MEM_Int.
1fd80 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
1fd90 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
1fda0 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  g of P5 is set, 
1fdb0 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
1fdc0 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
1fdd0 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
1fde0 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66  erwise not).  If
1fdf0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54   the OPFLAG_LAST
1fe00 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35  ROWID flag of P5
1fe10 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e   is set,.** then
1fe20 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64   rowid is stored
1fe30 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20   for subsequent 
1fe40 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a  return by the.**
1fe50 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
1fe60 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e  sert_rowid() fun
1fe70 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65  ction (otherwise
1fe80 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65   it is unmodifie
1fe90 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  d)..**.** If the
1fea0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
1feb0 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35  ESULT flag of P5
1fec0 20 69 73 20 73 65 74 20 61 6e 64 20 69 66 20 74   is set and if t
1fed0 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20  he result of.** 
1fee0 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f 70  the last seek op
1fef0 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45  eration (OP_NotE
1ff00 78 69 73 74 73 29 20 77 61 73 20 61 20 73 75 63  xists) was a suc
1ff10 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69 73 0a  cess, then this.
1ff20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c  ** operation wil
1ff30 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f  l not attempt to
1ff40 20 66 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70   find the approp
1ff50 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65  riate row before
1ff60 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e   doing.** the in
1ff70 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e  sert but will in
1ff80 73 74 65 61 64 20 6f 76 65 72 77 72 69 74 65 20  stead overwrite 
1ff90 74 68 65 20 72 6f 77 20 74 68 61 74 20 74 68 65  the row that the
1ffa0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75   cursor is.** cu
1ffb0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
1ffc0 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79   to.  Presumably
1ffd0 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e  , the prior OP_N
1ffe0 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65 0a  otExists opcode.
1fff0 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20 70  ** has already p
20000 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75  ositioned the cu
20010 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e 20  rsor correctly. 
20020 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69   This is an opti
20030 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74  mization.** that
20040 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d 61   boosts performa
20050 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67 20  nce by avoiding 
20060 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e  redundant seeks.
20070 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
20080 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c  FLAG_ISUPDATE fl
20090 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
200a0 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70  this opcode is p
200b0 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44  art of an.** UPD
200c0 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ATE operation.  
200d0 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68  Otherwise (if th
200e0 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29  e flag is clear)
200f0 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
20100 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20  e.** is part of 
20110 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74  an INSERT operat
20120 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72  ion.  The differ
20130 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70  ence is only imp
20140 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65  ortant to.** the
20150 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a   update hook..**
20160 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34  .** Parameter P4
20170 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20   may point to a 
20180 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
20190 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65  g the table-name
201a0 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e  , or.** may be N
201b0 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f  ULL. If it is no
201c0 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65  t NULL, then the
201d0 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a   update-hook .**
201e0 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74   (sqlite3.xUpdat
201f0 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e  eCallback) is in
20200 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  voked following 
20210 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73  a successful ins
20220 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e  ert..**.** (WARN
20230 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20  ING/TODO: If P1 
20240 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73  is a pseudo-curs
20250 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e  or and P2 is dyn
20260 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f  amically.** allo
20270 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65  cated, then owne
20280 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74  rship of P2 is t
20290 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68  ransferred to th
202a0 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a  e pseudo-cursor.
202b0 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20  ** and register 
202c0 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d  P2 becomes ephem
202d0 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75  eral.  If the cu
202e0 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c  rsor is changed,
202f0 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
20300 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c   register P2 wil
20310 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20  l then change.  
20320 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64  Make sure this d
20330 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65  oes not.** cause
20340 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a   any problems.).
20350 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
20360 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
20370 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68  s on tables.  Th
20380 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
20390 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
203a0 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64  indices is OP_Id
203b0 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f  xInsert..*/./* O
203c0 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74  pcode: InsertInt
203d0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
203e0 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
203f0 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50   exactly like OP
20400 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20 74  _Insert except t
20410 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20 74  hat the key is t
20420 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61  he.** integer va
20430 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20  lue P3, not the 
20440 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74  value of the int
20450 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72  eger stored in r
20460 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63  egister P3..*/.c
20470 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a  ase OP_Insert: .
20480 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e  case OP_InsertIn
20490 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74  t: {.  Mem *pDat
204a0 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  a;       /* MEM 
204b0 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74  cell holding dat
204c0 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  a for the record
204d0 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
204e0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20  */.  Mem *pKey; 
204f0 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
20500 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20  ll holding key  
20510 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
20520 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  /.  i64 iKey;   
20530 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74        /* The int
20540 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65  eger ROWID or ke
20550 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  y for the record
20560 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
20570 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
20580 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72  *pC;   /* Cursor
20590 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77   to table into w
205a0 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77  hich insert is w
205b0 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  ritten */.  int 
205c0 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a  nZero;        /*
205d0 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d   Number of zero-
205e0 62 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64 20  bytes to append 
205f0 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73  */.  int seekRes
20600 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74  ult;   /* Result
20610 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f   of prior seek o
20620 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45  r 0 if no USESEE
20630 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a  KRESULT flag */.
20640 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
20650 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20  b;  /* database 
20660 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74  name - used by t
20670 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he update hook *
20680 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
20690 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e  zTbl; /* Table n
206a0 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68  ame - used by th
206b0 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e opdate hook */
206c0 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20  .  int op;      
206d0 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66       /* Opcode f
206e0 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20  or update hook: 
206f0 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72  SQLITE_UPDATE or
20700 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a   SQLITE_INSERT *
20710 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d  /..  pData = &aM
20720 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
20730 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
20740 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
20750 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
20760 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
20770 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d  pData) );.  pC =
20780 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
20790 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
207a0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
207b0 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
207c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
207d0 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
207e0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
207f0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
20800 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
20810 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b  pOp->p2, pData);
20820 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ..  if( pOp->opc
20830 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29  ode==OP_Insert )
20840 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d  {.    pKey = &aM
20850 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
20860 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66   assert( pKey->f
20870 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
20880 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
20890 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29  mIsValid(pKey) )
208a0 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
208b0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b  RACE(pOp->p3, pK
208c0 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  ey);.    iKey = 
208d0 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c  pKey->u.i;.  }el
208e0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
208f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
20900 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20  InsertInt );.   
20910 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b   iKey = pOp->p3;
20920 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d  .  }..  if( pOp-
20930 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p5 & OPFLAG_NCH
20940 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
20950 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  e++;.  if( pOp->
20960 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54  p5 & OPFLAG_LAST
20970 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74  ROWID ) db->last
20980 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
20990 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28 20  d = iKey;.  if( 
209a0 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
209b0 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
209c0 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20  Data->z = 0;.   
209d0 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20   pData->n = 0;. 
209e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
209f0 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  rt( pData->flags
20a00 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
20a10 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73  _Str) );.  }.  s
20a20 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f  eekResult = ((pO
20a30 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
20a40 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
20a50 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
20a60 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61   0);.  if( pData
20a70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
20a80 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20  ro ){.    nZero 
20a90 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
20aa0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  ;.  }else{.    n
20ab0 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Zero = 0;.  }.  
20ac0 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
20ad0 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
20ae0 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63  Cursor, 0);.  rc
20af0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
20b00 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f  nsert(pC->pCurso
20b10 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20  r, 0, iKey,.    
20b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b30 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20        pData->z, 
20b40 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c  pData->n, nZero,
20b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20b60 20 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e             pOp->
20b70 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45  p5 & OPFLAG_APPE
20b80 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20  ND, seekResult. 
20b90 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   );.  pC->rowidI
20ba0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
20bb0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
20bc0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
20bd0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
20be0 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
20bf0 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
20c00 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
20c10 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
20c20 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
20c30 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
20c40 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
20c50 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
20c60 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b  [pC->iDb].zName;
20c70 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d  .    zTbl = pOp-
20c80 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20  >p4.z;.    op = 
20c90 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
20ca0 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
20cb0 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
20cc0 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20  QLITE_INSERT);. 
20cd0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
20ce0 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62  sTable );.    db
20cf0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
20d00 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
20d10 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  , op, zDb, zTbl,
20d20 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
20d30 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
20d40 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
20d50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c  ../* Opcode: Del
20d60 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ete P1 P2 * P4 *
20d70 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
20d80 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
20d90 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
20da0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
20db0 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  nting..**.** The
20dc0 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
20dd0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
20de0 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74   either the next
20df0 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73   or the previous
20e00 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68  .** record in th
20e10 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69  e table. If it i
20e20 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
20e30 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f  at the next reco
20e40 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  rd, then.** the 
20e50 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75  next Next instru
20e60 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20  ction will be a 
20e70 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74  no-op.  Hence it
20e80 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65   is OK to delete
20e90 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f  .** a record fro
20ea0 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74  m within an Next
20eb0 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   loop..**.** If 
20ec0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
20ed0 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73  GE flag of P2 is
20ee0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
20ef0 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
20f00 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
20f10 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
20f20 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74  )..**.** P1 must
20f30 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74   not be pseudo-t
20f40 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f  able.  It has to
20f50 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65   be a real table
20f60 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c   with.** multipl
20f70 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  e rows..**.** If
20f80 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
20f90 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20   then it is the 
20fa0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
20fb0 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20  e that P1 is.** 
20fc0 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68  pointing to.  Th
20fd0 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69  e update hook wi
20fe0 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69  ll be invoked, i
20ff0 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20  f it exists..** 
21000 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
21010 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75  L then the P1 cu
21020 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
21030 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a  een positioned.*
21040 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  * using OP_NotFo
21050 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
21060 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
21070 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
21080 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b  lete: {.  i64 iK
21090 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ey;.  VdbeCursor
210a0 20 2a 70 43 3b 0a 0a 20 20 69 4b 65 79 20 3d 20   *pC;..  iKey = 
210b0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
210c0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
210d0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
210e0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
210f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
21100 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
21110 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
21120 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e  sor!=0 );  /* On
21130 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61  ly valid for rea
21140 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65  l tables, no pse
21150 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a 20 20  udotables */..  
21160 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74 65  /* If the update
21170 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e  -hook will be in
21180 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65 79 20  voked, set iKey 
21190 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  to the rowid of 
211a0 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62 65 69  the.  ** row bei
211b0 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20 2a 2f  ng deleted..  */
211c0 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61  .  if( db->xUpda
211d0 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
211e0 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61  p->p4.z ){.    a
211f0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
21200 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  le );.    assert
21210 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
21220 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74 52 6f  id );  /* lastRo
21230 77 69 64 20 73 65 74 20 62 79 20 70 72 65 76 69  wid set by previ
21240 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ous OP_NotFound 
21250 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 43  */.    iKey = pC
21260 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d  ->lastRowid;.  }
21270 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65  ..  /* The OP_De
21280 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77 61  lete opcode alwa
21290 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50  ys follows an OP
212a0 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f 50  _NotExists or OP
212b0 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50  _Last or.  ** OP
212c0 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73  _Column on the s
212d0 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f 75  ame table withou
212e0 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e  t any intervenin
212f0 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68 61  g operations tha
21300 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76  t.  ** might mov
21310 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20  e or invalidate 
21320 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
21330 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73 20  ce cursor pC is 
21340 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a  always pointing.
21350 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20    ** to the row 
21360 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e  to be deleted an
21370 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64 62  d the sqlite3Vdb
21380 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
21390 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62  operation.  ** b
213a0 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20 61  elow is always a
213b0 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f   no-op and canno
213c0 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c  t fail.  We will
213d0 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20   run it anyhow, 
213e0 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20  though,.  ** to 
213f0 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66 75  guard against fu
21400 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f 20  ture changes to 
21410 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
21420 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65  or..  **/.  asse
21430 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
21440 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
21450 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
21460 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
21470 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
21480 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
21490 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
214a0 65 72 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74 65  error;..  sqlite
214b0 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52  3BtreeSetCachedR
214c0 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
214d0 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  , 0);.  rc = sql
214e0 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
214f0 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
21500 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
21510 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
21520 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
21530 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
21540 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
21550 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21560 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
21570 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
21580 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  4.z ){.    const
21590 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d   char *zDb = db-
215a0 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
215b0 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  ame;.    const c
215c0 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d  har *zTbl = pOp-
215d0 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e 78  >p4.z;.    db->x
215e0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
215f0 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53  b->pUpdateArg, S
21600 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44  QLITE_DELETE, zD
21610 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
21620 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
21630 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
21640 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
21650 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
21660 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62  ->nChange++;.  b
21670 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
21680 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
21690 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
216a0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
216b0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
216c0 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
216d0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
216e0 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
216f0 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
21700 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
21710 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
21720 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
21730 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
21740 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
21750 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
21760 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
21770 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
21780 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
21790 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
217a0 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
217b0 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
217c0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
217d0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
217e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
217f0 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50  rCompare P1 P2 P
21800 33 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  3.**.** P1 is a 
21810 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54  sorter cursor. T
21820 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
21830 63 6f 6d 70 61 72 65 73 20 74 68 65 20 72 65 63  compares the rec
21840 6f 72 64 20 62 6c 6f 62 20 69 6e 20 0a 2a 2a 20  ord blob in .** 
21850 72 65 67 69 73 74 65 72 20 50 33 20 77 69 74 68  register P3 with
21860 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
21870 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f  the sorter curso
21880 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  r currently poin
21890 74 73 20 74 6f 2e 0a 2a 2a 20 49 66 2c 20 65 78  ts to..** If, ex
218a0 63 6c 75 64 69 6e 67 20 74 68 65 20 72 6f 77 69  cluding the rowi
218b0 64 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  d fields at the 
218c0 65 6e 64 2c 20 74 68 65 20 74 77 6f 20 72 65 63  end, the two rec
218d0 6f 72 64 73 20 61 72 65 20 61 20 6d 61 74 63 68  ords are a match
218e0 2c 0a 2a 2a 20 66 61 6c 6c 20 74 68 72 6f 75 67  ,.** fall throug
218f0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
21900 73 74 72 75 63 74 69 6f 6e 2e 20 4f 74 68 65 72  struction. Other
21910 77 69 73 65 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  wise, jump to in
21920 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
21930 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43  .case OP_SorterC
21940 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65  ompare: {.  Vdbe
21950 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
21960 74 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70  t res;..  pC = p
21970 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
21980 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
21990 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 70 49  rter(pC) );.  pI
219a0 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
219b0 70 33 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  p3];.  rc = sqli
219c0 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d  te3VdbeSorterCom
219d0 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 26  pare(pC, pIn3, &
219e0 72 65 73 29 3b 0a 20 20 69 66 28 20 72 65 73 20  res);.  if( res 
219f0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
21a00 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
21a10 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.};../* Opcod
21a20 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31  e: SorterData P1
21a30 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
21a40 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
21a50 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65  ter P2 the curre
21a60 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66  nt sorter data f
21a70 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72  or sorter cursor
21a80 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
21a90 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20  SorterData: {.  
21aa0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
21ab0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21ac0 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 20  MIT_MERGE_SORT. 
21ad0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
21ae0 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70  p->p2];.  pC = p
21af0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
21b00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21b10 69 73 53 6f 72 74 65 72 20 29 3b 0a 20 20 72 63  isSorter );.  rc
21b20 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
21b30 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70  rterRowkey(pC, p
21b40 4f 75 74 29 3b 0a 23 65 6c 73 65 0a 20 20 70 4f  Out);.#else.  pO
21b50 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 52  p->opcode = OP_R
21b60 6f 77 4b 65 79 3b 0a 20 20 70 63 2d 2d 3b 0a 23  owKey;.  pc--;.#
21b70 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d  endif.  break;.}
21b80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
21b90 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a  Data P1 P2 * * *
21ba0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
21bb0 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
21bc0 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64  e complete row d
21bd0 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ata for cursor P
21be0 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e  1..** There is n
21bf0 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  o interpretation
21c00 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a   of the data.  .
21c10 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f  ** It is just co
21c20 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32  pied onto the P2
21c30 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c   register exactl
21c40 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66  y as .** it is f
21c50 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61  ound in the data
21c60 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
21c70 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f   If the P1 curso
21c80 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69  r must be pointi
21c90 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ng to a valid ro
21ca0 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f  w (not a NULL ro
21cb0 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20  w).** of a real 
21cc0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
21cd0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a  udo-table..*/./*
21ce0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20   Opcode: RowKey 
21cf0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
21d00 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
21d10 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
21d20 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f  plete row key fo
21d30 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
21d40 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
21d50 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
21d60 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65  e data.  .** The
21d70 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f   key is copied o
21d80 6e 74 6f 20 74 68 65 20 50 33 20 72 65 67 69 73  nto the P3 regis
21d90 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
21da0 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
21db0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
21dc0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ile..**.** If th
21dd0 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
21de0 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   be pointing to 
21df0 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74  a valid row (not
21e00 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20   a NULL row).** 
21e10 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  of a real table,
21e20 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
21e30 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
21e40 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f  RowKey:.case OP_
21e50 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  RowData: {.  Vdb
21e60 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
21e70 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
21e80 20 20 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e    u32 n;.  i64 n
21e90 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61  64;..  pOut = &a
21ea0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
21eb0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
21ec0 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
21ed0 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65   Note that RowKe
21ee0 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72  y and RowData ar
21ef0 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79  e really exactly
21f00 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75   the same instru
21f10 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72  ction */.  asser
21f20 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
21f30 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
21f40 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
21f50 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
21f60 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
21f70 73 53 6f 72 74 65 72 3d 3d 30 20 29 3b 0a 20 20  sSorter==0 );.  
21f80 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
21f90 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ble || pOp->opco
21fa0 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de!=OP_RowData )
21fb0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21fc0 69 73 49 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e  isIndex || pOp->
21fd0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61  opcode==OP_RowDa
21fe0 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
21ff0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
22000 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d  t( pC->nullRow==
22010 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
22020 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
22030 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
22040 28 20 21 70 43 2d 3e 69 73 53 6f 72 74 65 72 20  ( !pC->isSorter 
22050 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
22060 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
22070 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
22080 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
22090 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
220a0 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
220b0 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50   );..  /* The OP
220c0 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52  _RowKey and OP_R
220d0 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61  owData opcodes a
220e0 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f  lways follow OP_
220f0 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a  NotExists or.  *
22100 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e  * OP_Rewind/Op_N
22110 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65  ext with no inte
22120 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74  rvening instruct
22130 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
22140 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20  invalidate.  ** 
22150 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
22160 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ce the following
22170 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
22180 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20  orMoveto() call 
22190 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61  is always.  ** a
221a0 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e   no-op and can n
221b0 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74 20  ever fail.  But 
221c0 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20 70  we leave it in p
221d0 6c 61 63 65 20 61 73 20 61 20 73 61 66 65 74 79  lace as a safety
221e0 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
221f0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
22200 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  eto==0 );.  rc =
22210 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
22220 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
22230 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
22240 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
22250 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
22260 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69  or;..  if( pC->i
22270 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 61 73  sIndex ){.    as
22280 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61 62  sert( !pC->isTab
22290 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e  le );.    VVA_ON
222a0 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
222b0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
222c0 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61  sr, &n64);.    a
222d0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
222e0 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72  E_OK );    /* Tr
222f0 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  ue because of Cu
22300 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
22310 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69  l above */.    i
22320 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69  f( n64>db->aLimi
22330 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
22340 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
22350 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
22360 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32    }.    n = (u32
22370 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  )n64;.  }else{. 
22380 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d     VVA_ONLY(rc =
22390 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  ) sqlite3BtreeDa
223a0 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e  taSize(pCrsr, &n
223b0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
223c0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
223d0 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29     /* DataSize()
223e0 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a   cannot fail */.
223f0 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64      if( n>(u32)d
22400 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
22410 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
22420 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
22430 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _big;.    }.  }.
22440 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
22450 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e  eMemGrow(pOut, n
22460 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  , 0) ){.    goto
22470 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70   no_mem;.  }.  p
22480 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65  Out->n = n;.  Me
22490 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
224a0 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20  t, MEM_Blob);.  
224b0 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  if( pC->isIndex 
224c0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
224d0 74 65 33 42 74 72 65 65 4b 65 79 28 70 43 72 73  te3BtreeKey(pCrs
224e0 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
224f0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
22500 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
22510 65 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20  eData(pCrsr, 0, 
22520 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d  n, pOut->z);.  }
22530 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
22540 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20  QLITE_UTF8;  /* 
22550 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62  In case the blob
22560 20 69 73 20 65 76 65 72 20 63 61 73 74 20 74 6f   is ever cast to
22570 20 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54   text */.  UPDAT
22580 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
22590 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
225a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
225b0 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
225c0 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65  *.** Store in re
225d0 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74  gister P2 an int
225e0 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
225f0 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62  e key of the tab
22600 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a  le entry that.**
22610 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
22620 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a   point to..**.**
22630 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65   P1 can be eithe
22640 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61  r an ordinary ta
22650 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c  ble or a virtual
22660 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75   table.  There u
22670 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73  sed to.** be a s
22680 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69  eparate OP_VRowi
22690 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65  d opcode for use
226a0 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61   with virtual ta
226b0 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a  bles, but this.*
226c0 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77  * one opcode now
226d0 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20   works for both 
226e0 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a  table types..*/.
226f0 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b  case OP_Rowid: {
22700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22710 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
22720 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ase */.  VdbeCur
22730 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76  sor *pC;.  i64 v
22740 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
22750 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
22760 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
22770 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73  *pModule;..  ass
22780 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
22790 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
227a0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
227b0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
227c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
227d0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
227e0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
227f0 65 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  eg==0 );.  if( p
22800 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
22810 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
22820 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72  MEM_Null;.    br
22830 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eak;.  }else if(
22840 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
22850 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70  eto ){.    v = p
22860 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  C->movetoTarget;
22870 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
22880 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
22890 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  E.  }else if( pC
228a0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b  ->pVtabCursor ){
228b0 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d  .    pVtab = pC-
228c0 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
228d0 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65  tab;.    pModule
228e0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
228f0 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e;.    assert( p
22900 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29  Module->xRowid )
22910 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
22920 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70  le->xRowid(pC->p
22930 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29 3b  VtabCursor, &v);
22940 0a 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45  .    importVtabE
22950 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrMsg(p, pVtab);
22960 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
22970 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
22980 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a  BLE */.  }else{.
22990 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
229a0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
229b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
229c0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
229d0 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  C);.    if( rc )
229e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
229f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
22a00 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
22a10 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  id ){.      v = 
22a20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  pC->lastRowid;. 
22a30 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
22a40 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
22a50 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
22a60 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20  rsor, &v);.     
22a70 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
22a80 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c  ITE_OK );  /* Al
22a90 77 61 79 73 20 73 6f 20 62 65 63 61 75 73 65 20  ways so because 
22aa0 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
22ab0 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 7d  ) above */.    }
22ac0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
22ad0 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
22ae0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
22af0 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lRow P1 * * * *.
22b00 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63  **.** Move the c
22b10 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75  ursor P1 to a nu
22b20 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f  ll row.  Any OP_
22b30 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e  Column operation
22b40 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20  s.** that occur 
22b50 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72  while the cursor
22b60 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20   is on the null 
22b70 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a  row will always.
22b80 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e  ** write a NULL.
22b90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
22ba0 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  Row: {.  VdbeCur
22bb0 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
22bc0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22bd0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22be0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
22bf0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22c00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
22c10 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  0 );.  pC->nullR
22c20 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f  ow = 1;.  pC->ro
22c30 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
22c40 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
22c50 75 72 73 6f 72 20 7c 7c 20 70 43 2d 3e 70 56 74  ursor || pC->pVt
22c60 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  abCursor );.  if
22c70 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b  ( pC->pCursor ){
22c80 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
22c90 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d  eClearCursor(pC-
22ca0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  >pCursor);.  }. 
22cb0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
22cc0 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
22cd0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
22ce0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
22cf0 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
22d00 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
22d10 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
22d20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
22d30 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
22d40 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
22d50 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
22d60 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
22d70 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
22d80 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
22d90 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
22da0 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
22db0 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
22dc0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
22dd0 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
22de0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
22df0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
22e00 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
22e10 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20   OP_Last: {     
22e20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
22e30 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22e40 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
22e50 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
22e60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22e70 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22e80 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
22e90 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
22ea0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
22eb0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
22ec0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
22ed0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 66  .  res = 0;.  if
22ee0 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d  ( ALWAYS(pCrsr!=
22ef0 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  0) ){.    rc = s
22f00 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
22f10 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
22f20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
22f30 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
22f40 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
22f50 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 0;.  pC->rowid
22f60 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
22f70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
22f80 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
22f90 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  if( pOp->p2>0 &&
22fa0 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
22fb0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
22fc0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
22fd0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
22fe0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
22ff0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
23000 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
23010 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
23020 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
23030 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
23040 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
23050 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
23060 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
23070 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
23080 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
23090 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
230a0 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
230b0 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
230c0 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
230d0 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
230e0 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
230f0 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
23100 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
23110 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
23120 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
23130 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
23140 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
23150 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
23160 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
23170 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
23180 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
23190 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
231a0 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
231b0 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
231c0 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
231d0 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
231e0 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
231f0 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20  P_SorterSort:   
23200 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
23210 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d  ef SQLITE_OMIT_M
23220 45 52 47 45 5f 53 4f 52 54 0a 20 20 70 4f 70 2d  ERGE_SORT.  pOp-
23230 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 6f 72  >opcode = OP_Sor
23240 74 3b 0a 23 65 6e 64 69 66 0a 63 61 73 65 20 4f  t;.#endif.case O
23250 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
23260 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
23270 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
23280 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
23290 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
232a0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
232b0 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
232c0 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
232d0 54 53 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b  TSTATUS_SORT-1]+
232e0 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
232f0 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
23300 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
23310 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
23320 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
23330 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
23340 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
23350 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
23360 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
23370 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
23380 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
23390 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
233a0 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
233b0 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
233c0 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
233d0 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a  and P2>0, then j
233e0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
233f0 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20  to P2..** If P2 
23400 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74  is 0 or if the t
23410 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
23420 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
23430 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
23440 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
23450 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
23460 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20  e OP_Rewind: {  
23470 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
23480 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
23490 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
234a0 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
234b0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
234c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
234d0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
234e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
234f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
23500 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
23510 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72  ssert( pC->isSor
23520 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  ter==(pOp->opcod
23530 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  e==OP_SorterSort
23540 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a  ) );.  res = 1;.
23550 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
23560 43 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  C) ){.    rc = s
23570 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
23580 52 65 77 69 6e 64 28 64 62 2c 20 70 43 2c 20 26  Rewind(db, pC, &
23590 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  res);.  }else{. 
235a0 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70     pCrsr = pC->p
235b0 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65  Cursor;.    asse
235c0 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
235d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
235e0 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
235f0 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74  res);.    pC->at
23600 46 69 72 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f  First = res==0 ?
23610 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  1:0;.    pC->def
23620 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
23630 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
23640 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
23650 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  LE;.    pC->rowi
23660 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
23670 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
23680 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
23690 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
236a0 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
236b0 20 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b   );.  if( res ){
236c0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
236d0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
236e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
236f0 3a 20 4e 65 78 74 20 50 31 20 50 32 20 2a 20 50  : Next P1 P2 * P
23700 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e  4 P5.**.** Advan
23710 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  ce cursor P1 so 
23720 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
23730 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64  o the next key/d
23740 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
23750 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
23760 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
23770 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c   no more key/val
23780 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
23790 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
237a0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
237b0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
237c0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61   if the cursor a
237d0 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65  dvance was succe
237e0 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
237f0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
23800 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
23810 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
23820 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
23830 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
23840 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  le..**.** P4 is 
23850 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
23860 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
23870 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
23880 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
23890 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e  ite3BtreeNext().
238a0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
238b0 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65  positive and the
238c0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
238d0 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74  then event count
238e0 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d  er.** number P5-
238f0 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  1 in the prepare
23900 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69  d statement is i
23910 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a  ncremented..**.*
23920 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76  * See also: Prev
23930 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
23940 72 65 76 20 50 31 20 50 32 20 2a 20 2a 20 50 35  rev P1 P2 * * P5
23950 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63  .**.** Back up c
23960 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
23970 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
23980 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64  e previous key/d
23990 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
239a0 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
239b0 78 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  x.  If there is 
239c0 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f  no previous key/
239d0 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
239e0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
239f0 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
23a00 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
23a10 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
23a20 72 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63  r backup was suc
23a30 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
23a40 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
23a50 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  P2..**.** The P1
23a60 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
23a70 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
23a80 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
23a90 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  able..**.** P4 i
23aa0 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
23ab0 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
23ac0 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
23ad0 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
23ae0 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
23af0 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ous()..**.** If 
23b00 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
23b10 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
23b20 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
23b30 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
23b40 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
23b50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
23b60 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
23b70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
23b80 74 65 72 4e 65 78 74 3a 20 20 20 20 2f 2a 20 6a  terNext:    /* j
23b90 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
23ba0 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f  LITE_OMIT_MERGE_
23bb0 53 4f 52 54 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  SORT.  pOp->opco
23bc0 64 65 20 3d 20 4f 50 5f 4e 65 78 74 3b 0a 23 65  de = OP_Next;.#e
23bd0 6e 64 69 66 0a 63 61 73 65 20 4f 50 5f 50 72 65  ndif.case OP_Pre
23be0 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  v:          /* j
23bf0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
23c00 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ext: {        /*
23c10 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
23c20 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
23c30 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46   res;..  CHECK_F
23c40 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
23c50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23c60 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23c70 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
23c80 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 41  sert( pOp->p5<=A
23c90 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75  rraySize(p->aCou
23ca0 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20  nter) );.  pC = 
23cb0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
23cc0 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30 20 29  ];.  if( pC==0 )
23cd0 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20 20 2f 2a  {.    break;  /*
23ce0 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 32 37   See ticket #227
23cf0 33 20 2a 2f 0a 20 20 7d 0a 20 20 61 73 73 65 72  3 */.  }.  asser
23d00 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d  t( pC->isSorter=
23d10 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  =(pOp->opcode==O
23d20 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 29 3b  P_SorterNext) );
23d30 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28  .  if( isSorter(
23d40 70 43 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  pC) ){.    asser
23d50 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
23d60 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 20 29 3b  OP_SorterNext );
23d70 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
23d80 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28  3VdbeSorterNext(
23d90 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20  db, pC, &res);. 
23da0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 73 20   }else{.    res 
23db0 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  = 1;.    assert(
23dc0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
23dd0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73  eto==0 );.    as
23de0 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
23df0 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  r );.    assert(
23e00 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
23e10 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Next || pOp->p4
23e20 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
23e30 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
23e40 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
23e50 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
23e60 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
23e70 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
23e80 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 20  ePrevious );.   
23e90 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41   rc = pOp->p4.xA
23ea0 64 76 61 6e 63 65 28 70 43 2d 3e 70 43 75 72 73  dvance(pC->pCurs
23eb0 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20  or, &res);.  }. 
23ec0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
23ed0 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61  u8)res;.  pC->ca
23ee0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
23ef0 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72  E_STALE;.  if( r
23f00 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  es==0 ){.    pc 
23f10 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
23f20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
23f30 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
23f40 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65  ->p5-1]++;.#ifde
23f50 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
23f60 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
23f70 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
23f80 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64  .  }.  pC->rowid
23f90 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62  IsValid = 0;.  b
23fa0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23fb0 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31  de: IdxInsert P1
23fc0 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
23fd0 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f  * Register P2 ho
23fe0 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78  lds an SQL index
23ff0 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20   key made using 
24000 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72  the.** MakeRecor
24010 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20  d instructions. 
24020 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69   This opcode wri
24030 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20  tes that key.** 
24040 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50  into the index P
24050 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65  1.  Data for the
24060 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a   entry is nil..*
24070 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61  *.** P3 is a fla
24080 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20  g that provides 
24090 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d  a hint to the b-
240a0 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74 20  tree layer that 
240b0 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69  this.** insert i
240c0 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
240d0 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20  n append..**.** 
240e0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
240f0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
24100 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71  indices.  The eq
24110 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
24120 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c  tion.** for tabl
24130 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e  es is OP_Insert.
24140 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
24150 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20  erInsert:       
24160 2f 2a 20 69 6e 32 20 2a 2f 0a 23 69 66 64 65 66  /* in2 */.#ifdef
24170 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52   SQLITE_OMIT_MER
24180 47 45 5f 53 4f 52 54 0a 20 20 70 4f 70 2d 3e 6f  GE_SORT.  pOp->o
24190 70 63 6f 64 65 20 3d 20 4f 50 5f 49 64 78 49 6e  pcode = OP_IdxIn
241a0 73 65 72 74 3b 0a 23 65 6e 64 69 66 0a 63 61 73  sert;.#endif.cas
241b0 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20  e OP_IdxInsert: 
241c0 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  {        /* in2 
241d0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
241e0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
241f0 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b  *pCrsr;.  int nK
24200 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ey;.  const char
24210 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72   *zKey;..  asser
24220 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
24230 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
24240 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
24250 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
24260 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
24270 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
24280 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70 4f 70  ->isSorter==(pOp
24290 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
242a0 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20  terInsert) );.  
242b0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
242c0 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
242d0 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
242e0 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72  EM_Blob );.  pCr
242f0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
24300 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
24310 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  Crsr!=0) ){.    
24320 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
24330 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63  ble==0 );.    rc
24340 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
24350 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  n2);.    if( rc=
24360 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
24370 20 20 20 20 69 66 28 20 69 73 53 6f 72 74 65 72      if( isSorter
24380 28 70 43 29 20 29 7b 0a 20 20 20 20 20 20 20 20  (pC) ){.        
24390 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
243a0 53 6f 72 74 65 72 57 72 69 74 65 28 64 62 2c 20  SorterWrite(db, 
243b0 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 20  pC, pIn2);.     
243c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
243d0 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
243e0 20 20 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70          zKey = p
243f0 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 20 20  In2->z;.        
24400 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
24410 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a  eInsert(pCrsr, z
24420 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30  Key, nKey, "", 0
24430 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20  , 0, pOp->p3, . 
24440 20 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70             ((pOp
24450 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
24460 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
24470 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
24480 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  0).            )
24490 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
244a0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
244b0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20  veto==0 );.     
244c0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
244d0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
244e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
244f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
24500 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65  /* Opcode: IdxDe
24510 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20  lete P1 P2 P3 * 
24520 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74  *.**.** The cont
24530 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73 74  ent of P3 regist
24540 65 72 73 20 73 74 61 72 74 69 6e 67 20 61 74 20  ers starting at 
24550 72 65 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d  register P2 form
24560 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  .** an unpacked 
24570 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20  index key. This 
24580 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74  opcode removes t
24590 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74  hat entry from t
245a0 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65  he .** index ope
245b0 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31  ned by cursor P1
245c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
245d0 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65  Delete: {.  Vdbe
245e0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
245f0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
24600 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
24610 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20  ckedRecord r;.. 
24620 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
24630 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
24640 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
24650 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d  ->p2+pOp->p3<=p-
24660 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 61 73 73  >nMem+1 );.  ass
24670 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
24680 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
24690 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
246a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
246b0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
246c0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
246d0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
246e0 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21  f( ALWAYS(pCrsr!
246f0 3d 30 29 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65  =0) ){.    r.pKe
24700 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
24710 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
24720 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
24730 33 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  3;.    r.flags =
24740 20 30 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d   0;.    r.aMem =
24750 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
24760 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
24770 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69  EBUG.    { int i
24780 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
24790 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
247a0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
247b0 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
247c0 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20  #endif.    rc = 
247d0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
247e0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
247f0 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
24800 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
24810 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
24820 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
24830 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
24840 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20 20 20  ete(pCrsr);.    
24850 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  }.    assert( pC
24860 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
24870 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63  ==0 );.    pC->c
24880 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
24890 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
248a0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
248b0 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31  ode: IdxRowid P1
248c0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
248d0 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
248e0 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
248f0 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c  r which is the l
24900 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
24910 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68   record at.** th
24920 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64  e end of the ind
24930 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74  ex key pointed t
24940 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20  o by cursor P1. 
24950 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68   This integer sh
24960 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72  ould be.** the r
24970 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
24980 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68  e entry to which
24990 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72   this index entr
249a0 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  y points..**.** 
249b0 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c  See also: Rowid,
249c0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a   MakeRecord..*/.
249d0 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64  case OP_IdxRowid
249e0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
249f0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
24a00 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  ase */.  BtCurso
24a10 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62 65  r *pCrsr;.  Vdbe
24a20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36  Cursor *pC;.  i6
24a30 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65  4 rowid;..  asse
24a40 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
24a50 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
24a60 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
24a70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24a80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
24a90 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
24aa0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 70 4f  C->pCursor;.  pO
24ab0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
24ac0 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 41 4c 57 41  Null;.  if( ALWA
24ad0 59 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a  YS(pCrsr!=0) ){.
24ae0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
24af0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
24b00 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 4e 45  (pC);.    if( NE
24b10 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61  VER(rc) ) goto a
24b20 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
24b30 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  r;.    assert( p
24b40 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
24b50 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  o==0 );.    asse
24b60 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
24b70 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 70  =0 );.    if( !p
24b80 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
24b90 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
24ba0 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c  VdbeIdxRowid(db,
24bb0 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b   pCrsr, &rowid);
24bc0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
24bd0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
24be0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
24bf0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
24c00 20 20 20 7d 0a 20 20 20 20 20 20 70 4f 75 74 2d     }.      pOut-
24c10 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20  >u.i = rowid;.  
24c20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
24c30 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d  = MEM_Int;.    }
24c40 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
24c50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47  ./* Opcode: IdxG
24c60 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
24c70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
24c80 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
24c90 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
24ca0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
24cb0 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
24cc0 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f  hat omits the RO
24cd0 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  WID.  Compare th
24ce0 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
24cf0 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a  inst the index .
24d00 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ** that P1 is cu
24d10 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
24d20 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
24d30 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50  e ROWID on the P
24d40 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49  1 index..**.** I
24d50 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
24d60 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20  ntry is greater 
24d70 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
24d80 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a   the key value.*
24d90 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  * then jump to P
24da0 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61  2.  Otherwise fa
24db0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
24dc0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
24dd0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  on..**.** If P5 
24de0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e  is non-zero then
24df0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69   the key value i
24e00 73 20 69 6e 63 72 65 61 73 65 64 20 62 79 20 61  s increased by a
24e10 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72  n epsilon .** pr
24e20 69 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d 70 61  ior to the compa
24e30 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b  rison.  This mak
24e40 65 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72  e the opcode wor
24e50 6b 20 6c 69 6b 65 20 49 64 78 47 54 20 65 78 63  k like IdxGT exc
24e60 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 66 20 74  ept.** that if t
24e70 68 65 20 6b 65 79 20 66 72 6f 6d 20 72 65 67 69  he key from regi
24e80 73 74 65 72 20 50 33 20 69 73 20 61 20 70 72 65  ster P3 is a pre
24e90 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 20 69  fix of the key i
24ea0 6e 20 74 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a  n the cursor,.**
24eb0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66   the result is f
24ec0 61 6c 73 65 20 77 68 65 72 65 61 73 20 69 74 20  alse whereas it 
24ed0 77 6f 75 6c 64 20 62 65 20 74 72 75 65 20 77 69  would be true wi
24ee0 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20  th IdxGT..*/./* 
24ef0 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31  Opcode: IdxLT P1
24f00 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
24f10 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
24f20 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
24f30 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
24f40 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
24f50 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
24f60 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e  omits the ROWID.
24f70 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
24f80 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
24f90 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
24fa0 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
24fb0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
24fc0 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f   ignoring the RO
24fd0 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e  WID on the P1 in
24fe0 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  dex..**.** If th
24ff0 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
25000 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
25010 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e  e key value then
25020 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20   jump to P2..** 
25030 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
25040 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
25050 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
25060 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
25070 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65  on-zero then the
25080 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e   key value is in
25090 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65 70  creased by an ep
250a0 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20  silon prior .** 
250b0 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  to the compariso
250c0 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74  n.  This makes t
250d0 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
250e0 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61  ike IdxLE..*/.ca
250f0 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20  se OP_IdxLT:    
25100 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
25110 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20  .case OP_IdxGE: 
25120 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
25130 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
25140 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
25150 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
25160 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
25170 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25180 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25190 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
251a0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
251b0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
251c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
251d0 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 69 66  sOrdered );.  if
251e0 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75  ( ALWAYS(pC->pCu
251f0 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  rsor!=0) ){.    
25200 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
25210 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
25220 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
25230 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
25240 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73  p5==1 );.    ass
25250 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
25260 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
25270 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
25280 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
25290 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
252a0 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20  )pOp->p4.i;.    
252b0 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
252c0 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
252d0 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
252e0 7c 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  | UNPACKED_PREFI
252f0 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 65 6c  X_MATCH;.    }el
25300 73 65 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67  se{.      r.flag
25310 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s = UNPACKED_PRE
25320 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d  FIX_MATCH;.    }
25330 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
25340 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
25350 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
25360 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
25370 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
25380 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
25390 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
253a0 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
253b0 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  dif.    rc = sql
253c0 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f  ite3VdbeIdxKeyCo
253d0 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26 72  mpare(pC, &r, &r
253e0 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  es);.    if( pOp
253f0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
25400 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  LT ){.      res 
25410 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73  = -res;.    }els
25420 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
25430 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
25440 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20 20 20  _IdxGE );.      
25450 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  res++;.    }.   
25460 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20   if( res>0 ){.  
25470 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
25480 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d   - 1 ;.    }.  }
25490 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
254a0 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20  Opcode: Destroy 
254b0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
254c0 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74  ** Delete an ent
254d0 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62  ire database tab
254e0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
254f0 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74  e root page in t
25500 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  he database.** f
25510 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
25520 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  P1..**.** The ta
25530 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f  ble being destro
25540 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61  yed is in the ma
25550 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
25560 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a   if P3==0.  If.*
25570 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P3==1 then the
25580 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
25590 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
255a0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
255b0 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
255c0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
255d0 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
255e0 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
255f0 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
25600 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
25610 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74   enabled then it
25620 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61   is possible tha
25630 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70  t another root p
25640 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20  age.** might be 
25650 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e  moved into the n
25660 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f  ewly deleted roo
25670 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20  t page in order 
25680 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72  to keep all.** r
25690 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67  oot pages contig
256a0 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69  uous at the begi
256b0 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74  nning of the dat
256c0 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d  abase.  The form
256d0 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74  er.** value of t
256e0 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61  he root page tha
256f0 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61  t moved - its va
25700 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d  lue before the m
25710 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a  ove occurred -.*
25720 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  * is stored in r
25730 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
25740 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65  no page .** move
25750 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65  ment was require
25760 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20 74  d (because the t
25770 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70  able being dropp
25780 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a  ed was already .
25790 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20  ** the last one 
257a0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 29  in the database)
257b0 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
257c0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
257d0 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54  er P2..** If AUT
257e0 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62  OVACUUM is disab
257f0 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  led then a zero 
25800 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
25810 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
25820 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a  See also: Clear.
25830 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72  */.case OP_Destr
25840 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74  oy: {     /* out
25850 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
25860 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20    int iMoved;.  
25870 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64 62 65  int iCnt;.  Vdbe
25880 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74 20 69   *pVdbe;.  int i
25890 44 62 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  Db;.#ifndef SQLI
258a0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
258b0 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b  ABLE.  iCnt = 0;
258c0 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62 2d  .  for(pVdbe=db-
258d0 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20 70  >pVdbe; pVdbe; p
258e0 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e  Vdbe = pVdbe->pN
258f0 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70 56  ext){.    if( pV
25900 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  dbe->magic==VDBE
25910 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70 56  _MAGIC_RUN && pV
25920 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f  dbe->inVtabMetho
25930 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63  d<2 && pVdbe->pc
25940 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 43 6e  >=0 ){.      iCn
25950 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  t++;.    }.  }.#
25960 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64 62  else.  iCnt = db
25970 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3b  ->activeVdbeCnt;
25980 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e  .#endif.  pOut->
25990 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
259a0 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29  ;.  if( iCnt>1 )
259b0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
259c0 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
259d0 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
259e0 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65  E_Abort;.  }else
259f0 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
25a00 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
25a10 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20   iCnt==1 );.    
25a20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
25a30 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
25a40 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20  sk)1)<<iDb))!=0 
25a50 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
25a60 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c  te3BtreeDropTabl
25a70 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  e(db->aDb[iDb].p
25a80 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d  Bt, pOp->p1, &iM
25a90 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d  oved);.    pOut-
25aa0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
25ab0 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
25ac0 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65  = iMoved;.#ifnde
25ad0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
25ae0 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28  TOVACUUM.    if(
25af0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
25b00 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20  & iMoved!=0 ){. 
25b10 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74       sqlite3Root
25b20 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44  PageMoved(db, iD
25b30 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e  b, iMoved, pOp->
25b40 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c  p1);.      /* Al
25b50 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65  l OP_Destroy ope
25b60 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e  rations occur on
25b70 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65 20   the same btree 
25b80 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
25b90 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
25ba0 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53  ult==0 || resetS
25bb0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44  chemaOnFault==iD
25bc0 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73  b+1 );.      res
25bd0 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20  etSchemaOnFault 
25be0 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23  = iDb+1;.    }.#
25bf0 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
25c00 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
25c10 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a   Clear P1 P2 P3.
25c20 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
25c30 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
25c40 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
25c50 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
25c60 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74  oot page.** in t
25c70 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
25c80 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
25c90 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65    But, unlike De
25ca0 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a  stroy, do not.**
25cb0 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c   remove the tabl
25cc0 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20  e or index from 
25cd0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
25ce0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  e..**.** The tab
25cf0 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69  le being clear i
25d00 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
25d10 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
25d20 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d  2==0.  If.** P2=
25d30 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
25d40 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
25d50 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
25d60 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
25d70 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
25d80 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
25d90 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
25da0 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
25db0 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  BLE..**.** If th
25dc0 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P3 value is no
25dd0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
25de0 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20   table referred 
25df0 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a  to must be an.**
25e00 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61   intkey table (a
25e10 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74  n SQL table, not
25e20 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74   an index). In t
25e30 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77  his case the row
25e40 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e   change .** coun
25e50 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
25e60 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
25e70 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
25e80 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
25e90 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20  d. .** If P3 is 
25ea0 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
25eb0 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  o, then the valu
25ec0 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  e stored in regi
25ed0 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c  ster P3 is.** al
25ee0 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  so incremented b
25ef0 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
25f00 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
25f10 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
25f20 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
25f30 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65   Destroy.*/.case
25f40 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69   OP_Clear: {.  i
25f50 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20  nt nChange;. .  
25f60 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61  nChange = 0;.  a
25f70 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
25f80 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
25f90 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 32 29 29 21  k)1)<<pOp->p2))!
25fa0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
25fb0 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
25fc0 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61  ble(.      db->a
25fd0 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c  Db[pOp->p2].pBt,
25fe0 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e   pOp->p1, (pOp->
25ff0 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20  p3 ? &nChange : 
26000 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f  0).  );.  if( pO
26010 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e  p->p3 ){.    p->
26020 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e  nChange += nChan
26030 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ge;.    if( pOp-
26040 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61  >p3>0 ){.      a
26050 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
26060 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
26070 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
26080 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
26090 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
260a0 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e        aMem[pOp->
260b0 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
260c0 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
260d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
260e0 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65  ode: CreateTable
260f0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
26100 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
26110 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  w table in the m
26120 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
26130 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
26140 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
26150 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
26160 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
26170 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
26180 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
26190 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
261a0 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
261b0 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
261c0 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
261d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65  .**.** The diffe
261e0 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20  rence between a 
261f0 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64  table and an ind
26200 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74  ex is this:  A t
26210 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76  able must.** hav
26220 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67  e a 4-byte integ
26230 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68  er key and can h
26240 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61  ave arbitrary da
26250 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a  ta.  An index.**
26260 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72   has an arbitrar
26270 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74  y key but no dat
26280 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  a..**.** See als
26290 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a  o: CreateIndex.*
262a0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  /./* Opcode: Cre
262b0 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a  ateIndex P1 P2 *
262c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63   * *.**.** Alloc
262d0 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20  ate a new index 
262e0 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
262f0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
26300 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
26310 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
26320 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
26330 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
26340 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
26350 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
26360 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
26370 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
26380 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
26390 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
263a0 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
263b0 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61  n on OP_CreateTa
263c0 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ble for addition
263d0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
263e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
263f0 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20  eIndex:         
26400 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
26410 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50  lease */.case OP
26420 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20  _CreateTable: { 
26430 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
26440 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
26450 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74   int pgno;.  int
26460 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44   flags;.  Db *pD
26470 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a  b;..  pgno = 0;.
26480 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26490 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
264a0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
264b0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
264c0 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
264d0 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  1)<<pOp->p1))!=0
264e0 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
264f0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
26500 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
26510 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  t!=0 );.  if( pO
26520 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72  p->opcode==OP_Cr
26530 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20  eateTable ){.   
26540 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45   /* flags = BTRE
26550 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20  E_INTKEY; */.   
26560 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
26570 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a  NTKEY;.  }else{.
26580 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45      flags = BTRE
26590 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20  E_BLOBKEY;.  }. 
265a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
265b0 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44  eeCreateTable(pD
265c0 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66  b->pBt, &pgno, f
265d0 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  lags);.  pOut->u
265e0 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65  .i = pgno;.  bre
265f0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26600 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31  : ParseSchema P1
26610 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
26620 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61  Read and parse a
26630 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ll entries from 
26640 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  the SQLITE_MASTE
26650 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62  R table of datab
26660 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d  ase P1.** that m
26670 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63  atch the WHERE c
26680 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a  lause P4. .**.**
26690 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
266a0 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20  okes the parser 
266b0 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  to create a new 
266c0 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c  virtual machine,
266d0 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68  .** then runs th
266e0 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  e new virtual ma
266f0 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68  chine.  It is th
26700 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20  us a re-entrant 
26710 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
26720 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20  OP_ParseSchema: 
26730 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63  {.  int iDb;.  c
26740 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74  onst char *zMast
26750 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c  er;.  char *zSql
26760 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69  ;.  InitData ini
26770 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79  tData;..  /* Any
26780 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
26790 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73  ent that invokes
267a0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   this opcode wil
267b0 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20  l hold mutexes. 
267c0 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72   ** on every btr
267d0 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70  ee.  This is a p
267e0 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20  rerequisite for 
267f0 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73  invoking .  ** s
26800 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
26810 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65  ck()..  */.#ifde
26820 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
26830 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c   for(iDb=0; iDb<
26840 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b  db->nDb; iDb++){
26850 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62  .    assert( iDb
26860 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74  ==1 || sqlite3Bt
26870 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62  reeHoldsMutex(db
26880 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20  ->aDb[iDb].pBt) 
26890 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
268a0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a   iDb = pOp->p1;.
268b0 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
268c0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
268d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48  );.  assert( DbH
268e0 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69  asProperty(db, i
268f0 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  Db, DB_SchemaLoa
26900 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65  ded) );.  /* Use
26910 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74  d to be a condit
26920 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a  ional */ {.    z
26930 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f  Master = SCHEMA_
26940 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20  TABLE(iDb);.    
26950 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62  initData.db = db
26960 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69  ;.    initData.i
26970 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
26980 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72    initData.pzErr
26990 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73  Msg = &p->zErrMs
269a0 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  g;.    zSql = sq
269b0 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
269c0 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  .       "SELECT 
269d0 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
269e0 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73  sql FROM '%q'.%s
269f0 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20   WHERE %s ORDER 
26a00 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20  BY rowid",.     
26a10 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a    db->aDb[iDb].z
26a20 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70  Name, zMaster, p
26a30 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69  Op->p4.z);.    i
26a40 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20  f( zSql==0 ){.  
26a50 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
26a60 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65  NOMEM;.    }else
26a70 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
26a80 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30  db->init.busy==0
26a90 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e   );.      db->in
26aa0 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20  it.busy = 1;.   
26ab0 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d     initData.rc =
26ac0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
26ad0 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d    assert( !db->m
26ae0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
26af0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
26b00 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c  3_exec(db, zSql,
26b10 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
26b20 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c  back, &initData,
26b30 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
26b40 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72  c==SQLITE_OK ) r
26b50 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b  c = initData.rc;
26b60 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
26b70 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a  Free(db, zSql);.
26b80 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
26b90 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  usy = 0;.    }. 
26ba0 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73 71   }.  if( rc ) sq
26bb0 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
26bc0 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 2d 31 29  alSchema(db, -1)
26bd0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
26be0 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
26bf0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
26c00 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23  .  break;  .}..#
26c10 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
26c20 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
26c30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64  ./* Opcode: Load
26c40 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20  Analysis P1 * * 
26c50 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74  * *.**.** Read t
26c60 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
26c70 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61  table for databa
26c80 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74  se P1 and load t
26c90 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66  he content.** of
26ca0 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f   that table into
26cb0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e   the internal in
26cc0 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20  dex hash table. 
26cd0 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
26ce0 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73  .** the analysis
26cf0 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
26d00 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73   preparing all s
26d10 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65  ubsequent querie
26d20 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f  s..*/.case OP_Lo
26d30 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20  adAnalysis: {.  
26d40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
26d50 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
26d60 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20  ->nDb );.  rc = 
26d70 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
26d80 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  oad(db, pOp->p1)
26d90 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23  ;.  break;  .}.#
26da0 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
26db0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
26dc0 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70  ALYZE) */../* Op
26dd0 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20  code: DropTable 
26de0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
26df0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
26e00 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
26e10 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
26e20 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
26e30 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  ** the table nam
26e40 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
26e50 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
26e60 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61  alled after a ta
26e70 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ble.** is droppe
26e80 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
26e90 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
26ea0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
26eb0 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
26ec0 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
26ed0 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
26ee0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
26ef0 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74  Table: {.  sqlit
26f00 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
26f10 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e  eTable(db, pOp->
26f20 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
26f30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
26f40 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78  pcode: DropIndex
26f50 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
26f60 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
26f70 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
26f80 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
26f90 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
26fa0 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61  .** the index na
26fb0 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
26fc0 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
26fd0 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20  called after an 
26fe0 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70  index.** is drop
26ff0 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ped in order to 
27000 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
27010 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
27020 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
27030 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
27040 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
27050 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
27060 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c  opIndex: {.  sql
27070 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
27080 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70  eteIndex(db, pOp
27090 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
270a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
270b0 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69   Opcode: DropTri
270c0 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a  gger P1 * * P4 *
270d0 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
270e0 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
270f0 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
27100 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
27110 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67  ribe.** the trig
27120 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ger named P4 in 
27130 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
27140 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
27150 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20  er a trigger.** 
27160 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72  is dropped in or
27170 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
27180 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
27190 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
271a0 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
271b0 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
271c0 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
271d0 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72  e OP_DropTrigger
271e0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
271f0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
27200 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ger(db, pOp->p1,
27210 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
27220 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
27230 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
27240 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a  TEGRITY_CHECK./*
27250 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69   Opcode: Integri
27260 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20  tyCk P1 P2 P3 * 
27270 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61  P5.**.** Do an a
27280 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63  nalysis of the c
27290 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61  urrently open da
272a0 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69  tabase.  Store i
272b0 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  n.** register P1
272c0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20   the text of an 
272d0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65  error message de
272e0 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f  scribing any pro
272f0 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20  blems..** If no 
27300 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75  problems are fou
27310 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  nd, store a NULL
27320 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
27330 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
27340 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
27350 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
27360 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72  er of allowed er
27370 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74  rors..** At most
27380 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20   reg(P3) errors 
27390 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64  will be reported
273a0 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
273b0 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69  rds, the analysi
273c0 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20  s stops as soon 
273d0 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72  as reg(P1) error
273e0 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20  s are .** seen. 
273f0 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61   Reg(P1) is upda
27400 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d  ted with the num
27410 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
27420 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  maining..**.** T
27430 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
27440 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c  bers of all tabl
27450 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
27460 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a  se are integer.*
27470 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28  * stored in reg(
27480 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20  P1), reg(P1+1), 
27490 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20  reg(P1+2), .... 
274a0 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61   There are P2 ta
274b0 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a  bles.** total..*
274c0 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
274d0 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63  t zero, the chec
274e0 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65  k is done on the
274f0 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
27500 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74  ase.** file, not
27510 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
27520 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
27530 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
27540 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
27550 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68  the integrity_ch
27560 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63  eck pragma..*/.c
27570 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79  ase OP_Integrity
27580 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f  Ck: {.  int nRoo
27590 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t;      /* Numbe
275a0 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63  r of tables to c
275b0 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f  heck.  (Number o
275c0 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a  f root pages.) *
275d0 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20  /.  int *aRoot; 
275e0 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
275f0 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73  rootpage numbers
27600 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62   for tables to b
27610 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69  e checked */.  i
27620 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f  nt j;          /
27630 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
27640 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
27650 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
27660 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64   errors reported
27670 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
27680 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
27690 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72   the error repor
276a0 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72  t */.  Mem *pnEr
276b0 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  r;     /* Regist
276c0 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b  er keeping track
276d0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
276e0 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f  ning */.  .  nRo
276f0 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ot = pOp->p2;.  
27700 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20  assert( nRoot>0 
27710 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c  );.  aRoot = sql
27720 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
27730 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a  db, sizeof(int)*
27740 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69  (nRoot+1) );.  i
27750 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f  f( aRoot==0 ) go
27760 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73  to no_mem;.  ass
27770 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
27780 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
27790 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  em );.  pnErr = 
277a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
277b0 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
277c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
277d0 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  t)!=0 );.  asser
277e0 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
277f0 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
27800 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70  Blob))==0 );.  p
27810 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
27820 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b  >p1];.  for(j=0;
27830 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a   j<nRoot; j++){.
27840 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28      aRoot[j] = (
27850 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49  int)sqlite3VdbeI
27860 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d  ntValue(&pIn1[j]
27870 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a  );.  }.  aRoot[j
27880 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  ] = 0;.  assert(
27890 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62   pOp->p5<db->nDb
278a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
278b0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
278c0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
278d0 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20 20 7a  ->p5))!=0 );.  z
278e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
278f0 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62  ntegrityCheck(db
27900 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70  ->aDb[pOp->p5].p
27910 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74  Bt, aRoot, nRoot
27920 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
27930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27940 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75     (int)pnErr->u
27950 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71  .i, &nErr);.  sq
27960 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
27970 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d  aRoot);.  pnErr-
27980 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20  >u.i -= nErr;.  
27990 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
279a0 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69  tNull(pIn1);.  i
279b0 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20  f( nErr==0 ){.  
279c0 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29    assert( z==0 )
279d0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d  ;.  }else if( z=
279e0 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  =0 ){.    goto n
279f0 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  o_mem;.  }else{.
27a00 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
27a10 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a  emSetStr(pIn1, z
27a20 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  , -1, SQLITE_UTF
27a30 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29  8, sqlite3_free)
27a40 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d  ;.  }.  UPDATE_M
27a50 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
27a60 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
27a70 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
27a80 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
27a90 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
27aa0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
27ab0 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
27ac0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
27ad0 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20  RowSetAdd P1 P2 
27ae0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  * * *.**.** Inse
27af0 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
27b00 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
27b10 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
27b20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a  boolean index.**
27b30 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
27b40 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
27b50 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
27b60 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
27b70 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
27b80 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
27b90 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
27ba0 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
27bb0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
27bc0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
27bd0 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
27be0 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
27bf0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
27c00 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
27c10 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
27c20 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
27c30 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
27c40 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
27c50 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
27c60 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
27c70 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
27c80 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65  }.  sqlite3RowSe
27c90 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
27ca0 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75  pRowSet, pIn2->u
27cb0 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
27cc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
27cd0 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20  etRead P1 P2 P3 
27ce0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63  * *.**.** Extrac
27cf0 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  t the smallest v
27d00 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61  alue from boolea
27d10 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70  n index P1 and p
27d20 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  ut that value in
27d30 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
27d40 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65  3.  Or, if boole
27d50 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69  an index P1 is i
27d60 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20  nitially empty, 
27d70 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68  leave P3.** unch
27d80 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74  anged and jump t
27d90 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
27da0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
27db0 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20  SetRead: {      
27dc0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f   /* jump, in1, o
27dd0 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c  ut3 */.  i64 val
27de0 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  ;.  CHECK_FOR_IN
27df0 54 45 52 52 55 50 54 3b 0a 20 20 70 49 6e 31 20  TERRUPT;.  pIn1 
27e00 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
27e10 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
27e20 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
27e30 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c  t)==0 .   || sql
27e40 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70  ite3RowSetNext(p
27e50 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
27e60 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20  &val)==0.  ){.  
27e70 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e    /* The boolean
27e80 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
27e90 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
27ea0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
27eb0 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70  1);.    pc = pOp
27ec0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
27ed0 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75  e{.    /* A valu
27ee0 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f  e was pulled fro
27ef0 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  m the index */. 
27f00 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
27f10 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
27f20 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a  pOp->p3], val);.
27f30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
27f40 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
27f50 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50  tTest P1 P2 P3 P
27f60 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  4.**.** Register
27f70 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74   P3 is assumed t
27f80 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20  o hold a 64-bit 
27f90 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49  integer value. I
27fa0 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  f register P1.**
27fb0 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53   contains a RowS
27fc0 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68  et object and th
27fd0 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  at RowSet object
27fe0 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65   contains.** the
27ff0 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50   value held in P
28000 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73  3, jump to regis
28010 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ter P2. Otherwis
28020 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a  e, insert the.**
28030 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69   integer in P3 i
28040 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61  nto the RowSet a
28050 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74  nd continue on t
28060 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70  o the.** next op
28070 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
28080 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73  RowSet object is
28090 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74   optimized for t
280a0 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75  he case where su
280b0 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a  ccessive sets.**
280c0 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68   of integers, wh
280d0 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e  ere each set con
280e0 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61  tains no duplica
280f0 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a  tes. Each set.**
28100 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64   of values is id
28110 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e  entified by a un
28120 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54  ique P4 value. T
28130 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20  he first set.** 
28140 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c  must have P4==0,
28150 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50   the final set P
28160 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62  4=-1.  P4 must b
28170 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a  e either -1 or.*
28180 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20  * non-negative. 
28190 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76   For non-negativ
281a0 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f  e values of P4 o
281b0 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a  nly the lower 4.
281c0 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e  ** bits are sign
281d0 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54  ificant..**.** T
281e0 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d  his allows optim
281f0 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68  izations: (a) wh
28200 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69  en P4==0 there i
28210 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73  s no need to tes
28220 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20  t.** the rowset 
28230 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61  object for P3, a
28240 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  s it is guarante
28250 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69  ed not to contai
28260 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65  n it,.** (b) whe
28270 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69  n P4==-1 there i
28280 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73  s no need to ins
28290 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61  ert the value, a
282a0 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76  s it will.** nev
282b0 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72  er be tested for
282c0 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61  , and (c) when a
282d0 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70   value that is p
282e0 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a  art of set X is.
282f0 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65  ** inserted, the
28300 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
28310 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69   search to see i
28320 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  f the same value
28330 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73   was.** previous
28340 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ly inserted as p
28350 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e  art of set X (on
28360 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65  ly if it was pre
28370 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72  viously.** inser
28380 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
28390 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a  ome other set)..
283a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
283b0 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20  tTest: {        
283c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
283d0 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
283e0 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20  /.  int iSet;.  
283f0 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70  int exists;..  p
28400 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
28410 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
28420 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
28430 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e   iSet = pOp->p4.
28440 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  i;.  assert( pIn
28450 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  3->flags&MEM_Int
28460 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   );..  /* If the
28470 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f  re is anything o
28480 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73  ther than a rows
28490 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d  et object in mem
284a0 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a  ory cell P1,.  *
284b0 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20  * delete it now 
284c0 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50  and initialize P
284d0 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20  1 with an empty 
284e0 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66  rowset.  */.  if
284f0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
28500 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
28510 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
28520 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
28530 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70  In1);.    if( (p
28540 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
28550 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f  _RowSet)==0 ) go
28560 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
28570 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28580 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
28590 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65  );.  assert( iSe
285a0 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30  t==-1 || iSet>=0
285b0 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29   );.  if( iSet )
285c0 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73  {.    exists = s
285d0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
285e0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
285f0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
28600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28610 20 20 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f    (u8)(iSet>=0 ?
28620 20 69 53 65 74 20 26 20 30 78 66 20 3a 20 30 78   iSet & 0xf : 0x
28630 66 66 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ff),.           
28640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28650 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a      pIn3->u.i);.
28660 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29      if( exists )
28670 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
28680 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
28690 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
286a0 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29  .  if( iSet>=0 )
286b0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77  {.    sqlite3Row
286c0 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
286d0 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d  u.pRowSet, pIn3-
286e0 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >u.i);.  }.  bre
286f0 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
28700 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
28710 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GER../* Opcode: 
28720 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33  Program P1 P2 P3
28730 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63   P4 *.**.** Exec
28740 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20  ute the trigger 
28750 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61  program passed a
28760 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55  s P4 (type P4_SU
28770 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a  BPROGRAM). .**.*
28780 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P1 contains th
28790 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
287a0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
287b0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66  t contains the f
287c0 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  irst memory .** 
287d0 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79  cell in an array
287e0 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20   of values used 
287f0 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  as arguments to 
28800 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
28810 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73   P2 .** contains
28820 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20   the address to 
28830 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73  jump to if the s
28840 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77  ub-program throw
28850 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20  s an IGNORE .** 
28860 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20  exception using 
28870 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63  the RAISE() func
28880 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50  tion. Register P
28890 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
288a0 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20  ddress .** of a 
288b0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
288c0 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29  his (the parent)
288d0 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64   VM that is used
288e0 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65   to allocate the
288f0 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75   .** memory requ
28900 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d  ired by the sub-
28910 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e  vdbe at runtime.
28920 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
28930 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d  ointer to the VM
28940 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
28950 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
28960 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67  .*/.case OP_Prog
28970 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ram: {        /*
28980 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
28990 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
289a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
289b0 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  memory registers
289c0 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
289d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b   */.  int nByte;
289e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
289f0 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d   Bytes of runtim
28a00 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  e space required
28a10 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
28a20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20   */.  Mem *pRt; 
28a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
28a40 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c   Register to all
28a50 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70  ocate runtime sp
28a60 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ace */.  Mem *pM
28a70 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
28a80 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72   /* Used to iter
28a90 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f  ate through memo
28aa0 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65  ry cells */.  Me
28ab0 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  m *pEnd;        
28ac0 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65        /* Last me
28ad0 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77  mory cell in new
28ae0 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65   array */.  Vdbe
28af0 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
28b00 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20      /* New vdbe 
28b10 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65  frame to execute
28b20 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67   in */.  SubProg
28b30 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
28b40 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20   /* Sub-program 
28b50 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20  to execute */.  
28b60 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20  void *t;        
28b70 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
28b80 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69   identifying tri
28b90 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67  gger */..  pProg
28ba0 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50  ram = pOp->p4.pP
28bb0 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20  rogram;.  pRt = 
28bc0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
28bd0 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
28be0 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a  am->nOp>0 );.  .
28bf0 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66    /* If the p5 f
28c00 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68  lag is clear, th
28c10 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76  en recursive inv
28c20 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67  ocation of trigg
28c30 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73  ers is .  ** dis
28c40 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61  abled for backwa
28c50 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  rds compatibilit
28c60 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20  y (p5 is set if 
28c70 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d  this sub-program
28c80 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20  .  ** is really 
28c90 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61  a trigger, not a
28ca0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74   foreign key act
28cb0 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61  ion, and the fla
28cc0 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63  g set.  ** and c
28cd0 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50  leared by the "P
28ce0 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f  RAGMA recursive_
28cf0 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e  triggers" comman
28d00 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a  d is clear)..  *
28d10 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65  * .  ** It is re
28d20 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69  cursive invocati
28d30 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20  on of triggers, 
28d40 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c  at the SQL level
28d50 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20  , that is .  ** 
28d60 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d  disabled. In som
28d70 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65  e cases a single
28d80 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e   trigger may gen
28d90 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20  erate more than 
28da0 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f  one .  ** SubPro
28db0 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69  gram (if the tri
28dc0 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63  gger may be exec
28dd0 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74  uted with more t
28de0 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e  han one differen
28df0 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c  t .  ** ON CONFL
28e00 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20  ICT algorithm). 
28e10 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63  SubProgram struc
28e20 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64  tures associated
28e30 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e   with a.  ** sin
28e40 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20  gle trigger all 
28e50 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61  have the same va
28e60 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50  lue for the SubP
28e70 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20  rogram.token .  
28e80 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f  ** variable.  */
28e90 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
28ea0 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72  {.    t = pProgr
28eb0 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66  am->token;.    f
28ec0 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
28ed0 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70  ame; pFrame && p
28ee0 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b  Frame->token!=t;
28ef0 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
28f00 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66  pParent);.    if
28f10 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b  ( pFrame ) break
28f20 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e  ;.  }..  if( p->
28f30 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d  nFrame>=db->aLim
28f40 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
28f50 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29  TRIGGER_DEPTH] )
28f60 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
28f70 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c  E_ERROR;.    sql
28f80 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
28f90 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
28fa0 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20  too many levels 
28fb0 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72  of trigger recur
28fc0 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61  sion");.    brea
28fd0 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67  k;.  }..  /* Reg
28fe0 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65  ister pRt is use
28ff0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d  d to store the m
29000 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74  emory required t
29010 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65  o save the state
29020 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72  .  ** of the cur
29030 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e  rent program, an
29040 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71  d the memory req
29050 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65  uired at runtime
29060 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a   to execute.  **
29070 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
29080 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72  gram. If this tr
29090 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66  igger has been f
290a0 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65  ired before, the
290b0 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61  n pRt .  ** is a
290c0 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
290d0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20  . Otherwise, it 
290e0 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69  must be initiali
290f0 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28  zed.  */.  if( (
29100 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46  pRt->flags&MEM_F
29110 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20  rame)==0 ){.    
29120 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d  /* SubProgram.nM
29130 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  em is set to the
29140 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
29150 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20  y cells used by 
29160 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67  the .    ** prog
29170 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75  ram stored in Su
29180 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73  bProgram.aOp. As
29190 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20   well as these, 
291a0 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a  one memory.    *
291b0 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72  * cell is requir
291c0 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73  ed for each curs
291d0 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70  or used by the p
291e0 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61  rogram. Set loca
291f0 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c  l.    ** variabl
29200 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65  e nMem (and late
29210 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68  r, VdbeFrame.nCh
29220 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20  ildMem) to this 
29230 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  value..    */.  
29240 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61    nMem = pProgra
29250 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72  m->nMem + pProgr
29260 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42  am->nCsr;.    nB
29270 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a  yte = ROUND8(siz
29280 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a  eof(VdbeFrame)).
29290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
292a0 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65  nMem * sizeof(Me
292b0 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m).             
292c0 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
292d0 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43  r * sizeof(VdbeC
292e0 75 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20  ursor *).       
292f0 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61         + pProgra
29300 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f  m->nOnce * sizeo
29310 66 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d  f(u8);.    pFram
29320 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  e = sqlite3DbMal
29330 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74  locZero(db, nByt
29340 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72  e);.    if( !pFr
29350 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  ame ){.      got
29360 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a  o no_mem;.    }.
29370 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
29380 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a  emRelease(pRt);.
29390 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d      pRt->flags =
293a0 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20   MEM_Frame;.    
293b0 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20  pRt->u.pFrame = 
293c0 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72  pFrame;..    pFr
293d0 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20  ame->v = p;.    
293e0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
293f0 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46  m = nMem;.    pF
29400 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
29410 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  = pProgram->nCsr
29420 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63  ;.    pFrame->pc
29430 20 3d 20 70 63 3b 0a 20 20 20 20 70 46 72 61 6d   = pc;.    pFram
29440 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65  e->aMem = p->aMe
29450 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  m;.    pFrame->n
29460 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20  Mem = p->nMem;. 
29470 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72     pFrame->apCsr
29480 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20   = p->apCsr;.   
29490 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72   pFrame->nCursor
294a0 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20   = p->nCursor;. 
294b0 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d     pFrame->aOp =
294c0 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72   p->aOp;.    pFr
294d0 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f  ame->nOp = p->nO
294e0 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74  p;.    pFrame->t
294f0 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d  oken = pProgram-
29500 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61  >token;.    pFra
29510 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20  me->aOnceFlag = 
29520 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20  p->aOnceFlag;.  
29530 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46    pFrame->nOnceF
29540 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c  lag = p->nOnceFl
29550 61 67 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20  ag;..    pEnd = 
29560 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  &VdbeFrameMem(pF
29570 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43  rame)[pFrame->nC
29580 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f  hildMem];.    fo
29590 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65  r(pMem=VdbeFrame
295a0 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65  Mem(pFrame); pMe
295b0 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29  m!=pEnd; pMem++)
295c0 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c  {.      pMem->fl
295d0 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 76 61 6c 69  ags = MEM_Invali
295e0 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64  d;.      pMem->d
295f0 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20  b = db;.    }.  
29600 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d  }else{.    pFram
29610 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d  e = pRt->u.pFram
29620 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e;.    assert( p
29630 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50  Program->nMem+pP
29640 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
29650 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20  rame->nChildMem 
29660 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
29670 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70  Program->nCsr==p
29680 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
29690 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
296a0 70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29  pc==pFrame->pc )
296b0 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61  ;.  }..  p->nFra
296c0 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  me++;.  pFrame->
296d0 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72  pParent = p->pFr
296e0 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c  ame;.  pFrame->l
296f0 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
29700 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  owid;.  pFrame->
29710 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68  nChange = p->nCh
29720 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e  ange;.  p->nChan
29730 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72  ge = 0;.  p->pFr
29740 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20  ame = pFrame;.  
29750 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d  p->aMem = aMem =
29760 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70   &VdbeFrameMem(p
29770 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d  Frame)[-1];.  p-
29780 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e  >nMem = pFrame->
29790 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e  nChildMem;.  p->
297a0 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70  nCursor = (u16)p
297b0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
297c0 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28  ;.  p->apCsr = (
297d0 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61  VdbeCursor **)&a
297e0 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a  Mem[p->nMem+1];.
297f0 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d    p->aOp = aOp =
29800 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a   pProgram->aOp;.
29810 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67    p->nOp = pProg
29820 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61  ram->nOp;.  p->a
29830 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a  OnceFlag = (u8 *
29840 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43  )&p->apCsr[p->nC
29850 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e  ursor];.  p->nOn
29860 63 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61  ceFlag = pProgra
29870 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63 20 3d  m->nOnce;.  pc =
29880 20 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d   -1;.  memset(p-
29890 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70  >aOnceFlag, 0, p
298a0 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20  ->nOnceFlag);.. 
298b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
298c0 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50  code: Param P1 P
298d0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
298e0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  is opcode is onl
298f0 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69  y ever present i
29900 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63  n sub-programs c
29910 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a  alled via the .*
29920 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  * OP_Program ins
29930 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61  truction. Copy a
29940 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79   value currently
29950 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d   stored in a mem
29960 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20  ory .** cell of 
29970 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72  the calling (par
29980 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65  ent) frame to ce
29990 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72  ll P2 in the cur
299a0 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20  rent frames .** 
299b0 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54  address space. T
299c0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
299d0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20  rigger programs 
299e0 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65  to access the ne
299f0 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e  w.* .** and old.
29a00 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20  * values..**.** 
29a10 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  The address of t
29a20 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70  he cell in the p
29a30 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64  arent frame is d
29a40 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64  etermined by add
29a50 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ing.** the value
29a60 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
29a70 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ent to the value
29a80 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
29a90 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61  ent to the.** ca
29aa0 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
29ab0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
29ac0 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20  .case OP_Param: 
29ad0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
29ae0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
29af0 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
29b00 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49  Frame;.  Mem *pI
29b10 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d  n;.  pFrame = p-
29b20 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d  >pFrame;.  pIn =
29b30 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
29b40 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d  Op->p1 + pFrame-
29b50 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d  >aOp[pFrame->pc]
29b60 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74  .p1];   .  sqlit
29b70 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
29b80 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20  Copy(pOut, pIn, 
29b90 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72  MEM_Ephem);.  br
29ba0 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f  eak;.}..#endif /
29bb0 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
29bc0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f  _OMIT_TRIGGER */
29bd0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
29be0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
29bf0 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43  Y./* Opcode: FkC
29c00 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a  ounter P1 P2 * *
29c10 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65   *.**.** Increme
29c20 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74  nt a "constraint
29c30 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20   counter" by P2 
29c40 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74  (P2 may be negat
29c50 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
29c60 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  ..** If P1 is no
29c70 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61  n-zero, the data
29c80 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  base constraint 
29c90 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
29ca0 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65  mented .** (defe
29cb0 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79  rred foreign key
29cc0 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f   constraints). O
29cd0 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20  therwise, if P1 
29ce0 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a  is zero, the .**
29cf0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74   statement count
29d00 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
29d10 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  d (immediate for
29d20 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
29d30 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ints)..*/.case O
29d40 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20  P_FkCounter: {. 
29d50 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
29d60 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
29d70 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  dCons += pOp->p2
29d80 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
29d90 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20  ->nFkConstraint 
29da0 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a  += pOp->p2;.  }.
29db0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
29dc0 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20  pcode: FkIfZero 
29dd0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
29de0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65  * This opcode te
29df0 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e  sts if a foreign
29e00 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d   key constraint-
29e10 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65  counter is curre
29e20 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66  ntly zero..** If
29e30 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73   so, jump to ins
29e40 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68  truction P2. Oth
29e50 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
29e60 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
29e70 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
29e80 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
29e90 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
29ea0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
29eb0 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  n if the databas
29ec0 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  e constraint-cou
29ed0 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20  nter.** is zero 
29ee0 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f  (the one that co
29ef0 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f  unts deferred co
29f00 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
29f10 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a  ons). If P1 is.*
29f20 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70  * zero, the jump
29f30 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
29f40 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74   statement const
29f50 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
29f60 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69   zero.** (immedi
29f70 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
29f80 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
29f90 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  tions)..*/.case 
29fa0 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20  OP_FkIfZero: {  
29fb0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
29fc0 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  /.  if( pOp->p1 
29fd0 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  ){.    if( db->n
29fe0 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20  DeferredCons==0 
29ff0 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31  ) pc = pOp->p2-1
2a000 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
2a010 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  f( p->nFkConstra
2a020 69 6e 74 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f  int==0 ) pc = pO
2a030 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
2a040 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2a050 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
2a060 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
2a070 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  Y */..#ifndef SQ
2a080 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
2a090 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
2a0a0 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
2a0b0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69  * * *.**.** P1 i
2a0c0 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
2a0d0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
2a0e0 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20 72  f this VM (the r
2a0f0 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20  oot frame is.** 
2a100 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74  different from t
2a110 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
2a120 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   if this instruc
2a130 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78  tion is being ex
2a140 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e  ecuted.** within
2a150 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e   a sub-program).
2a160 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   Set the value o
2a170 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  f register P1 to
2a180 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
2a190 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20  .** its current 
2a1a0 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61  value and the va
2a1b0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
2a1c0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
2a1d0 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77  nstruction throw
2a1e0 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
2a1f0 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73  e memory cell is
2a200 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a   not initially.*
2a210 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  * an integer..*/
2a220 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a  .case OP_MemMax:
2a230 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32   {        /* in2
2a240 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 3b   */.  Mem *pIn1;
2a250 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
2a260 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70  rame;.  if( p->p
2a270 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72  Frame ){.    for
2a280 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
2a290 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
2a2a0 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
2a2b0 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
2a2c0 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d   pIn1 = &pFrame-
2a2d0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
2a2e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e    }else{.    pIn
2a2f0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2a300 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  1];.  }.  assert
2a310 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
2a320 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  1) );.  sqlite3V
2a330 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
2a340 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
2a350 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2a360 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2a370 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
2a380 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
2a390 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20  .i<pIn2->u.i){. 
2a3a0 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70     pIn1->u.i = p
2a3b0 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20  In2->u.i;.  }.  
2a3c0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2a3d0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  /* SQLITE_OMIT_A
2a3e0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
2a3f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f  ./* Opcode: IfPo
2a400 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  s P1 P2 * * *.**
2a410 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
2a420 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
2a430 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c  is 1 or greater,
2a440 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
2a450 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
2a460 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
2a470 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
2a480 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
2a490 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
2a4a0 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
2a4b0 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
2a4c0 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
2a4d0 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
2a4e0 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20  OP_IfPos: {     
2a4f0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2a500 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2a510 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2a520 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2a530 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69  s&MEM_Int );.  i
2a540 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
2a550 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
2a560 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2a570 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2a580 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20  de: IfNeg P1 P2 
2a590 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74  * * *.**.** If t
2a5a0 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2a5b0 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
2a5c0 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20  than zero, jump 
2a5d0 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74  to P2. .**.** It
2a5e0 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
2a5f0 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
2a600 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
2a610 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
2a620 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
2a630 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
2a640 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
2a650 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
2a660 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
2a670 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Neg: {        /*
2a680 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
2a690 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2a6a0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2a6b0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
2a6c0 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
2a6d0 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20  n1->u.i<0 ){.   
2a6e0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2a6f0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2a700 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2a710 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a  fZero P1 P2 P3 *
2a720 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67   *.**.** The reg
2a730 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
2a740 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
2a750 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50  .  Add literal P
2a760 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75  3 to the.** valu
2a770 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
2a780 2e 20 20 49 66 20 74 68 65 20 72 65 73 75 6c 74  .  If the result
2a790 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a   is exactly 0, j
2a7a0 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a  ump to P2. .**.*
2a7b0 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
2a7c0 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
2a7d0 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
2a7e0 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
2a7f0 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
2a800 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
2a810 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
2a820 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
2a830 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
2a840 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20  P_IfZero: {     
2a850 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2a860 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2a870 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2a880 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2a890 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  s&MEM_Int );.  p
2a8a0 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
2a8b0 3e 70 33 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  >p3;.  if( pIn1-
2a8c0 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20  >u.i==0 ){.     
2a8d0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2a8e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2a8f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
2a900 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20  Step * P2 P3 P4 
2a910 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P5.**.** Execute
2a920 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
2a930 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
2a940 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e  ate.  The.** fun
2a950 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67  ction has P5 arg
2a960 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20  uments.   P4 is 
2a970 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2a980 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75   FuncDef.** stru
2a990 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69  cture that speci
2a9a0 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  fies the functio
2a9b0 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74 65 72  n.  Use register
2a9c0 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61 63  .** P3 as the ac
2a9d0 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
2a9e0 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
2a9f0 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
2aa00 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
2aa10 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
2aa20 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  rs..*/.case OP_A
2aa30 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20  ggStep: {.  int 
2aa40 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65  n;.  int i;.  Me
2aa50 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a  m *pMem;.  Mem *
2aa60 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pRec;.  sqlite3_
2aa70 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
2aa80 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
2aa90 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  pVal;..  n = pOp
2aaa0 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p5;.  assert( 
2aab0 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d  n>=0 );.  pRec =
2aac0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2aad0 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70  .  apVal = p->ap
2aae0 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61  Arg;.  assert( a
2aaf0 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a  pVal || n==0 );.
2ab00 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
2ab10 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20  i++, pRec++){.  
2ab20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2ab30 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20  alid(pRec) );.  
2ab40 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65    apVal[i] = pRe
2ab50 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  c;.    memAboutT
2ab60 6f 43 68 61 6e 67 65 28 70 2c 20 70 52 65 63 29  oChange(p, pRec)
2ab70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
2ab80 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 52  eMemStoreType(pR
2ab90 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70  ec);.  }.  ctx.p
2aba0 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
2abb0 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20  Func;.  assert( 
2abc0 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
2abd0 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
2abe0 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d  .  ctx.pMem = pM
2abf0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2ac00 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  p3];.  pMem->n++
2ac10 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20  ;.  ctx.s.flags 
2ac20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74  = MEM_Null;.  ct
2ac30 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78  x.s.z = 0;.  ctx
2ac40 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
2ac50 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30    ctx.s.xDel = 0
2ac60 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64  ;.  ctx.s.db = d
2ac70 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72  b;.  ctx.isError
2ac80 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c   = 0;.  ctx.pCol
2ac90 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  l = 0;.  if( ctx
2aca0 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20  .pFunc->flags & 
2acb0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
2acc0 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
2acd0 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29  rt( pOp>p->aOp )
2ace0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
2acf0 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
2ad00 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
2ad10 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
2ad20 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
2ad30 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
2ad40 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
2ad50 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63  .pColl;.  }.  (c
2ad60 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29  tx.pFunc->xStep)
2ad70 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
2ad80 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
2ad90 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28  5-23230 */.  if(
2ada0 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
2adb0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2adc0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2add0 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
2ade0 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
2adf0 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20  ctx.s));.    rc 
2ae00 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20  = ctx.isError;. 
2ae10 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62   }..  sqlite3Vdb
2ae20 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78  eMemRelease(&ctx
2ae30 2e 73 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .s);..  break;.}
2ae40 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
2ae50 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34  Final P1 P2 * P4
2ae60 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65   *.**.** Execute
2ae70 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66   the finalizer f
2ae80 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
2ae90 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73  ggregate.  P1 is
2aea0 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  .** the memory l
2aeb0 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  ocation that is 
2aec0 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20  the accumulator 
2aed0 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74  for the aggregat
2aee0 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  e..**.** P2 is t
2aef0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
2af00 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20  uments that the 
2af10 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61  step function ta
2af20 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73  kes and.** P4 is
2af30 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
2af40 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68  e FuncDef for th
2af50 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
2af60 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  e P2.** argument
2af70 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
2af80 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74  this opcode.  It
2af90 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74   is only there t
2afa0 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a  o disambiguate.*
2afb0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74  * functions that
2afc0 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e   can take varyin
2afd0 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67  g numbers of arg
2afe0 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20  uments.  The.** 
2aff0 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  P4 argument is o
2b000 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74  nly needed for t
2b010 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61  he degenerate ca
2b020 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20  se where.** the 
2b030 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61  step function wa
2b040 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
2b050 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65   called..*/.case
2b060 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a   OP_AggFinal: {.
2b070 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61    Mem *pMem;.  a
2b080 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
2b090 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
2b0a0 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d  nMem );.  pMem =
2b0b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2b0c0 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2b0d0 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f  ->flags & ~(MEM_
2b0e0 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d  Null|MEM_Agg))==
2b0f0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
2b100 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69  te3VdbeMemFinali
2b110 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34  ze(pMem, pOp->p4
2b120 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72  .pFunc);.  if( r
2b130 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
2b140 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2b150 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
2b160 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
2b170 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a  ext(pMem));.  }.
2b180 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2b190 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
2b1a0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
2b1b0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2b1c0 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
2b1d0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2b1e0 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
2b1f0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
2b200 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2b210 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2b220 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64  MIT_WAL./* Opcod
2b230 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31  e: Checkpoint P1
2b240 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2b250 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61   Checkpoint data
2b260 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73  base P1. This is
2b270 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69   a no-op if P1 i
2b280 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
2b290 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20  in.** WAL mode. 
2b2a0 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20  Parameter P2 is 
2b2b0 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48  one of SQLITE_CH
2b2c0 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
2b2d0 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45 53  , FULL.** or RES
2b2e0 54 41 52 54 2e 20 20 57 72 69 74 65 20 31 20 6f  TART.  Write 1 o
2b2f0 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d  r 0 into mem[P3]
2b300 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69   if the checkpoi
2b310 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51  nt returns.** SQ
2b320 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74  LITE_BUSY or not
2b330 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2b340 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65   Write the numbe
2b350 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
2b360 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74  e.** WAL after t
2b370 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e  he checkpoint in
2b380 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  to mem[P3+1] and
2b390 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
2b3a0 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57  ages.** in the W
2b3b0 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65  AL that have bee
2b3c0 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61  n checkpointed a
2b3d0 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
2b3e0 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73  int.** completes
2b3f0 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e   into mem[P3+2].
2b400 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20    However on an 
2b410 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d  error, mem[P3+1]
2b420 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32   and.** mem[P3+2
2b430 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  ] are initialize
2b440 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65  d to -1..*/.case
2b450 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20   OP_Checkpoint: 
2b460 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  {.  int i;      
2b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b480 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
2b490 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65  ter */.  int aRe
2b4a0 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20  s[3];           
2b4b0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
2b4c0 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  lts */.  Mem *pM
2b4d0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
2b4e0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74           /* Writ
2b4f0 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a  e results here *
2b500 2f 0a 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20 30  /..  aRes[0] = 0
2b510 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61 52  ;.  aRes[1] = aR
2b520 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73  es[2] = -1;.  as
2b530 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  sert( pOp->p2==S
2b540 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2b550 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20 20 20  _PASSIVE.       
2b560 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
2b570 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
2b580 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  LL.       || pOp
2b590 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
2b5a0 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a  CKPOINT_RESTART.
2b5b0 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69    );.  rc = sqli
2b5c0 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62  te3Checkpoint(db
2b5d0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2b5e0 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61  p2, &aRes[1], &a
2b5f0 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72  Res[2]);.  if( r
2b600 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
2b610 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
2b620 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30  E_OK;.    aRes[0
2b630 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72  ] = 1;.  }.  for
2b640 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d  (i=0, pMem = &aM
2b650 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33  em[pOp->p3]; i<3
2b660 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a  ; i++, pMem++){.
2b670 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2b680 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c  emSetInt64(pMem,
2b690 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a   (i64)aRes[i]);.
2b6a0 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b    }    .  break;
2b6b0 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69  .};  .#endif..#i
2b6c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2b6d0 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f  T_PRAGMA./* Opco
2b6e0 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20  de: JournalMode 
2b6f0 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
2b700 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a  .** Change the j
2b710 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64  ournal mode of d
2b720 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33  atabase P1 to P3
2b730 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65  . P3 must be one
2b740 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52   of the.** PAGER
2b750 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
2b760 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e   values. If chan
2b770 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65  ging between the
2b780 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63   various rollbac
2b790 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65  k.** modes (dele
2b7a0 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65  te, truncate, pe
2b7b0 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d  rsist, off and m
2b7c0 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20  emory), this is 
2b7d0 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72  a simple.** oper
2b7e0 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20  ation. No IO is 
2b7f0 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  required..**.** 
2b800 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f  If changing into
2b810 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d   or out of WAL m
2b820 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72  ode the procedur
2b830 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69  e is more compli
2b840 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69  cated..**.** Wri
2b850 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  te a string cont
2b860 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c  aining the final
2b870 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f   journal-mode to
2b880 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
2b890 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c  .case OP_Journal
2b8a0 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75  Mode: {    /* ou
2b8b0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
2b8c0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
2b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8e0 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63     /* Btree to c
2b8f0 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f  hange journal mo
2b900 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72  de of */.  Pager
2b910 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20 20   *pPager;       
2b920 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
2b930 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
2b940 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74  ith pBt */.  int
2b950 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20   eNew;          
2b960 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2b970 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  New journal mode
2b980 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20   */.  int eOld; 
2b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64        /* The old
2b9b0 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f   journal mode */
2b9c0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
2b9d0 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20  Filename;       
2b9e0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61     /* Name of da
2b9f0 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
2ba00 70 50 61 67 65 72 20 2a 2f 0a 0a 20 20 65 4e 65  pPager */..  eNe
2ba10 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  w = pOp->p3;.  a
2ba20 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47  ssert( eNew==PAG
2ba30 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
2ba40 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  ELETE .       ||
2ba50 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2ba60 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54  RNALMODE_TRUNCAT
2ba70 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  E .       || eNe
2ba80 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2ba90 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20  MODE_PERSIST .  
2baa0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2bab0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2bac0 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  OFF.       || eN
2bad0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2bae0 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20  LMODE_MEMORY.   
2baf0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2bb00 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2bb10 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  AL.       || eNe
2bb20 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2bb30 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a  MODE_QUERY.  );.
2bb40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2bb50 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2bb60 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20 70 42  db->nDb );..  pB
2bb70 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
2bb80 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67  >p1].pBt;.  pPag
2bb90 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
2bba0 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65  ePager(pBt);.  e
2bbb0 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67  Old = sqlite3Pag
2bbc0 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erGetJournalMode
2bbd0 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20  (pPager);.  if( 
2bbe0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2bbf0 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20  NALMODE_QUERY ) 
2bc00 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69  eNew = eOld;.  i
2bc10 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72  f( !sqlite3Pager
2bc20 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61  OkToChangeJourna
2bc30 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20  lMode(pPager) ) 
2bc40 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69  eNew = eOld;..#i
2bc50 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2bc60 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d  T_WAL.  zFilenam
2bc70 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
2bc80 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 29  Filename(pPager)
2bc90 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61  ;..  /* Do not a
2bca0 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f  llow a transitio
2bcb0 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  n to journal_mod
2bcc0 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61  e=WAL for a data
2bcd0 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d  base.  ** in tem
2bce0 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f  porary storage o
2bcf0 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65  r if the VFS doe
2bd00 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68  s not support sh
2bd10 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a  ared memory .  *
2bd20 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  /.  if( eNew==PA
2bd30 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2bd40 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74  WAL.   && (sqlit
2bd50 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65  e3Strlen30(zFile
2bd60 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20  name)==0        
2bd70 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20     /* Temp file 
2bd80 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71  */.       || !sq
2bd90 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75 70  lite3PagerWalSup
2bda0 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29 20  ported(pPager)) 
2bdb0 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d    /* No shared-m
2bdc0 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f  emory support */
2bdd0 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d  .  ){.    eNew =
2bde0 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66   eOld;.  }..  if
2bdf0 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20  ( (eNew!=eOld). 
2be00 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45    && (eOld==PAGE
2be10 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2be20 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52  L || eNew==PAGER
2be30 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2be40 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21  ).  ){.    if( !
2be50 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c  db->autoCommit |
2be60 7c 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  | db->activeVdbe
2be70 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 20 20 72  Cnt>1 ){.      r
2be80 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
2be90 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
2bea0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2beb0 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20  rMsg, db, .     
2bec0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61       "cannot cha
2bed0 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20  nge %s wal mode 
2bee0 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
2bef0 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20  ansaction",.    
2bf00 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47        (eNew==PAG
2bf10 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2bf20 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f  AL ? "into" : "o
2bf30 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b  ut of").      );
2bf40 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
2bf50 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20    }else{. .     
2bf60 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52   if( eOld==PAGER
2bf70 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2bf80 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
2bf90 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f  f leaving WAL mo
2bfa0 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f  de, close the lo
2bfb0 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65  g file. If succe
2bfc0 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a  ssful, the call.
2bfd0 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61          ** to Pa
2bfe0 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68  gerCloseWal() ch
2bff0 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65  eckpoints and de
2c000 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65 2d  letes the write-
2c010 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20  ahead-log .     
2c020 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45     ** file. An E
2c030 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61  XCLUSIVE lock ma
2c040 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20  y still be held 
2c050 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
2c060 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a  file .        **
2c070 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73 73   after a success
2c080 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20  ful return. .   
2c090 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
2c0a0 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  rc = sqlite3Page
2c0b0 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72  rCloseWal(pPager
2c0c0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
2c0d0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2c0e0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
2c0f0 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
2c100 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65  Mode(pPager, eNe
2c110 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  w);.        }.  
2c120 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f      }else if( eO
2c130 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
2c140 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a  LMODE_MEMORY ){.
2c150 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f          /* Canno
2c160 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72  t transition dir
2c170 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52  ectly from MEMOR
2c180 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d  Y to WAL.  Use m
2c190 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20  ode OFF.        
2c1a0 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65  ** as an interme
2c1b0 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20  diate */.       
2c1c0 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
2c1d0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
2c1e0 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  er, PAGER_JOURNA
2c1f0 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20  LMODE_OFF);.    
2c200 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
2c210 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69  Open a transacti
2c220 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  on on the databa
2c230 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c  se file. Regardl
2c240 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e  ess of the journ
2c250 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65  al.      ** mode
2c260 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  , this transacti
2c270 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20 61  on always uses a
2c280 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
2c290 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
2c2a0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
2c2b0 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
2c2c0 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  pBt)==0 );.     
2c2d0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2c2e0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
2c2f0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
2c300 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28  etVersion(pBt, (
2c310 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2c320 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20  NALMODE_WAL ? 2 
2c330 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20  : 1));.      }. 
2c340 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20     }.  }.#endif 
2c350 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /* ifndef SQLITE
2c360 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20  _OMIT_WAL */..  
2c370 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65 4e  if( rc ){.    eN
2c380 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20  ew = eOld;.  }. 
2c390 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50   eNew = sqlite3P
2c3a0 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
2c3b0 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
2c3c0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
2c3d0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
2c3e0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2c3f0 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
2c400 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
2c410 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c  >z = (char *)sql
2c420 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
2c430 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75  ame(eNew);.  pOu
2c440 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74  t->n = sqlite3St
2c450 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b  rlen30(pOut->z);
2c460 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
2c470 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71  QLITE_UTF8;.  sq
2c480 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2c490 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e  ncoding(pOut, en
2c4a0 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b  coding);.  break
2c4b0 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ;.};.#endif /* S
2c4c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
2c4d0 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e  A */..#if !defin
2c4e0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
2c4f0 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e  ACUUM) && !defin
2c500 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2c510 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65  TTACH)./* Opcode
2c520 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a  : Vacuum * * * *
2c530 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20   *.**.** Vacuum 
2c540 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
2c550 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ase.  This opcod
2c560 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68  e will cause oth
2c570 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61  er virtual.** ma
2c580 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65  chines to be cre
2c590 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49  ated and run.  I
2c5a0 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c  t may not be cal
2c5b0 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a  led from within.
2c5c0 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** a transaction
2c5d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63  ..*/.case OP_Vac
2c5e0 75 75 6d 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71  uum: {.  rc = sq
2c5f0 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26  lite3RunVacuum(&
2c600 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b  p->zErrMsg, db);
2c610 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2c620 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  if..#if !defined
2c630 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54  (SQLITE_OMIT_AUT
2c640 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f  OVACUUM)./* Opco
2c650 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50  de: IncrVacuum P
2c660 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2c670 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c   Perform a singl
2c680 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e  e step of the in
2c690 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d  cremental vacuum
2c6a0 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a   procedure on.**
2c6b0 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73 65   the P1 database
2c6c0 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d 20  . If the vacuum 
2c6d0 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75  has finished, ju
2c6e0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
2c6f0 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69  n.** P2. Otherwi
2c700 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
2c710 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2c720 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2c730 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a  e OP_IncrVacuum:
2c740 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2c750 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  p */.  Btree *pB
2c760 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t;..  assert( pO
2c770 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2c780 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
2c790 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
2c7a0 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
2c7b0 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29  ask)1)<<pOp->p1)
2c7c0 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  )!=0 );.  pBt = 
2c7d0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2c7e0 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .pBt;.  rc = sql
2c7f0 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63  ite3BtreeIncrVac
2c800 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20  uum(pBt);.  if( 
2c810 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
2c820 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
2c830 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20  >p2 - 1;.    rc 
2c840 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  = SQLITE_OK;.  }
2c850 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2c860 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  if../* Opcode: E
2c870 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a  xpire P1 * * * *
2c880 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65  .**.** Cause pre
2c890 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65  compiled stateme
2c8a0 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78  nts to become ex
2c8b0 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65  pired. An expire
2c8c0 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66  d statement.** f
2c8d0 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72  ails with an err
2c8e0 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54  or code of SQLIT
2c8f0 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20 69  E_SCHEMA if it i
2c900 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64 20  s ever executed 
2c910 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33  .** (via sqlite3
2c920 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a  _step())..** .**
2c930 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
2c940 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
2c950 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
2c960 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
2c970 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
2c980 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
2c990 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
2c9a0 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74  tement is affect
2c9b0 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ed. .*/.case OP_
2c9c0 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20  Expire: {.  if( 
2c9d0 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  !pOp->p1 ){.    
2c9e0 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
2c9f0 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
2ca00 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  db);.  }else{.  
2ca10 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
2ca20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2ca30 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ca40 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
2ca50 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61  HE./* Opcode: Ta
2ca60 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33  bleLock P1 P2 P3
2ca70 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61   P4 *.**.** Obta
2ca80 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70  in a lock on a p
2ca90 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e  articular table.
2caa0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
2cab0 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  n is only used w
2cac0 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65  hen.** the share
2cad0 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20  d-cache feature 
2cae0 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a  is enabled. .**.
2caf0 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
2cb00 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
2cb10 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  se in sqlite3.aD
2cb20 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62  b[] of the datab
2cb30 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20  ase.** on which 
2cb40 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  the lock is acqu
2cb50 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63  ired.  A readloc
2cb60 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66  k is obtained if
2cb70 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77   P3==0 or.** a w
2cb80 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d  rite lock if P3=
2cb90 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e  =1..**.** P2 con
2cba0 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70  tains the root-p
2cbb0 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
2cbc0 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20   to lock..**.** 
2cbd0 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f  P4 contains a po
2cbe0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d  inter to the nam
2cbf0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
2cc00 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69  eing locked. Thi
2cc10 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65  s is only.** use
2cc20 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e  d to generate an
2cc30 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
2cc40 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f  f the lock canno
2cc50 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a  t be obtained..*
2cc60 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c  /.case OP_TableL
2cc70 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72  ock: {.  u8 isWr
2cc80 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f  iteLock = (u8)pO
2cc90 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57  p->p3;.  if( isW
2cca0 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28  riteLock || 0==(
2ccb0 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
2ccc0 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
2ccd0 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20  ) ){.    int p1 
2cce0 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20  = pOp->p1; .    
2ccf0 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26  assert( p1>=0 &&
2cd00 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20   p1<db->nDb );. 
2cd10 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62     assert( (p->b
2cd20 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
2cd30 62 4d 61 73 6b 29 31 29 3c 3c 70 31 29 29 21 3d  bMask)1)<<p1))!=
2cd40 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
2cd50 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20   isWriteLock==0 
2cd60 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  || isWriteLock==
2cd70 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  1 );.    rc = sq
2cd80 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61  lite3BtreeLockTa
2cd90 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ble(db->aDb[p1].
2cda0 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73  pBt, pOp->p2, is
2cdb0 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20  WriteLock);.    
2cdc0 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53  if( (rc&0xFF)==S
2cdd0 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a  QLITE_LOCKED ){.
2cde0 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2cdf0 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b   *z = pOp->p4.z;
2ce00 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
2ce10 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2ce20 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61  Msg, db, "databa
2ce30 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b  se table is lock
2ce40 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20  ed: %s", z);.   
2ce50 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
2ce60 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2ce70 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
2ce80 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ACHE */..#ifndef
2ce90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2cea0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2ceb0 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20  ode: VBegin * * 
2cec0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2ced0 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72  may be a pointer
2cee0 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76   to an sqlite3_v
2cef0 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49  tab structure. I
2cf00 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a  f so, call the .
2cf10 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64  ** xBegin method
2cf20 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
2cf30 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65  .**.** Also, whe
2cf40 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69  ther or not P4 i
2cf50 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61  s set, check tha
2cf60 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65  t this is not be
2cf70 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a  ing called from.
2cf80 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c  ** within a call
2cf90 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61  back to a virtua
2cfa0 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20  l table xSync() 
2cfb0 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73  method. If it is
2cfc0 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63  , the error.** c
2cfd0 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20  ode will be set 
2cfe0 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  to SQLITE_LOCKED
2cff0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65  ..*/.case OP_VBe
2d000 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20  gin: {.  VTable 
2d010 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20  *pVTab;.  pVTab 
2d020 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b  = pOp->p4.pVtab;
2d030 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2d040 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54  tabBegin(db, pVT
2d050 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62  ab);.  if( pVTab
2d060 20 29 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72   ) importVtabErr
2d070 4d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56  Msg(p, pVTab->pV
2d080 74 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  tab);.  break;.}
2d090 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2d0a0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2d0b0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2d0c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2d0d0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2d0e0 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a  de: VCreate P1 *
2d0f0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2d100 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
2d110 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2d120 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2d130 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65  Call the xCreate
2d140 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74   method.** for t
2d150 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
2d160 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b  se OP_VCreate: {
2d170 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2d180 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62  tabCallCreate(db
2d190 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2d1a0 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  p4.z, &p->zErrMs
2d1b0 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
2d1c0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2d1d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2d1e0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2d1f0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2d200 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2d210 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
2d220 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2d230 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
2d240 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
2d250 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2d260 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
2d270 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
2d280 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
2d290 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
2d2a0 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  {.  p->inVtabMet
2d2b0 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20  hod = 2;.  rc = 
2d2c0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
2d2d0 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e  estroy(db, pOp->
2d2e0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2d2f0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2d300 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  d = 0;.  break;.
2d310 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2d320 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2d330 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2d340 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2d350 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2d360 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20  ode: VOpen P1 * 
2d370 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2d380 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2d390 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2d3a0 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
2d3b0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
2d3c0 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  e..** P1 is a cu
2d3d0 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68  rsor number.  Th
2d3e0 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20  is opcode opens 
2d3f0 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  a cursor to the 
2d400 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
2d410 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
2d420 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a   cursor in P1..*
2d430 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a  /.case OP_VOpen:
2d440 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
2d450 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  *pCur;.  sqlite3
2d460 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
2d470 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c  tabCursor;.  sql
2d480 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2d490 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ;.  sqlite3_modu
2d4a0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
2d4b0 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61  pCur = 0;.  pVta
2d4c0 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70  bCursor = 0;.  p
2d4d0 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
2d4e0 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
2d4f0 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65  Module = (sqlite
2d500 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62  3_module *)pVtab
2d510 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
2d520 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f  ert(pVtab && pMo
2d530 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70 4d  dule);.  rc = pM
2d540 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74  odule->xOpen(pVt
2d550 61 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72  ab, &pVtabCursor
2d560 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62 45  );.  importVtabE
2d570 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrMsg(p, pVtab);
2d580 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
2d590 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49  ==rc ){.    /* I
2d5a0 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65  nitialize sqlite
2d5b0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61  3_vtab_cursor ba
2d5c0 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20  se class */.    
2d5d0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
2d5e0 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20  ab = pVtab;..   
2d5f0 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73 65 20 76   /* Initialise v
2d600 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63  dbe cursor objec
2d610 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20  t */.    pCur = 
2d620 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
2d630 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31  , pOp->p1, 0, -1
2d640 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43  , 0);.    if( pC
2d650 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72  ur ){.      pCur
2d660 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20  ->pVtabCursor = 
2d670 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20  pVtabCursor;.   
2d680 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c 65     pCur->pModule
2d690 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e   = pVtabCursor->
2d6a0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
2d6b0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2d6c0 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
2d6d0 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f  d = 1;.      pMo
2d6e0 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74  dule->xClose(pVt
2d6f0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  abCursor);.    }
2d700 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2d710 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2d720 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2d730 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2d740 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2d750 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2d760 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50 32  e: VFilter P1 P2
2d770 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50   P3 P4 *.**.** P
2d780 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70  1 is a cursor op
2d790 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e  ened using VOpen
2d7a0 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72  .  P2 is an addr
2d7b0 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69  ess to jump to i
2d7c0 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65  f.** the filtere
2d7d0 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20  d result set is 
2d7e0 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  empty..**.** P4 
2d7f0 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f  is either NULL o
2d800 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  r a string that 
2d810 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  was generated by
2d820 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a   the xBestIndex.
2d830 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  ** method of the
2d840 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e   module.  The in
2d850 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
2d860 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73  the P4 string is
2d870 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20   left.** to the 
2d880 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
2d890 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ation..**.** Thi
2d8a0 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2d8b0 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
2d8c0 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75  hod on the virtu
2d8d0 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69  al table specifi
2d8e0 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68  ed.** by P1.  Th
2d8f0 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20  e integer query 
2d900 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74  plan parameter t
2d910 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f  o xFilter is sto
2d920 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a  red in register.
2d930 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20  ** P3. Register 
2d940 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20  P3+1 stores the 
2d950 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74  argc parameter t
2d960 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74  o be passed to t
2d970 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65  he.** xFilter me
2d980 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20  thod. Registers 
2d990 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20  P3+2..P3+1+argc 
2d9a0 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20  are the argc.** 
2d9b0 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d  additional param
2d9c0 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20  eters which are 
2d9d0 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69  passed to.** xFi
2d9e0 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65  lter as argv. Re
2d9f0 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f  gister P3+2 beco
2da00 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e  mes argv[0] when
2da10 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74   passed to xFilt
2da20 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70  er..**.** A jump
2da30 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69   is made to P2 i
2da40 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
2da50 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67   after filtering
2da60 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e   would be empty.
2da70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c  .*/.case OP_VFil
2da80 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70  ter: {   /* jump
2da90 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a   */.  int nArg;.
2daa0 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20    int iQuery;.  
2dab0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2dac0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
2dad0 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20   Mem *pQuery;.  
2dae0 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71  Mem *pArgc;.  sq
2daf0 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
2db00 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r *pVtabCursor;.
2db10 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2db20 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72  pVtab;.  VdbeCur
2db30 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74  sor *pCur;.  int
2db40 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20   res;.  int i;. 
2db50 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20   Mem **apArg;.. 
2db60 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b   pQuery = &aMem[
2db70 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67  pOp->p3];.  pArg
2db80 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a  c = &pQuery[1];.
2db90 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
2dba0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2dbb0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2dbc0 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45  (pQuery) );.  RE
2dbd0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
2dbe0 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20  ->p3, pQuery);. 
2dbf0 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
2dc00 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
2dc10 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43  pVtabCursor = pC
2dc20 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b  ur->pVtabCursor;
2dc30 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61 62  .  pVtab = pVtab
2dc40 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
2dc50 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
2dc60 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a  ->pModule;..  /*
2dc70 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20   Grab the index 
2dc80 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20  number and argc 
2dc90 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
2dca0 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d  assert( (pQuery-
2dcb0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21  >flags&MEM_Int)!
2dcc0 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61  =0 && pArgc->fla
2dcd0 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
2dce0 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72   nArg = (int)pAr
2dcf0 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72  gc->u.i;.  iQuer
2dd00 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d  y = (int)pQuery-
2dd10 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  >u.i;..  /* Invo
2dd20 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  ke the xFilter m
2dd30 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20  ethod */.  {.   
2dd40 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70   res = 0;.    ap
2dd50 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
2dd60 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69      for(i = 0; i
2dd70 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
2dd80 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70     apArg[i] = &p
2dd90 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20  Argc[i+1];.     
2dda0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2ddb0 74 6f 72 65 54 79 70 65 28 61 70 41 72 67 5b 69  toreType(apArg[i
2ddc0 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  ]);.    }..    p
2ddd0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
2dde0 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   1;.    rc = pMo
2ddf0 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56  dule->xFilter(pV
2de00 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72  tabCursor, iQuer
2de10 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41  y, pOp->p4.z, nA
2de20 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20  rg, apArg);.    
2de30 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2de40 3d 20 30 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56  = 0;.    importV
2de50 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74  tabErrMsg(p, pVt
2de60 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  ab);.    if( rc=
2de70 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2de80 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
2de90 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72  e->xEof(pVtabCur
2dea0 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  sor);.    }..   
2deb0 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
2dec0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2ded0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
2dee0 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
2def0 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  0;..  break;.}.#
2df00 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2df10 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2df20 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2df30 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2df40 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2df50 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  : VColumn P1 P2 
2df60 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f  P3 * *.**.** Sto
2df70 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  re the value of 
2df80 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
2df90 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f   of.** the row o
2dfa0 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61  f the virtual-ta
2dfb0 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a  ble that the .**
2dfc0 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f   P1 cursor is po
2dfd0 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72  inting to into r
2dfe0 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63  egister P3..*/.c
2dff0 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20  ase OP_VColumn: 
2e000 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
2e010 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
2e020 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2e030 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
2e040 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65  *pDest;.  sqlite
2e050 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65  3_context sConte
2e060 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f  xt;..  VdbeCurso
2e070 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  r *pCur = p->apC
2e080 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2e090 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
2e0a0 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  abCursor );.  as
2e0b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
2e0c0 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
2e0d0 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  Mem );.  pDest =
2e0e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2e0f0 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
2e100 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20  nge(p, pDest);. 
2e110 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
2e120 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ow ){.    sqlite
2e130 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
2e140 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61  pDest);.    brea
2e150 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
2e160 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2e170 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  or->pVtab;.  pMo
2e180 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
2e190 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
2e1a0 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
2e1b0 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73  n );.  memset(&s
2e1c0 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65  Context, 0, size
2e1d0 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a  of(sContext));..
2e1e0 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20    /* The output 
2e1f0 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79  cell may already
2e200 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61   have a buffer a
2e210 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20  llocated. Move. 
2e220 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20   ** the current 
2e230 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e  contents to sCon
2e240 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61 73  text.s so in cas
2e250 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74  e the user-funct
2e260 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73  ion .  ** can us
2e270 65 20 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c  e the already al
2e280 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20 69  located buffer i
2e290 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61  nstead of alloca
2e2a0 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77  ting a .  ** new
2e2b0 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c   one..  */.  sql
2e2c0 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
2e2d0 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65  &sContext.s, pDe
2e2e0 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  st);.  MemSetTyp
2e2f0 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74 2e  eFlag(&sContext.
2e300 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20  s, MEM_Null);.. 
2e310 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2e320 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74  Column(pCur->pVt
2e330 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74  abCursor, &sCont
2e340 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  ext, pOp->p2);. 
2e350 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
2e360 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
2e370 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72  f( sContext.isEr
2e380 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ror ){.    rc = 
2e390 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72  sContext.isError
2e3a0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
2e3b0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
2e3c0 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74  he function to t
2e3d0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 2e 20  he P3 register. 
2e3e0 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20  We.  ** do this 
2e3f0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
2e400 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20  ether or not an 
2e410 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74  error occurred t
2e420 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a  o ensure any.  *
2e430 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61  * dynamic alloca
2e440 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74  tion in sContext
2e450 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74  .s (a Mem struct
2e460 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a  ) is  released..
2e470 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64    */.  sqlite3Vd
2e480 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2e490 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e  (&sContext.s, en
2e4a0 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74  coding);.  sqlit
2e4b0 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44  e3VdbeMemMove(pD
2e4c0 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73  est, &sContext.s
2e4d0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
2e4e0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
2e4f0 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  st);.  UPDATE_MA
2e500 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
2e510 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  );..  if( sqlite
2e520 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
2e530 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74  Dest) ){.    got
2e540 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
2e550 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2e560 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2e570 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2e580 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e590 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2e5a0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65  E./* Opcode: VNe
2e5b0 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  xt P1 P2 * * *.*
2e5c0 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72  *.** Advance vir
2e5d0 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f  tual table P1 to
2e5e0 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e   the next row in
2e5f0 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
2e600 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69  and.** jump to i
2e610 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20  nstruction P2.  
2e620 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75  Or, if the virtu
2e630 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61  al table has rea
2e640 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20  ched.** the end 
2e650 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  of its result se
2e660 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
2e670 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2e680 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2e690 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20  .case OP_VNext: 
2e6a0 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
2e6b0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2e6c0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
2e6d0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2e6e0 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73  odule;.  int res
2e6f0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
2e700 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30  pCur;..  res = 0
2e710 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
2e720 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2e730 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
2e740 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  tabCursor );.  i
2e750 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  f( pCur->nullRow
2e760 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
2e770 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
2e780 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  r->pVtabCursor->
2e790 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2e7a0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2e7b0 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
2e7c0 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a  dule->xNext );..
2e7d0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
2e7e0 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f  xNext() method o
2e7f0 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68  f the module. Th
2e800 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f  ere is no way fo
2e810 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72  r the.  ** under
2e820 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61  lying implementa
2e830 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61  tion to return a
2e840 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f  n error if one o
2e850 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a  ccurs during.  *
2e860 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65  * xNext(). Inste
2e870 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20  ad, if an error 
2e880 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20  occurs, true is 
2e890 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61  returned (indica
2e8a0 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20  ting that .  ** 
2e8b0 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c  data is availabl
2e8c0 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72  e) and the error
2e8d0 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77   code returned w
2e8e0 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20  hen xColumn or. 
2e8f0 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d   ** some other m
2e900 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e  ethod is next in
2e910 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76  voked on the sav
2e920 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
2e930 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 70  cursor..  */.  p
2e940 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
2e950 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75   1;.  rc = pModu
2e960 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e  le->xNext(pCur->
2e970 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2e980 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2e990 3d 20 30 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61  = 0;.  importVta
2e9a0 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62  bErrMsg(p, pVtab
2e9b0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2e9c0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
2e9d0 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
2e9e0 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  f(pCur->pVtabCur
2e9f0 73 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  sor);.  }..  if(
2ea00 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20   !res ){.    /* 
2ea10 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61  If there is data
2ea20 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  , jump to P2 */.
2ea30 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2ea40 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2ea50 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2ea60 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2ea70 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2ea80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ea90 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2eaa0 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20  Opcode: VRename 
2eab0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2eac0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
2ead0 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
2eae0 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
2eaf0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
2eb00 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20  ucture..** This 
2eb10 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
2eb20 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
2eb30 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
2eb40 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   The value.** in
2eb50 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
2eb60 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e  passed as the zN
2eb70 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ame argument to 
2eb80 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  the xRename meth
2eb90 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  od..*/.case OP_V
2eba0 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69  Rename: {.  sqli
2ebb0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2ebc0 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a  .  Mem *pName;..
2ebd0 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
2ebe0 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
2ebf0 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b    pName = &aMem[
2ec00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2ec10 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  rt( pVtab->pModu
2ec20 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20  le->xRename );. 
2ec30 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2ec40 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20  lid(pName) );.  
2ec50 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
2ec60 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a  Op->p1, pName);.
2ec70 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d    assert( pName-
2ec80 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
2ec90 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
2eca0 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
2ecb0 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73  TE_UTF8 );.  tes
2ecc0 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
2ecd0 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
2ece0 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  E );.  testcase(
2ecf0 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
2ed00 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20  ITE_UTF16LE );. 
2ed10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2ed20 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2ed30 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54  pName, SQLITE_UT
2ed40 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  F8);.  if( rc==S
2ed50 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2ed60 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  rc = pVtab->pMod
2ed70 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74  ule->xRename(pVt
2ed80 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20  ab, pName->z);. 
2ed90 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72     importVtabErr
2eda0 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  Msg(p, pVtab);. 
2edb0 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
2edc0 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
2edd0 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
2ede0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2edf0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2ee00 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31  code: VUpdate P1
2ee10 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
2ee20 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
2ee30 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
2ee40 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
2ee50 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
2ee60 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20  ucture..** This 
2ee70 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
2ee80 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
2ee90 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e   xUpdate method.
2eea0 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72   P2 values.** ar
2eeb0 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d  e contiguous mem
2eec0 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69  ory cells starti
2eed0 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73 73  ng at P3 to pass
2eee0 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65 20   to the xUpdate 
2eef0 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20  .** invocation. 
2ef00 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  The value in reg
2ef10 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20  ister (P3+P2-1) 
2ef20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
2ef30 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d  he .** p2th elem
2ef40 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76 20  ent of the argv 
2ef50 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f 20  array passed to 
2ef60 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54  xUpdate..**.** T
2ef70 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  he xUpdate metho
2ef80 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45  d will do a DELE
2ef90 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20  TE or an INSERT 
2efa0 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20  or both..** The 
2efb0 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20  argv[0] element 
2efc0 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e  (which correspon
2efd0 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  ds to memory cel
2efe0 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20  l P3).** is the 
2eff0 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74  rowid of a row t
2f000 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72  o delete.  If ar
2f010 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68  gv[0] is NULL th
2f020 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69  en no .** deleti
2f030 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20  on occurs.  The 
2f040 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20  argv[1] element 
2f050 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
2f060 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e  the new .** row.
2f070 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55    This can be NU
2f080 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20 76  LL to have the v
2f090 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c  irtual table sel
2f0a0 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20  ect the new .** 
2f0b0 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66  rowid for itself
2f0c0 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65 6e  .  The subsequen
2f0d0 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68  t elements in th
2f0e0 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20  e array are .** 
2f0f0 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f  the values of co
2f100 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77  lumns in the new
2f110 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50   row..**.** If P
2f120 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73  2==1 then no ins
2f130 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64  ert is performed
2f140 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68  .  argv[0] is th
2f150 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20  e rowid of.** a 
2f160 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a  row to delete..*
2f170 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f  *.** P1 is a boo
2f180 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74  lean flag. If it
2f190 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65 20   is set to true 
2f1a0 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65 20  and the xUpdate 
2f1b0 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65  call.** is succe
2f1c0 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20  ssful, then the 
2f1d0 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  value returned b
2f1e0 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  y sqlite3_last_i
2f1f0 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a  nsert_rowid() .*
2f200 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  * is set to the 
2f210 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77  value of the row
2f220 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a  id for the row j
2f230 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f  ust inserted..*/
2f240 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65  .case OP_VUpdate
2f250 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
2f260 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c  ab *pVtab;.  sql
2f270 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
2f280 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67  dule;.  int nArg
2f290 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  ;.  int i;.  sql
2f2a0 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b  ite_int64 rowid;
2f2b0 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
2f2c0 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73    Mem *pX;..  as
2f2d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31  sert( pOp->p2==1
2f2e0 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e          || pOp->
2f2f0 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c  p5==OE_Fail   ||
2f300 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c   pOp->p5==OE_Rol
2f310 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c  lback .       ||
2f320 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f   pOp->p5==OE_Abo
2f330 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  rt || pOp->p5==O
2f340 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d  E_Ignore || pOp-
2f350 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a  >p5==OE_Replace.
2f360 20 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70    );.  pVtab = p
2f370 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
2f380 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2f390 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
2f3a0 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
2f3b0 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d  e;.  nArg = pOp-
2f3c0 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
2f3d0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56  Op->p4type==P4_V
2f3e0 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57  TAB );.  if( ALW
2f3f0 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  AYS(pModule->xUp
2f400 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20  date) ){.    u8 
2f410 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
2f420 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
2f430 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d  ict;.    apArg =
2f440 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70   p->apArg;.    p
2f450 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  X = &aMem[pOp->p
2f460 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  3];.    for(i=0;
2f470 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
2f480 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
2f490 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20  IsValid(pX) );. 
2f4a0 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
2f4b0 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20  hange(p, pX);.  
2f4c0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2f4d0 65 6d 53 74 6f 72 65 54 79 70 65 28 70 58 29 3b  emStoreType(pX);
2f4e0 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
2f4f0 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b  = pX;.      pX++
2f500 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e  ;.    }.    db->
2f510 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
2f520 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63   pOp->p5;.    rc
2f530 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64   = pModule->xUpd
2f540 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c  ate(pVtab, nArg,
2f550 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b   apArg, &rowid);
2f560 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43  .    db->vtabOnC
2f570 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e  onflict = vtabOn
2f580 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 69 6d  Conflict;.    im
2f590 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70  portVtabErrMsg(p
2f5a0 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
2f5b0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2f5c0 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  && pOp->p1 ){.  
2f5d0 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67      assert( nArg
2f5e0 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26  >1 && apArg[0] &
2f5f0 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61  & (apArg[0]->fla
2f600 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a  gs&MEM_Null) );.
2f610 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f        db->lastRo
2f620 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20  wid = lastRowid 
2f630 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
2f640 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2f650 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20  E_CONSTRAINT && 
2f660 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62  pOp->p4.pVtab->b
2f670 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20  Constraint ){.  
2f680 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d      if( pOp->p5=
2f690 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
2f6a0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
2f6b0 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  E_OK;.      }els
2f6c0 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72  e{.        p->er
2f6d0 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f  rorAction = ((pO
2f6e0 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63  p->p5==OE_Replac
2f6f0 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20  e) ? OE_Abort : 
2f700 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20  pOp->p5);.      
2f710 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
2f720 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b     p->nChange++;
2f730 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
2f740 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2f750 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2f760 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2f770 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
2f780 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
2f790 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63  /* Opcode: Pagec
2f7a0 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
2f7b0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
2f7c0 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20   current number 
2f7d0 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61  of pages in data
2f7e0 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72  base P1 to memor
2f7f0 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61  y cell P2..*/.ca
2f800 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a  se OP_Pagecount:
2f810 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
2f820 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
2f830 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   */.  pOut->u.i 
2f840 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
2f850 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70  stPage(db->aDb[p
2f860 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20  Op->p1].pBt);.  
2f870 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2f880 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54  ..#ifndef  SQLIT
2f890 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
2f8a0 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GMAS./* Opcode: 
2f8b0 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32 20 50  MaxPgcnt P1 P2 P
2f8c0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20  3 * *.**.** Try 
2f8d0 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69 6d  to set the maxim
2f8e0 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 6f  um page count fo
2f8f0 72 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  r database P1 to
2f900 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 33   the value in P3
2f910 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20  ..** Do not let 
2f920 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
2f930 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f   count fall belo
2f940 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 61  w the current pa
2f950 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20  ge count and.** 
2f960 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68  do not change th
2f970 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
2f980 6f 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33  ount value if P3
2f990 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  ==0..**.** Store
2f9a0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
2f9b0 65 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74 68  e count after th
2f9c0 65 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67 69  e change in regi
2f9d0 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
2f9e0 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20   OP_MaxPgcnt: { 
2f9f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2fa00 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
2fa10 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
2fa20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65 20  newMax;.  Btree 
2fa30 2a 70 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20 64  *pBt;..  pBt = d
2fa40 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
2fa50 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20  pBt;.  newMax = 
2fa60 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  0;.  if( pOp->p3
2fa70 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d   ){.    newMax =
2fa80 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
2fa90 74 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20  tPage(pBt);.    
2faa0 69 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e  if( newMax < (un
2fab0 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29  signed)pOp->p3 )
2fac0 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69 67   newMax = (unsig
2fad0 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  ned)pOp->p3;.  }
2fae0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73  .  pOut->u.i = s
2faf0 71 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50 61  qlite3BtreeMaxPa
2fb00 67 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77  geCount(pBt, new
2fb10 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Max);.  break;.}
2fb20 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
2fb30 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2fb40 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  ACE./* Opcode: T
2fb50 72 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  race * * * P4 *.
2fb60 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67  **.** If tracing
2fb70 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20   is enabled (by 
2fb80 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63  the sqlite3_trac
2fb90 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20  e()) interface, 
2fba0 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d  then.** the UTF-
2fbb0 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  8 string contain
2fbc0 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74  ed in P4 is emit
2fbd0 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65  ted on the trace
2fbe0 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61   callback..*/.ca
2fbf0 73 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a 20  se OP_Trace: {. 
2fc00 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20   char *zTrace;. 
2fc10 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28   char *z;..  if(
2fc20 20 64 62 2d 3e 78 54 72 61 63 65 20 26 26 20 28   db->xTrace && (
2fc30 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
2fc40 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
2fc50 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 20 29  : p->zSql))!=0 )
2fc60 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65  {.    z = sqlite
2fc70 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70  3VdbeExpandSql(p
2fc80 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 64  , zTrace);.    d
2fc90 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54  b->xTrace(db->pT
2fca0 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20  raceArg, z);.   
2fcb0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
2fcc0 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65  b, z);.  }.#ifde
2fcd0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2fce0 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20   if( (db->flags 
2fcf0 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  & SQLITE_SqlTrac
2fd00 65 29 21 3d 30 0a 20 20 20 26 26 20 28 7a 54 72  e)!=0.   && (zTr
2fd10 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
2fd20 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
2fd30 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b  ->zSql))!=0.  ){
2fd40 0a 20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75  .    sqlite3Debu
2fd50 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61  gPrintf("SQL-tra
2fd60 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63  ce: %s\n", zTrac
2fd70 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f  e);.  }.#endif /
2fd80 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
2fd90 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  /.  break;.}.#en
2fda0 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dif.../* Opcode:
2fdb0 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a   Noop * * * * *.
2fdc0 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67  **.** Do nothing
2fdd0 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  .  This instruct
2fde0 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65  ion is often use
2fdf0 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a  ful as a jump.**
2fe00 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f   destination..*/
2fe10 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63  ./*.** The magic
2fe20 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20   Explain opcode 
2fe30 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65  are only inserte
2fe40 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d  d when explain==
2fe50 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74  2 (which.** is t
2fe60 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45  o say when the E
2fe70 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
2fe80 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64  N syntax is used
2fe90 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  .).** This opcod
2fea0 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d  e records inform
2feb0 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f  ation from the o
2fec0 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73  ptimizer.  It is
2fed0 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65   the.** the same
2fee0 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68   as a no-op.  Th
2fef0 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20  is opcodesnever 
2ff00 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61  appears in a rea
2ff10 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f  l VM program..*/
2ff20 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20  .default: {     
2ff30 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20       /* This is 
2ff40 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61  really OP_Noop a
2ff50 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f  nd OP_Explain */
2ff60 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2ff70 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20  opcode==OP_Noop 
2ff80 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2ff90 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20  OP_Explain );.  
2ffa0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a  break;.}../*****
2ffb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ffc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ffd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ffe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2fff0 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20  ********.** The 
30000 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77 69  cases of the swi
30010 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62  tch statement ab
30020 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68  ove this line sh
30030 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65  ould all be inde
30040 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61  nted.** by 6 spa
30050 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65  ces.  But the le
30060 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73  ft-most 6 spaces
30070 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76   have been remov
30080 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68  ed to improve th
30090 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79  e.** readability
300a0 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69  .  From this poi
300b0 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20  nt on down, the 
300c0 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69  normal indentati
300d0 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20  on rules are.** 
300e0 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a  restored..******
300f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30110 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30120 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30130 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a  *******/.    }..
30140 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
30150 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ILE.    {.      
30160 75 36 34 20 65 6c 61 70 73 65 64 20 3d 20 73 71  u64 elapsed = sq
30170 6c 69 74 65 33 48 77 74 69 6d 65 28 29 20 2d 20  lite3Hwtime() - 
30180 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 70  start;.      pOp
30190 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6c 61 70  ->cycles += elap
301a0 73 65 64 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e  sed;.      pOp->
301b0 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a 20 20 20  cnt++;.#if 0.   
301c0 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64       fprintf(std
301d0 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20 22 2c 20  out, "%10llu ", 
301e0 65 6c 61 70 73 65 64 29 3b 0a 20 20 20 20 20 20  elapsed);.      
301f0 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
30200 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 6f 72 69  ntOp(stdout, ori
30210 67 50 63 2c 20 26 61 4f 70 5b 6f 72 69 67 50 63  gPc, &aOp[origPc
30220 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d  ]);.#endif.    }
30230 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
30240 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
30250 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20  de adds nothing 
30260 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75  to the actual fu
30270 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20  nctionality.    
30280 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  ** of the progra
30290 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68  m.  It is only h
302a0 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ere for testing 
302b0 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20  and debugging.. 
302c0 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68     ** On the oth
302d0 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73  er hand, it does
302e0 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73   burn CPU cycles
302f0 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f   every time thro
30300 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65  ugh.    ** the e
30310 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20  valuator loop.  
30320 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20  So we can leave 
30330 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42  it out when NDEB
30340 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
30350 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44     */.#ifndef ND
30360 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28  EBUG.    assert(
30370 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d   pc>=-1 && pc<p-
30380 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20  >nOp );..#ifdef 
30390 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
303a0 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b   if( p->trace ){
303b0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 30  .      if( rc!=0
303c0 20 29 20 66 70 72 69 6e 74 66 28 70 2d 3e 74 72   ) fprintf(p->tr
303d0 61 63 65 2c 22 72 63 3d 25 64 5c 6e 22 2c 72 63  ace,"rc=%d\n",rc
303e0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  );.      if( pOp
303f0 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46  ->opflags & (OPF
30400 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41  LG_OUT2_PRERELEA
30410 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29  SE|OPFLG_OUT2) )
30420 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74  {.        regist
30430 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
30440 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  , pOp->p2, &aMem
30450 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
30460 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f    }.      if( pO
30470 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
30480 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20  LG_OUT3 ){.     
30490 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
304a0 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e  (p->trace, pOp->
304b0 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p3, &aMem[pOp->p
304c0 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3]);.      }.   
304d0 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51   }.#endif  /* SQ
304e0 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65  LITE_DEBUG */.#e
304f0 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20  ndif  /* NDEBUG 
30500 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65  */.  }  /* The e
30510 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b  nd of the for(;;
30520 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73  ) loop the loops
30530 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73   through opcodes
30540 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20   */..  /* If we 
30550 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
30560 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
30570 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e  execution is fin
30580 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20  ished with.  ** 
30590 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65  an error of some
305a0 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65   kind..  */.vdbe
305b0 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61  _error_halt:.  a
305c0 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70  ssert( rc );.  p
305d0 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73  ->rc = rc;.  tes
305e0 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c  tcase( sqlite3Gl
305f0 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21  obalConfig.xLog!
30600 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  =0 );.  sqlite3_
30610 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65  log(rc, "stateme
30620 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a  nt aborts at %d:
30630 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20   [%s] %s", .    
30640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
30650 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a  c, p->zSql, p->z
30660 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74  ErrMsg);.  sqlit
30670 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
30680 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
30690 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62  IOERR_NOMEM ) db
306a0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
306b0 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
306c0 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  E_ERROR;.  if( r
306d0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
306e0 74 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  t>0 ){.    sqlit
306f0 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
30700 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74 53  chema(db, resetS
30710 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b  chemaOnFault-1);
30720 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20  .  }..  /* This 
30730 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20  is the only way 
30740 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63  out of this proc
30750 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65 20  edure.  We have 
30760 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20  to.  ** release 
30770 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62  the mutexes on b
30780 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65 20  trees that were 
30790 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65 0a  acquired at the.
307a0 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62    ** top. */.vdb
307b0 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e  e_return:.  db->
307c0 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
307d0 52 6f 77 69 64 3b 0a 20 20 73 71 6c 69 74 65 33  Rowid;.  sqlite3
307e0 56 64 62 65 4c 65 61 76 65 28 70 29 3b 0a 20 20  VdbeLeave(p);.  
307f0 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a  return rc;..  /*
30800 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
30810 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
30820 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51  b larger than SQ
30830 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a  LITE_MAX_LENGTH.
30840 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65    ** is encounte
30850 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69  red..  */.too_bi
30860 67 3a 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  g:.  sqlite3SetS
30870 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
30880 67 2c 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f  g, db, "string o
30890 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29  r blob too big")
308a0 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
308b0 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76  TOOBIG;.  goto v
308c0 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
308d0 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
308e0 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  re if a malloc()
308f0 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f   fails..  */.no_
30900 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f  mem:.  db->mallo
30910 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73  cFailed = 1;.  s
30920 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
30930 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
30940 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22   "out of memory"
30950 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
30960 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76  _NOMEM;.  goto v
30970 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
30980 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
30990 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72  re for any other
309a0 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65   kind of fatal e
309b0 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20  rror.  The "rc" 
309c0 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68  variable.  ** sh
309d0 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72  ould hold the er
309e0 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f  ror number..  */
309f0 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72  .abort_due_to_er
30a00 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70  ror:.  assert( p
30a10 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a  ->zErrMsg==0 );.
30a20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
30a30 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51  Failed ) rc = SQ
30a40 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66  LITE_NOMEM;.  if
30a50 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc!=SQLITE_IOE
30a60 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  RR_NOMEM ){.    
30a70 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
30a80 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
30a90 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45  , "%s", sqlite3E
30aa0 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a  rrStr(rc));.  }.
30ab0 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
30ac0 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
30ad0 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 74 68  mp to here if th
30ae0 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  e sqlite3_interr
30af0 75 70 74 28 29 20 41 50 49 20 73 65 74 73 20 74  upt() API sets t
30b00 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a  he interrupt.  *
30b10 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f  * flag..  */.abo
30b20 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72  rt_due_to_interr
30b30 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64  upt:.  assert( d
30b40 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
30b50 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51  ted );.  rc = SQ
30b60 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a  LITE_INTERRUPT;.
30b70 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20    p->rc = rc;.  
30b80 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
30b90 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
30ba0 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45  , "%s", sqlite3E
30bb0 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f  rrStr(rc));.  go
30bc0 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
30bd0 6c 74 3b 0a 7d 0a                                lt;.}.