/ Hex Artifact Content
Login

Artifact 45a342e1bf84cab8f6c42effeb97a11c9e58cfe4:


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: 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61 74  is macro evaluat
1040: 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65 69  es to true if ei
1050: 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65 20  ther the update 
1060: 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65 75  hook or the preu
1070: 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61 72  pdate.** hook ar
1080: 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64 61  e enabled for da
1090: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20 44  tabase connect D
10a0: 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  B..*/.#ifdef SQL
10b0: 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
10c0: 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66 69  DATE_HOOK.# defi
10d0: 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  ne HAS_UPDATE_HO
10e0: 4f 4b 28 44 42 29 20 20 20 28 28 44 42 29 2d 3e  OK(DB)   ((DB)->
10f0: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
1100: 63 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74  ck||(DB)->xUpdat
1110: 65 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65  eCallback).#else
1120: 0a 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50  .# define HAS_UP
1130: 44 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 20 28  DATE_HOOK(DB)  (
1140: 28 44 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c  (DB)->xUpdateCal
1150: 6c 62 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f  lback).#endif../
1160: 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c  *.** The next gl
1170: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73  obal variable is
1180: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63   incremented eac
1190: 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f 46 6f  h type the OP_Fo
11a0: 75 6e 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  und opcode.** is
11b0: 20 65 78 65 63 75 74 65 64 2e 20 54 68 69 73 20   executed. This 
11c0: 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20  is used to test 
11d0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
11e0: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a  he foreign key.*
11f0: 2a 20 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c  * operation impl
1200: 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50  emented using OP
1210: 5f 46 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72  _FkIsZero is wor
1220: 6b 69 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61  king. This varia
1230: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
1240: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
1250: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
1260: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
1270: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
1280: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
1290: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
12a0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e  int sqlite3_foun
12b0: 64 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e  d_count = 0;.#en
12c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  dif../*.** Test 
12d0: 61 20 72 65 67 69 73 74 65 72 20 74 6f 20 73 65  a register to se
12e0: 65 20 69 66 20 69 74 20 65 78 63 65 65 64 73 20  e if it exceeds 
12f0: 74 68 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69  the current maxi
1300: 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a  mum blob size..*
1310: 2a 20 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65  * If it does, re
1320: 63 6f 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78  cord the new max
1330: 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a  imum blob size..
1340: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
1350: 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20 21  QLITE_TEST) && !
1360: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1370: 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
1380: 29 0a 23 20 64 65 66 69 6e 65 20 55 50 44 41 54  ).# define UPDAT
1390: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50  E_MAX_BLOBSIZE(P
13a0: 29 20 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62  )  updateMaxBlob
13b0: 73 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23 20  size(P).#else.# 
13c0: 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41  define UPDATE_MA
13d0: 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65  X_BLOBSIZE(P).#e
13e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
13f0: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1400: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1410: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1420: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1430: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1440: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
1450: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
1460: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
1470: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
1480: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
1490: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
14b0: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 29 29  tringify(P,enc))
14c0: 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e   \.     { goto n
14d0: 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  o_mem; }../*.** 
14e0: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  An ephemeral str
14f0: 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69  ing value (signi
1500: 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f  fied by the MEM_
1510: 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74  Ephem flag) cont
1520: 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  ains.** a pointe
1530: 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  r to a dynamical
1540: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72  ly allocated str
1550: 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f  ing where some o
1560: 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69  ther entity.** i
1570: 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
1580: 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  r deallocating t
1590: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63  hat string.  Bec
15a0: 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65  ause the registe
15b0: 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f  r.** does not co
15c0: 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67  ntrol the string
15d0: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65  , it might be de
15e0: 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68  leted without th
15f0: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e  e register.** kn
1600: 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  owing it..**.** 
1610: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e  This routine con
1620: 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72  verts an ephemer
1630: 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  al string into a
1640: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
1650: 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67  ocated.** string
1660: 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74   that the regist
1670: 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f  er itself contro
1680: 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ls.  In other wo
1690: 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65  rds, it.** conve
16a0: 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d  rts an MEM_Ephem
16b0: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 6e 20   string into an 
16c0: 4d 45 4d 5f 44 79 6e 20 73 74 72 69 6e 67 2e 0a  MEM_Dyn string..
16d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70 68  */.#define Deeph
16e0: 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20  emeralize(P) \. 
16f0: 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61 67    if( ((P)->flag
1700: 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20  s&MEM_Ephem)!=0 
1710: 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c 69  \.       && sqli
1720: 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72  te3VdbeMemMakeWr
1730: 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67 6f  iteable(P) ){ go
1740: 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20  to no_mem;}../* 
1750: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 74  Return true if t
1760: 68 65 20 63 75 72 73 6f 72 20 77 61 73 20 6f 70  he cursor was op
1770: 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f  ened using the O
1780: 50 5f 4f 70 65 6e 53 6f 72 74 65 72 20 6f 70 63  P_OpenSorter opc
1790: 6f 64 65 2e 20 2a 2f 0a 23 20 64 65 66 69 6e 65  ode. */.# define
17a0: 20 69 73 53 6f 72 74 65 72 28 78 29 20 28 28 78   isSorter(x) ((x
17b0: 29 2d 3e 70 53 6f 72 74 65 72 21 3d 30 29 0a 0a  )->pSorter!=0)..
17c0: 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70  /*.** Argument p
17d0: 4d 65 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20  Mem points at a 
17e0: 72 65 67 69 73 74 65 72 20 74 68 61 74 20 77 69  register that wi
17f0: 6c 6c 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  ll be passed to 
1800: 61 0a 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e 65  a.** user-define
1810: 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72 65  d function or re
1820: 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
1830: 65 72 20 61 73 20 74 68 65 20 72 65 73 75 6c 74  er as the result
1840: 20 6f 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a 20   of a query..** 
1850: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
1860: 73 20 74 68 65 20 70 4d 65 6d 2d 3e 74 79 70 65  s the pMem->type
1870: 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 62   variable used b
1880: 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  y the sqlite3_va
1890: 6c 75 65 5f 2a 28 29 20 0a 2a 2a 20 72 6f 75 74  lue_*() .** rout
18a0: 69 6e 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  ines..*/.void sq
18b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
18c0: 65 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29  eType(Mem *pMem)
18d0: 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20  {.  int flags = 
18e0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pMem->flags;.  i
18f0: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  f( flags & MEM_N
1900: 75 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  ull ){.    pMem-
1910: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 4e  >type = SQLITE_N
1920: 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  ULL;.  }.  else 
1930: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
1940: 49 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  Int ){.    pMem-
1950: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 49  >type = SQLITE_I
1960: 4e 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20 65 6c  NTEGER;.  }.  el
1970: 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d  se if( flags & M
1980: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
1990: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
19a0: 54 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a 20 20  TE_FLOAT;.  }.  
19b0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
19c0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
19d0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
19e0: 49 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65 6c 73  ITE_TEXT;.  }els
19f0: 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  e{.    pMem->typ
1a00: 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3b  e = SQLITE_BLOB;
1a10: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  .  }.}../*.** Al
1a20: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1a30: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1a40: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1a50: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1a60: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1a70: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1a80: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1a90: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1aa0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1ab0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ac0: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
1ad0: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
1ae0: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
1af0: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1b00: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1b10: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1b20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1b30: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1b40: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1b50: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1b60: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1b70: 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20  /* Database the 
1b80: 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74  cursor belongs t
1b90: 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 69 6e  o, or -1 */.  in
1ba0: 74 20 69 73 42 74 72 65 65 43 75 72 73 6f 72 20  t isBtreeCursor 
1bb0: 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
1bc0: 42 2d 54 72 65 65 2e 20 20 46 61 6c 73 65 20 66  B-Tree.  False f
1bd0: 6f 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  or pseudo-table 
1be0: 6f 72 20 76 74 61 62 20 2a 2f 0a 29 7b 0a 20 20  or vtab */.){.  
1bf0: 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65 6d 6f  /* Find the memo
1c00: 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77 69 6c  ry cell that wil
1c10: 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f  l be used to sto
1c20: 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66 20 6d  re the blob of m
1c30: 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71 75 69  emory.  ** requi
1c40: 72 65 64 20 66 6f 72 20 74 68 69 73 20 56 64 62  red for this Vdb
1c50: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c60: 65 2e 20 49 74 20 69 73 20 63 6f 6e 76 65 6e 69  e. It is conveni
1c70: 65 6e 74 20 74 6f 20 75 73 65 20 61 20 0a 20 20  ent to use a .  
1c80: 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79 20 63  ** vdbe memory c
1c90: 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20 74 68  ell to manage th
1ca0: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
1cb0: 69 6f 6e 20 72 65 71 75 69 72 65 64 20 66 6f 72  ion required for
1cc0: 20 61 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73   a.  ** VdbeCurs
1cd0: 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  or structure for
1ce0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
1cf0: 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a  easons:.  **.  *
1d00: 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65 73 20  *   * Sometimes 
1d10: 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 73 20 61  cursor numbers a
1d20: 72 65 20 75 73 65 64 20 66 6f 72 20 61 20 63 6f  re used for a co
1d30: 75 70 6c 65 20 6f 66 20 64 69 66 66 65 72 65 6e  uple of differen
1d40: 74 0a 20 20 2a 2a 20 20 20 20 20 70 75 72 70 6f  t.  **     purpo
1d50: 73 65 73 20 69 6e 20 61 20 76 64 62 65 20 70 72  ses in a vdbe pr
1d60: 6f 67 72 61 6d 2e 20 54 68 65 20 64 69 66 66 65  ogram. The diffe
1d70: 72 65 6e 74 20 75 73 65 73 20 6d 69 67 68 74 20  rent uses might 
1d80: 72 65 71 75 69 72 65 0a 20 20 2a 2a 20 20 20 20  require.  **    
1d90: 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a 65 64   different sized
1da0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20 4d 65   allocations. Me
1db0: 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f 76 69  mory cells provi
1dc0: 64 65 20 67 72 6f 77 61 62 6c 65 0a 20 20 2a 2a  de growable.  **
1dd0: 20 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f 6e 73       allocations
1de0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20  ..  **.  **   * 
1df0: 57 68 65 6e 20 75 73 69 6e 67 20 45 4e 41 42 4c  When using ENABL
1e00: 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d  E_MEMORY_MANAGEM
1e10: 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ENT, memory cell
1e20: 20 62 75 66 66 65 72 73 20 63 61 6e 0a 20 20 2a   buffers can.  *
1e30: 2a 20 20 20 20 20 62 65 20 66 72 65 65 64 20 6c  *     be freed l
1e40: 61 7a 69 6c 79 20 76 69 61 20 74 68 65 20 73 71  azily via the sq
1e50: 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65  lite3_release_me
1e60: 6d 6f 72 79 28 29 20 41 50 49 2e 20 54 68 69 73  mory() API. This
1e70: 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69 6d 69  .  **     minimi
1e80: 7a 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  zes the number o
1e90: 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d  f malloc calls m
1ea0: 61 64 65 20 62 79 20 74 68 65 20 73 79 73 74 65  ade by the syste
1eb0: 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d 65 6d  m..  **.  ** Mem
1ec0: 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72 20 63 75  ory cells for cu
1ed0: 72 73 6f 72 73 20 61 72 65 20 61 6c 6c 6f 63 61  rsors are alloca
1ee0: 74 65 64 20 61 74 20 74 68 65 20 74 6f 70 20 6f  ted at the top o
1ef0: 66 20 74 68 65 20 61 64 64 72 65 73 73 0a 20 20  f the address.  
1f00: 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d 6f 72 79  ** space. Memory
1f10: 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 29 20   cell (p->nMem) 
1f20: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 63  corresponds to c
1f30: 75 72 73 6f 72 20 30 2e 20 53 70 61 63 65 20 66  ursor 0. Space f
1f40: 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f 72 20 31  or.  ** cursor 1
1f50: 20 69 73 20 6d 61 6e 61 67 65 64 20 62 79 20 6d   is managed by m
1f60: 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e  emory cell (p->n
1f70: 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a 20 20 2a  Mem-1), etc..  *
1f80: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1f90: 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  &p->aMem[p->nMem
1fa0: 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e 74 20 6e  -iCur];..  int n
1fb0: 42 79 74 65 3b 0a 20 20 56 64 62 65 43 75 72 73  Byte;.  VdbeCurs
1fc0: 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a 20 20 6e  or *pCx = 0;.  n
1fd0: 42 79 74 65 20 3d 20 0a 20 20 20 20 20 20 52 4f  Byte = .      RO
1fe0: 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65  UND8(sizeof(Vdbe
1ff0: 43 75 72 73 6f 72 29 29 20 2b 20 0a 20 20 20 20  Cursor)) + .    
2000: 20 20 28 69 73 42 74 72 65 65 43 75 72 73 6f 72    (isBtreeCursor
2010: 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72  ?sqlite3BtreeCur
2020: 73 6f 72 53 69 7a 65 28 29 3a 30 29 20 2b 20 0a  sorSize():0) + .
2030: 20 20 20 20 20 20 32 2a 6e 46 69 65 6c 64 2a 73        2*nField*s
2040: 69 7a 65 6f 66 28 75 33 32 29 3b 0a 0a 20 20 61  izeof(u32);..  a
2050: 73 73 65 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e  ssert( iCur<p->n
2060: 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
2070: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 29  p->apCsr[iCur] )
2080: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2090: 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70  eFreeCursor(p, p
20a0: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a  ->apCsr[iCur]);.
20b0: 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75      p->apCsr[iCu
20c0: 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  r] = 0;.  }.  if
20d0: 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c  ( SQLITE_OK==sql
20e0: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
20f0: 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20  pMem, nByte, 0) 
2100: 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b  ){.    p->apCsr[
2110: 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20 28 56  iCur] = pCx = (V
2120: 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65 6d 2d  dbeCursor*)pMem-
2130: 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 70  >z;.    memset(p
2140: 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28 56 64  Cx, 0, sizeof(Vd
2150: 62 65 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20  beCursor));.    
2160: 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a  pCx->iDb = iDb;.
2170: 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20      pCx->nField 
2180: 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 69 66  = nField;.    if
2190: 28 20 6e 46 69 65 6c 64 20 29 7b 0a 20 20 20 20  ( nField ){.    
21a0: 20 20 70 43 78 2d 3e 61 54 79 70 65 20 3d 20 28    pCx->aType = (
21b0: 75 33 32 20 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 52  u32 *)&pMem->z[R
21c0: 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62  OUND8(sizeof(Vdb
21d0: 65 43 75 72 73 6f 72 29 29 5d 3b 0a 20 20 20 20  eCursor))];.    
21e0: 7d 0a 20 20 20 20 69 66 28 20 69 73 42 74 72 65  }.    if( isBtre
21f0: 65 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 20  eCursor ){.     
2200: 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 20 3d 20   pCx->pCursor = 
2210: 28 42 74 43 75 72 73 6f 72 2a 29 0a 20 20 20 20  (BtCursor*).    
2220: 20 20 20 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52        &pMem->z[R
2230: 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62  OUND8(sizeof(Vdb
2240: 65 43 75 72 73 6f 72 29 29 2b 32 2a 6e 46 69 65  eCursor))+2*nFie
2250: 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29 5d 3b  ld*sizeof(u32)];
2260: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74  .      sqlite3Bt
2270: 72 65 65 43 75 72 73 6f 72 5a 65 72 6f 28 70 43  reeCursorZero(pC
2280: 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  x->pCursor);.   
2290: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
22a0: 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72  pCx;.}../*.** Tr
22b0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76  y to convert a v
22c0: 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65  alue into a nume
22d0: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
22e0: 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20  on if we can.** 
22f0: 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f  do so without lo
2300: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
2310: 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
2320: 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e  ds, if the strin
2330: 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20  g.** looks like 
2340: 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72  a number, conver
2350: 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62  t it into a numb
2360: 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  er.  If it does 
2370: 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65  not.** look like
2380: 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65   a number, leave
2390: 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f 0a 73 74   it alone..*/.st
23a0: 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e  atic void applyN
23b0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d  umericAffinity(M
23c0: 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20 69 66 28  em *pRec){.  if(
23d0: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
23e0: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
23f0: 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64 6f  t))==0 ){.    do
2400: 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20 20  uble rValue;.   
2410: 20 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 20   i64 iValue;.   
2420: 20 75 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e   u8 enc = pRec->
2430: 65 6e 63 3b 0a 20 20 20 20 69 66 28 20 28 70 52  enc;.    if( (pR
2440: 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74  ec->flags&MEM_St
2450: 72 29 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a  r)==0 ) return;.
2460: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
2470: 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72 56  toF(pRec->z, &rV
2480: 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65  alue, pRec->n, e
2490: 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  nc)==0 ) return;
24a0: 0a 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69  .    if( 0==sqli
24b0: 74 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e  te3Atoi64(pRec->
24c0: 7a 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63  z, &iValue, pRec
24d0: 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20  ->n, enc) ){.   
24e0: 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69     pRec->u.i = i
24f0: 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 70 52 65  Value;.      pRe
2500: 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  c->flags |= MEM_
2510: 49 6e 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  Int;.    }else{.
2520: 20 20 20 20 20 20 70 52 65 63 2d 3e 72 20 3d 20        pRec->r = 
2530: 72 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 70 52  rValue;.      pR
2540: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2550: 5f 52 65 61 6c 3b 0a 20 20 20 20 7d 0a 20 20 7d  _Real;.    }.  }
2560: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73  .}../*.** Proces
2570: 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e  sing is determin
2580: 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74  e by the affinit
2590: 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a  y parameter:.**.
25a0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ** SQLITE_AFF_IN
25b0: 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45  TEGER:.** SQLITE
25c0: 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51  _AFF_REAL:.** SQ
25d0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
25e0: 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63  :.**    Try to c
25f0: 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61  onvert pRec to a
2600: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2610: 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a  entation or a .*
2620: 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  *    floating-po
2630: 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  int representati
2640: 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72  on if an integer
2650: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a   representation.
2660: 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73  **    is not pos
2670: 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61  sible.  Note tha
2680: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65  t the integer re
2690: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a  presentation is.
26a0: 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65  **    always pre
26b0: 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20  ferred, even if 
26c0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20  the affinity is 
26d0: 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a  REAL, because.**
26e0: 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72      an integer r
26f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2700: 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69   more space effi
2710: 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a  cient on disk..*
2720: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
2730: 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76  TEXT:.**    Conv
2740: 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65  ert pRec to a te
2750: 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  xt representatio
2760: 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  n..**.** SQLITE_
2770: 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20  AFF_NONE:.**    
2780: 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20  No-op.  pRec is 
2790: 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74  unchanged..*/.st
27a0: 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41  atic void applyA
27b0: 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a  ffinity(.  Mem *
27c0: 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f  pRec,          /
27d0: 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61  * The value to a
27e0: 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f  pply affinity to
27f0: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
2800: 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65  ity,      /* The
2810: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
2820: 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20  applied */.  u8 
2830: 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20  enc             
2840: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78   /* Use this tex
2850: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b  t encoding */.){
2860: 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  .  if( affinity=
2870: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
2880: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
2890: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
28a0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
28b0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
28c0: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
28d0: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
28e0: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
28f0: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2900: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2910: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2920: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2930: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2940: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2950: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2960: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2970: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2980: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2990: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
29a0: 20 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20   enc);.    }.   
29b0: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20   pRec->flags &= 
29c0: 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49  ~(MEM_Real|MEM_I
29d0: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  nt);.  }else if(
29e0: 20 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49 54   affinity!=SQLIT
29f0: 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20  E_AFF_NONE ){.  
2a00: 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69    assert( affini
2a10: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  ty==SQLITE_AFF_I
2a20: 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69  NTEGER || affini
2a30: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  ty==SQLITE_AFF_R
2a40: 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  EAL.            
2a50: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
2a60: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
2a70: 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d   );.    applyNum
2a80: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2a90: 63 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63  c);.    if( pRec
2aa0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
2ab0: 61 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  al ){.      sqli
2ac0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
2ad0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
2ae0: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
2af0: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2b00: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2b10: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2b20: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2b30: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2b40: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2b50: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2b60: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2b70: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2b80: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2b90: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2ba0: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2bb0: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2bc0: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2bd0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2be0: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2bf0: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2c00: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2c10: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2c20: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2c30: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2c40: 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d    Mem *pMem = (M
2c50: 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 69 66 28 20  em*)pVal;.  if( 
2c60: 70 4d 65 6d 2d 3e 74 79 70 65 3d 3d 53 51 4c 49  pMem->type==SQLI
2c70: 54 45 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 61  TE_TEXT ){.    a
2c80: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2c90: 69 74 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 73  ity(pMem);.    s
2ca0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
2cb0: 72 65 54 79 70 65 28 70 4d 65 6d 29 3b 0a 20 20  reType(pMem);.  
2cc0: 7d 0a 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d  }.  return pMem-
2cd0: 3e 74 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  >type;.}../*.** 
2ce0: 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e  Exported version
2cf0: 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74   of applyAffinit
2d00: 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f  y(). This one wo
2d10: 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76  rks on sqlite3_v
2d20: 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74  alue*, .** not t
2d30: 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a  he internal Mem*
2d40: 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73   type..*/.void s
2d50: 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
2d60: 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69  Affinity(.  sqli
2d70: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c  te3_value *pVal,
2d80: 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c   .  u8 affinity,
2d90: 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20   .  u8 enc.){.  
2da0: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d  applyAffinity((M
2db0: 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e  em *)pVal, affin
2dc0: 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 23 69  ity, enc);.}..#i
2dd0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2de0: 47 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  G./*.** Write a 
2df0: 6e 69 63 65 20 73 74 72 69 6e 67 20 72 65 70 72  nice string repr
2e00: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2e10: 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65  e contents of ce
2e20: 6c 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20  ll pMem.** into 
2e30: 62 75 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e  buffer zBuf, len
2e40: 67 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69  gth nBuf..*/.voi
2e50: 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  d sqlite3VdbeMem
2e60: 50 72 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20  PrettyPrint(Mem 
2e70: 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75  *pMem, char *zBu
2e80: 66 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72  f){.  char *zCsr
2e90: 20 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66   = zBuf;.  int f
2ea0: 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a   = pMem->flags;.
2eb0: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
2ec0: 63 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e  char *const encn
2ed0: 61 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c  ames[] = {"(X)",
2ee0: 20 22 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22   "(8)", "(16LE)"
2ef0: 2c 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20  , "(16BE)"};..  
2f00: 69 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29  if( f&MEM_Blob )
2f10: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
2f20: 20 63 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28   char c;.    if(
2f30: 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a   f & MEM_Dyn ){.
2f40: 20 20 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20        c = 'z';. 
2f50: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
2f60: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
2f70: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
2f80: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
2f90: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
2fa0: 20 20 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20        c = 't';. 
2fb0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
2fc0: 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45  & (MEM_Dyn|MEM_E
2fd0: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
2fe0: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
2ff0: 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20  EM_Ephem ){.    
3000: 20 20 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20    c = 'e';.     
3010: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3020: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79  EM_Static|MEM_Dy
3030: 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  n))==0 );.    }e
3040: 6c 73 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  lse{.      c = '
3050: 73 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73  s';.    }..    s
3060: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3070: 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c  100, zCsr, "%c",
3080: 20 63 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d   c);.    zCsr +=
3090: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
30a0: 28 7a 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69  (zCsr);.    sqli
30b0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
30c0: 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70  , zCsr, "%d[", p
30d0: 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73  Mem->n);.    zCs
30e0: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
30f0: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3100: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3110: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3120: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
3130: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3140: 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e  sr, "%02X", ((in
3150: 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30  t)pMem->z[i] & 0
3160: 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73  xFF));.      zCs
3170: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
3180: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3190: 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  }.    for(i=0; i
31a0: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
31b0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68  ; i++){.      ch
31c0: 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69  ar z = pMem->z[i
31d0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33  ];.      if( z<3
31e0: 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43  2 || z>126 ) *zC
31f0: 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20  sr++ = '.';.    
3200: 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d    else *zCsr++ =
3210: 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73   z;.    }..    s
3220: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3230: 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22  100, zCsr, "]%s"
3240: 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d  , encnames[pMem-
3250: 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72  >enc]);.    zCsr
3260: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3270: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69  n30(zCsr);.    i
3280: 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  f( f & MEM_Zero 
3290: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
32a0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
32b0: 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d  Csr,"+%dz",pMem-
32c0: 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20  >u.nZero);.     
32d0: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
32e0: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
32f0: 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20      }.    *zCsr 
3300: 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20  = '\0';.  }else 
3310: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20  if( f & MEM_Str 
3320: 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b  ){.    int j, k;
3330: 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27  .    zBuf[0] = '
3340: 20 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   ';.    if( f & 
3350: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
3360: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a   zBuf[1] = 'z';.
3370: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3380: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3390: 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b  EM_Ephem))==0 );
33a0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66  .    }else if( f
33b0: 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b   & MEM_Static ){
33c0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
33d0: 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65   't';.      asse
33e0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79  rt( (f & (MEM_Dy
33f0: 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30  n|MEM_Ephem))==0
3400: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   );.    }else if
3410: 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20  ( f & MEM_Ephem 
3420: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3430: 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73   = 'e';.      as
3440: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3450: 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29  Static|MEM_Dyn))
3460: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3470: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
3480: 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20  = 's';.    }.   
3490: 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69   k = 2;.    sqli
34a0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
34b0: 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22  , &zBuf[k], "%d"
34c0: 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20  , pMem->n);.    
34d0: 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  k += sqlite3Strl
34e0: 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a  en30(&zBuf[k]);.
34f0: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3500: 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30  '[';.    for(j=0
3510: 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d  ; j<15 && j<pMem
3520: 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  ->n; j++){.     
3530: 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b   u8 c = pMem->z[
3540: 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e  j];.      if( c>
3550: 3d 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20  =0x20 && c<0x7f 
3560: 29 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b  ){.        zBuf[
3570: 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20  k++] = c;.      
3580: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a  }else{.        z
3590: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a  Buf[k++] = '.';.
35a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
35b0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d    zBuf[k++] = ']
35c0: 27 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ';.    sqlite3_s
35d0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75  nprintf(100,&zBu
35e0: 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70  f[k], encnames[p
35f0: 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20  Mem->enc]);.    
3600: 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  k += sqlite3Strl
3610: 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a  en30(&zBuf[k]);.
3620: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3630: 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a  0;.  }.}.#endif.
3640: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
3650: 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74  EBUG./*.** Print
3660: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20   the value of a 
3670: 72 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61  register for tra
3680: 63 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a  cing purposes:.*
3690: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65  /.static void me
36a0: 6d 54 72 61 63 65 50 72 69 6e 74 28 46 49 4c 45  mTracePrint(FILE
36b0: 20 2a 6f 75 74 2c 20 4d 65 6d 20 2a 70 29 7b 0a   *out, Mem *p){.
36c0: 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26    if( p->flags &
36d0: 20 4d 45 4d 5f 49 6e 76 61 6c 69 64 20 29 7b 0a   MEM_Invalid ){.
36e0: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
36f0: 20 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a   " undefined");.
3700: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3710: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
3720: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3730: 75 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20  ut, " NULL");.  
3740: 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c  }else if( (p->fl
3750: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
3760: 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49  EM_Str))==(MEM_I
3770: 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20  nt|MEM_Str) ){. 
3780: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
3790: 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  " si:%lld", p->u
37a0: 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  .i);.  }else if(
37b0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
37c0: 49 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  Int ){.    fprin
37d0: 74 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64  tf(out, " i:%lld
37e0: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e  ", p->u.i);.#ifn
37f0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
3800: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
3810: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3820: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
3830: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  {.    fprintf(ou
3840: 74 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72  t, " r:%g", p->r
3850: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73  );.#endif.  }els
3860: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
3870: 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20   MEM_RowSet ){. 
3880: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
3890: 22 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20  " (rowset)");.  
38a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20  }else{.    char 
38b0: 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73  zBuf[200];.    s
38c0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65  qlite3VdbeMemPre
38d0: 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66  ttyPrint(p, zBuf
38e0: 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  );.    fprintf(o
38f0: 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66 70  ut, " ");.    fp
3900: 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c  rintf(out, "%s",
3910: 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74   zBuf);.  }.}.st
3920: 61 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74  atic void regist
3930: 65 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f 75  erTrace(FILE *ou
3940: 74 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d  t, int iReg, Mem
3950: 20 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66 28   *p){.  fprintf(
3960: 6f 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d 20  out, "REG[%d] = 
3970: 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54  ", iReg);.  memT
3980: 72 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20 70  racePrint(out, p
3990: 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74  );.  fprintf(out
39a0: 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69  , "\n");.}.#endi
39b0: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
39c0: 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65  _DEBUG.#  define
39d0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
39e0: 52 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63 65  R,M) if(p->trace
39f0: 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70  )registerTrace(p
3a00: 2d 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65 6c  ->trace,R,M).#el
3a10: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
3a20: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
3a30: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
3a40: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
3a50: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
3a60: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
3a70: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
3a80: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
3a90: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
3aa0: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
3ab0: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
3ac0: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
3ad0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43  dif../*.** The C
3ae0: 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
3af0: 50 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65 64  PT macro defined
3b00: 20 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20 73   here looks to s
3b10: 65 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71 6c  ee if the.** sql
3b20: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
3b30: 20 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65 65   routine has bee
3b40: 6e 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69 74  n called.  If it
3b50: 20 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e 0a   has been, then.
3b60: 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66  ** processing of
3b70: 20 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61   the VDBE progra
3b80: 6d 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64  m is interrupted
3b90: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63  ..**.** This mac
3ba0: 72 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65 72  ro added to ever
3bb0: 79 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  y instruction th
3bc0: 61 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20 69  at does a jump i
3bd0: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69 6d  n order to.** im
3be0: 70 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e 20  plement a loop. 
3bf0: 20 54 68 69 73 20 74 65 73 74 20 75 73 65 64 20   This test used 
3c00: 74 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20 73  to be on every s
3c10: 69 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69 6f  ingle instructio
3c20: 6e 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20 6d  n,.** but that m
3c30: 65 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65 73  eant we more tes
3c40: 74 69 6e 67 20 74 68 61 6e 20 77 65 20 6e 65 65  ting than we nee
3c50: 64 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74 65  ded.  By only te
3c60: 73 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c 61  sting the.** fla
3c70: 67 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72 75  g on jump instru
3c80: 63 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20 61  ctions, we get a
3c90: 20 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20 69   (small) speed i
3ca0: 6d 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23  mprovement..*/.#
3cb0: 64 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f 52  define CHECK_FOR
3cc0: 5f 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20 20  _INTERRUPT \.   
3cd0: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
3ce0: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
3cf0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
3d00: 65 72 72 75 70 74 3b 0a 0a 0a 23 69 66 6e 64 65  errupt;...#ifnde
3d10: 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54  f NDEBUG./*.** T
3d20: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
3d30: 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d  only called from
3d40: 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72   within an asser
3d50: 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  t() expression. 
3d60: 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61  It.** checks tha
3d70: 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54  t the sqlite3.nT
3d80: 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61  ransaction varia
3d90: 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79  ble is correctly
3da0: 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e   set to.** the n
3db0: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
3dc0: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
3dd0: 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nts currently in
3de0: 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20   the .** linked 
3df0: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
3e00: 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f   sqlite3.pSavepo
3e10: 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67  int..** .** Usag
3e20: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  e:.**.**     ass
3e30: 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
3e40: 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
3e50: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68  */.static int ch
3e60: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
3e70: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  t(sqlite3 *db){.
3e80: 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53    int n = 0;.  S
3e90: 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66  avepoint *p;.  f
3ea0: 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f  or(p=db->pSavepo
3eb0: 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65  int; p; p=p->pNe
3ec0: 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72  xt) n++;.  asser
3ed0: 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65  t( n==(db->nSave
3ee0: 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72  point + db->isTr
3ef0: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
3f00: 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  nt) );.  return 
3f10: 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  1;.}.#endif../*.
3f20: 2a 2a 20 54 72 61 6e 73 66 65 72 20 65 72 72 6f  ** Transfer erro
3f30: 72 20 6d 65 73 73 61 67 65 20 74 65 78 74 20 66  r message text f
3f40: 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  rom an sqlite3_v
3f50: 74 61 62 2e 7a 45 72 72 4d 73 67 20 28 74 65 78  tab.zErrMsg (tex
3f60: 74 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20 6d  t stored.** in m
3f70: 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66  emory obtained f
3f80: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
3f90: 6f 63 29 20 69 6e 74 6f 20 61 20 56 64 62 65 2e  oc) into a Vdbe.
3fa0: 7a 45 72 72 4d 73 67 20 28 74 65 78 74 20 73 74  zErrMsg (text st
3fb0: 6f 72 65 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72  ored.** in memor
3fc0: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
3fd0: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 29  sqlite3DbMalloc)
3fe0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
3ff0: 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
4000: 67 28 56 64 62 65 20 2a 70 2c 20 73 71 6c 69 74  g(Vdbe *p, sqlit
4010: 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 29 7b  e3_vtab *pVtab){
4020: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
4030: 20 70 2d 3e 64 62 3b 0a 20 20 73 71 6c 69 74 65   p->db;.  sqlite
4040: 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
4050: 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45  ErrMsg);.  p->zE
4060: 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44  rrMsg = sqlite3D
4070: 62 53 74 72 44 75 70 28 64 62 2c 20 70 56 74 61  bStrDup(db, pVta
4080: 62 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73  b->zErrMsg);.  s
4090: 71 6c 69 74 65 33 5f 66 72 65 65 28 70 56 74 61  qlite3_free(pVta
40a0: 62 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70  b->zErrMsg);.  p
40b0: 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
40c0: 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65  0;.}.../*.** Exe
40d0: 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20  cute as much of 
40e0: 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61  a VDBE program a
40f0: 73 20 77 65 20 63 61 6e 20 74 68 65 6e 20 72 65  s we can then re
4100: 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  turn..**.** sqli
4110: 74 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64 79  te3VdbeMakeReady
4120: 28 29 20 6d 75 73 74 20 62 65 20 63 61 6c 6c 65  () must be calle
4130: 64 20 62 65 66 6f 72 65 20 74 68 69 73 20 72 6f  d before this ro
4140: 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
4150: 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65 20 70  o.** close the p
4160: 72 6f 67 72 61 6d 20 77 69 74 68 20 61 20 66 69  rogram with a fi
4170: 6e 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20  nal OP_Halt and 
4180: 74 6f 20 73 65 74 20 75 70 20 74 68 65 20 63 61  to set up the ca
4190: 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74  llbacks.** and t
41a0: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
41b0: 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20   pointer..**.** 
41c0: 57 68 65 6e 65 76 65 72 20 61 20 72 6f 77 20 6f  Whenever a row o
41d0: 72 20 72 65 73 75 6c 74 20 64 61 74 61 20 69 73  r result data is
41e0: 20 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69 73   available, this
41f0: 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 65 69   routine will ei
4200: 74 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74  ther.** invoke t
4210: 68 65 20 72 65 73 75 6c 74 20 63 61 6c 6c 62 61  he result callba
4220: 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20  ck (if there is 
4230: 6f 6e 65 29 20 6f 72 20 72 65 74 75 72 6e 20 77  one) or return w
4240: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f  ith.** SQLITE_RO
4250: 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61  W..**.** If an a
4260: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
4270: 6f 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20  o open a locked 
4280: 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74  database, then t
4290: 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77  his routine.** w
42a0: 69 6c 6c 20 65 69 74 68 65 72 20 69 6e 76 6f 6b  ill either invok
42b0: 65 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62  e the busy callb
42c0: 61 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73  ack (if there is
42d0: 20 6f 6e 65 29 20 6f 72 20 69 74 20 77 69 6c 6c   one) or it will
42e0: 0a 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c 49 54  .** return SQLIT
42f0: 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66  E_BUSY..**.** If
4300: 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
4310: 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  , an error messa
4320: 67 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 6f  ge is written to
4330: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
4340: 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
4350: 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d  _malloc() and p-
4360: 3e 7a 45 72 72 4d 73 67 20 69 73 20 6d 61 64 65  >zErrMsg is made
4370: 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 61   to point to tha
4380: 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65  t memory..** The
4390: 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73   error code is s
43a0: 74 6f 72 65 64 20 69 6e 20 70 2d 3e 72 63 20 61  tored in p->rc a
43b0: 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  nd this routine 
43c0: 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45  returns SQLITE_E
43d0: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  RROR..**.** If t
43e0: 68 65 20 63 61 6c 6c 62 61 63 6b 20 65 76 65 72  he callback ever
43f0: 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   returns non-zer
4400: 6f 2c 20 74 68 65 6e 20 74 68 65 20 70 72 6f 67  o, then the prog
4410: 72 61 6d 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d  ram exits.** imm
4420: 65 64 69 61 74 65 6c 79 2e 20 20 54 68 65 72 65  ediately.  There
4430: 20 77 69 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f   will be no erro
4440: 72 20 6d 65 73 73 61 67 65 20 62 75 74 20 74 68  r message but th
4450: 65 20 70 2d 3e 72 63 20 66 69 65 6c 64 20 69 73  e p->rc field is
4460: 0a 2a 2a 20 73 65 74 20 74 6f 20 53 51 4c 49 54  .** set to SQLIT
4470: 45 5f 41 42 4f 52 54 20 61 6e 64 20 74 68 69 73  E_ABORT and this
4480: 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 72 65   routine will re
4490: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
44a0: 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72  R..**.** A memor
44b0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72  y allocation err
44c0: 6f 72 20 63 61 75 73 65 73 20 70 2d 3e 72 63 20  or causes p->rc 
44d0: 74 6f 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c  to be set to SQL
44e0: 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68  ITE_NOMEM and th
44f0: 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f  is.** routine to
4500: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
4510: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  RROR..**.** Othe
4520: 72 20 66 61 74 61 6c 20 65 72 72 6f 72 73 20 72  r fatal errors r
4530: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
4540: 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20  OR..**.** After 
4550: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 68 61 73  this routine has
4560: 20 66 69 6e 69 73 68 65 64 2c 20 73 71 6c 69 74   finished, sqlit
4570: 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 29  e3VdbeFinalize()
4580: 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73   should be.** us
4590: 65 64 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74  ed to clean up t
45a0: 68 65 20 6d 65 73 73 20 74 68 61 74 20 77 61 73  he mess that was
45b0: 20 6c 65 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f   left behind..*/
45c0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
45d0: 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20  Exec(.  Vdbe *p 
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45f0: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a     /* The VDBE *
4600: 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3d 30 3b  /.){.  int pc=0;
4610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4620: 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d    /* The program
4630: 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70   counter */.  Op
4640: 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20   *aOp = p->aOp; 
4650: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
4660: 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20   of p->aOp */.  
4670: 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20  Op *pOp;        
4680: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
4690: 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrent operation 
46a0: 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  */.  int rc = SQ
46b0: 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
46c0: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
46d0: 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rn */.  sqlite3 
46e0: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20  *db = p->db;    
46f0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4700: 73 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74  se */.  u8 reset
4710: 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
4720: 30 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65  0; /* Reset sche
4730: 6d 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ma after an erro
4740: 72 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f  r if positive */
4750: 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d  .  u8 encoding =
4760: 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a   ENC(db);     /*
4770: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   The database en
4780: 63 6f 64 69 6e 67 20 2a 2f 0a 23 69 66 6e 64 65  coding */.#ifnde
4790: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
47a0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
47b0: 20 20 69 6e 74 20 63 68 65 63 6b 50 72 6f 67 72    int checkProgr
47c0: 65 73 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ess;         /* 
47d0: 54 72 75 65 20 69 66 20 70 72 6f 67 72 65 73 73  True if progress
47e0: 20 63 61 6c 6c 62 61 63 6b 73 20 61 72 65 20 65   callbacks are e
47f0: 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 69 6e 74 20  nabled */.  int 
4800: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30  nProgressOps = 0
4810: 3b 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65  ;      /* Opcode
4820: 73 20 65 78 65 63 75 74 65 64 20 73 69 6e 63 65  s executed since
4830: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
4840: 63 6b 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ck. */.#endif.  
4850: 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30  int iCompare = 0
4860: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
4870: 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f  sult of last OP_
4880: 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f  Compare operatio
4890: 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  n */.  unsigned 
48a0: 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20 20  nVmStep = 0;    
48b0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
48c0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 73  irtual machine s
48d0: 74 65 70 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61  teps */.  Mem *a
48e0: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20  Mem = p->aMem;  
48f0: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
4900: 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d  p->aMem */.  Mem
4910: 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20   *pIn1 = 0;     
4920: 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69          /* 1st i
4930: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
4940: 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b    Mem *pIn2 = 0;
4950: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4960: 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  2nd input operan
4970: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33  d */.  Mem *pIn3
4980: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4990: 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f    /* 3rd input o
49a0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
49b0: 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20  *pOut = 0;      
49c0: 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74         /* Output
49d0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e   operand */.  in
49e0: 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  t *aPermute = 0;
49f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d           /* Perm
4a00: 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d  utation of colum
4a10: 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72  ns for OP_Compar
4a20: 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  e */.  i64 lastR
4a30: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
4a40: 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20  owid;  /* Saved 
4a50: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73  value of the las
4a60: 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a  t insert ROWID *
4a70: 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  /.#ifdef VDBE_PR
4a80: 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72  OFILE.  u64 star
4a90: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
4aa0: 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20     /* CPU clock 
4ab0: 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f  count at start o
4ac0: 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  f opcode */.  in
4ad0: 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20 20  t origPc;       
4ae0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67           /* Prog
4af0: 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20 73  ram counter at s
4b00: 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a  tart of opcode *
4b10: 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20  /.#endif.  /*** 
4b20: 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49  INSERT STACK UNI
4b30: 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20  ON HERE ***/..  
4b40: 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63  assert( p->magic
4b50: 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e  ==VDBE_MAGIC_RUN
4b60: 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f   );  /* sqlite3_
4b70: 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73 20  step() verifies 
4b80: 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  this */.  sqlite
4b90: 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a 20  3VdbeEnter(p);. 
4ba0: 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
4bb0: 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
4bc0: 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
4bd0: 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e  if a malloc() in
4be0: 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73  side a call to s
4bf0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
4c00: 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73  xt() or.    ** s
4c10: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
4c20: 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20  xt16() failed.  
4c30: 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  */.    goto no_m
4c40: 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  em;.  }.  assert
4c50: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4c60: 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c  OK || p->rc==SQL
4c70: 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 70 2d  ITE_BUSY );.  p-
4c80: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  >rc = SQLITE_OK;
4c90: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
4ca0: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
4cb0: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
4cc0: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
4cd0: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
4ce0: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
4cf0: 55 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  UPT;.  sqlite3Vd
4d00: 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b  beIOTraceSql(p);
4d10: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4d20: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4d30: 4c 4c 42 41 43 4b 0a 20 20 63 68 65 63 6b 50 72  LLBACK.  checkPr
4d40: 6f 67 72 65 73 73 20 3d 20 64 62 2d 3e 78 50 72  ogress = db->xPr
4d50: 6f 67 72 65 73 73 21 3d 30 3b 0a 23 65 6e 64 69  ogress!=0;.#endi
4d60: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
4d70: 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42  DEBUG.  sqlite3B
4d80: 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
4d90: 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d  ();.  if( p->pc=
4da0: 3d 30 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66  =0  && (p->db->f
4db0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4dc0: 62 65 4c 69 73 74 69 6e 67 29 21 3d 30 20 29 7b  beListing)!=0 ){
4dd0: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
4de0: 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f  printf("VDBE Pro
4df0: 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22  gram Listing:\n"
4e00: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
4e10: 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20  bePrintSql(p);. 
4e20: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
4e30: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
4e40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4e50: 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20  ntOp(stdout, i, 
4e60: 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a  &aOp[i]);.    }.
4e70: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64    }.  sqlite3End
4e80: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
4e90: 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63 3d  #endif.  for(pc=
4ea0: 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54  p->pc; rc==SQLIT
4eb0: 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20  E_OK; pc++){.   
4ec0: 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20 26   assert( pc>=0 &
4ed0: 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  & pc<p->nOp );. 
4ee0: 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f     if( db->mallo
4ef0: 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e  cFailed ) goto n
4f00: 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44  o_mem;.#ifdef VD
4f10: 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 6f  BE_PROFILE.    o
4f20: 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20 20  rigPc = pc;.    
4f30: 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48  start = sqlite3H
4f40: 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a  wtime();.#endif.
4f50: 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 20      nVmStep++;. 
4f60: 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63     pOp = &aOp[pc
4f70: 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20  ];..    /* Only 
4f80: 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66  allow tracing if
4f90: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
4fa0: 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
4fb0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4fc0: 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e  EBUG.    if( p->
4fd0: 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69  trace ){.      i
4fe0: 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20 20  f( pc==0 ){.    
4ff0: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
5000: 20 45 78 65 63 75 74 69 6f 6e 20 54 72 61 63 65   Execution Trace
5010: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 73  :\n");.        s
5020: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
5030: 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ql(p);.      }. 
5040: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5050: 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72 61 63 65  PrintOp(p->trace
5060: 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20  , pc, pOp);.    
5070: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a  }.#endif.      .
5080: 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f  .    /* Check to
5090: 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64 20   see if we need 
50a0: 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69  to simulate an i
50b0: 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73 20  nterrupt.  This 
50c0: 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20  only happens.   
50d0: 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20 61   ** if we have a
50e0: 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62 75   special test bu
50f0: 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ild..    */.#ifd
5100: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
5110: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
5120: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30  nterrupt_count>0
5130: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
5140: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
5150: 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73  t--;.      if( s
5160: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5170: 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  _count==0 ){.   
5180: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
5190: 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20  errupt(db);.    
51a0: 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
51b0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
51c0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
51d0: 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f 2a 20 43  ALLBACK.    /* C
51e0: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
51f0: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
5200: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
5210: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
5220: 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20 6f 66 20  umber.    ** of 
5230: 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62 65  VDBE ops have be
5240: 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69 74  en executed (eit
5250: 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20 69  her since this i
5260: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 20  nvocation of.   
5270: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
5280: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
5290: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
52a0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
52b0: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 20 20  as called)..    
52c0: 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65  ** If the progre
52d0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75  ss callback retu
52e0: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78  rns non-zero, ex
52f0: 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  it the virtual m
5300: 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 20 20  achine with.    
5310: 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65  ** a return code
5320: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20   SQLITE_ABORT.. 
5330: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 63 68     */.    if( ch
5340: 65 63 6b 50 72 6f 67 72 65 73 73 20 29 7b 0a 20  eckProgress ){. 
5350: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 50 72       if( db->nPr
5360: 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50 72 6f 67  ogressOps==nProg
5370: 72 65 73 73 4f 70 73 20 29 7b 0a 20 20 20 20 20  ressOps ){.     
5380: 20 20 20 69 6e 74 20 70 72 63 3b 0a 20 20 20 20     int prc;.    
5390: 20 20 20 20 70 72 63 20 3d 20 64 62 2d 3e 78 50      prc = db->xP
53a0: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
53b0: 67 72 65 73 73 41 72 67 29 3b 0a 20 20 20 20 20  gressArg);.     
53c0: 20 20 20 69 66 28 20 70 72 63 21 3d 30 20 29 7b     if( prc!=0 ){
53d0: 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
53e0: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
53f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
5400: 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
5410: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
5420: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f 70 73      nProgressOps
5430: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
5440: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f 70 73      nProgressOps
5450: 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ++;.    }.#endif
5460: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61 6e 79 20  ..    /* On any 
5470: 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
5480: 22 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65  "out2-prerelease
5490: 22 20 74 61 67 2c 20 66 72 65 65 20 61 6e 79 0a  " tag, free any.
54a0: 20 20 20 20 2a 2a 20 65 78 74 65 72 6e 61 6c 20      ** external 
54b0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75 74 20  allocations out 
54c0: 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64 20 73  of mem[p2] and s
54d0: 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 62 65  et mem[p2] to be
54e0: 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64 65 66  .    ** an undef
54f0: 69 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20 4f  ined integer.  O
5500: 70 63 6f 64 65 73 20 77 69 6c 6c 20 65 69 74 68  pcodes will eith
5510: 65 72 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 69  er fill in the i
5520: 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a 20 76 61  nteger.    ** va
5530: 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72 74 20 6d  lue or convert m
5540: 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69 66 66  em[p2] to a diff
5550: 65 72 65 6e 74 20 74 79 70 65 2e 0a 20 20 20 20  erent type..    
5560: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
5570: 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71 6c  Op->opflags==sql
5580: 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
5590: 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 20  ty[pOp->opcode] 
55a0: 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
55b0: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
55c0: 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 20  OUT2_PRERELEASE 
55d0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
55e0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
55f0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5600: 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p2<=p->nMem );.
5610: 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d        pOut = &aM
5620: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
5630: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5640: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
5650: 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c 65 61      VdbeMemRelea
5660: 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  se(pOut);.      
5670: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
5680: 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20  M_Int;.    }..  
5690: 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63    /* Sanity chec
56a0: 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70  king on other op
56b0: 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66  erands */.#ifdef
56c0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
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 31 29  ags & OPFLG_IN1)
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 31 3e 30 20 29  ert( pOp->p1>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 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=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 31 5d 29 20 29 3b 0a  em[pOp->p1]) );.
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 31 2c 20 26 61  RACE(pOp->p1, &a
5780: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Mem[pOp->p1]);. 
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 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20  LG_IN2)!=0 ){.  
57c0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
57d0: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
57e0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
57f0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
5800: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5810: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
5820: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  2]) );.      REG
5830: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5840: 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
5850: 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2]);.    }.    
5860: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
5870: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d  s & OPFLG_IN3)!=
5880: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5890: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
58a0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
58b0: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
58c0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
58d0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
58e0: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
58f0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5900: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  CE(pOp->p3, &aMe
5910: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
5920: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
5930: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5940: 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT2)!=0 ){.   
5950: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5960: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
5970: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70  sert( pOp->p2<=p
5980: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
5990: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
59a0: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
59b0: 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  2]);.    }.    i
59c0: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
59d0: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d   & OPFLG_OUT3)!=
59e0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
59f0: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5a00: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5a10: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
5a20: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5a30: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
5a40: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
5a50: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20   }.#endif.  .   
5a60: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
5a70: 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a  code ){../******
5a80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5aa0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ab0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ac0: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20  *******.** What 
5ad0: 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73  follows is a mas
5ae0: 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74  sive switch stat
5af0: 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68  ement where each
5b00: 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73   case implements
5b10: 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69   a.** separate i
5b20: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68  nstruction in th
5b30: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
5b40: 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77  e.  If we follow
5b50: 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e   the usual.** in
5b60: 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e  dentation conven
5b70: 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65  tions, each case
5b80: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
5b90: 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e  ted by 6 spaces.
5ba0: 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73    But.** that is
5bb0: 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64   a lot of wasted
5bc0: 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65   space on the le
5bd0: 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74  ft margin.  So t
5be0: 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a  he code within.*
5bf0: 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  * the switch sta
5c00: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61  tement will brea
5c10: 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f  k with conventio
5c20: 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c  n and be flush-l
5c30: 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20  eft. Another.** 
5c40: 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d  big comment (sim
5c50: 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65  ilar to this one
5c60: 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20  ) will mark the 
5c70: 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64  point in the cod
5c80: 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72  e where.** we tr
5c90: 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f  ansition back to
5ca0: 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
5cb0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ion..**.** The f
5cc0: 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63  ormatting of eac
5cd0: 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74  h case is import
5ce0: 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69  ant.  The makefi
5cf0: 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a  le for SQLite.**
5d00: 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43   generates two C
5d10: 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e   files "opcodes.
5d20: 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e  h" and "opcodes.
5d30: 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  c" by scanning t
5d40: 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b  his.** file look
5d50: 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68  ing for lines th
5d60: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63  at begin with "c
5d70: 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f  ase OP_".  The o
5d80: 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a  pcodes.h files.*
5d90: 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64  * will be filled
5da0: 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74   with #defines t
5db0: 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20  hat give unique 
5dc0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74  integer values t
5dd0: 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65  o each.** opcode
5de0: 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73   and the opcodes
5df0: 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65  .c file is fille
5e00: 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20  d with an array 
5e10: 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65  of strings where
5e20: 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20  .** each string 
5e30: 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  is the symbolic 
5e40: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72  name for the cor
5e50: 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64  responding opcod
5e60: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61  e.  If the.** ca
5e70: 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  se statement is 
5e80: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
5e90: 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  mment of the for
5ea0: 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e  m "/# same as ..
5eb0: 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f  . #/".** that co
5ec0: 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  mment is used to
5ed0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70   determine the p
5ee0: 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20  articular value 
5ef0: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a  of the opcode..*
5f00: 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f  *.** Other keywo
5f10: 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65  rds in the comme
5f20: 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  nt that follows 
5f30: 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73  each case are us
5f40: 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75  ed to.** constru
5f50: 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49  ct the OPFLG_INI
5f60: 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74  TIALIZER value t
5f70: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
5f80: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
5f90: 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e  ..** Keywords in
5fa0: 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c  clude: in1, in2,
5fb0: 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72 65   in3, out2_prere
5fc0: 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75 74  lease, out2, out
5fd0: 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d  3.  See.** the m
5fe0: 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72  kopcodeh.awk scr
5ff0: 69 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ipt for addition
6000: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
6010: 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74  **.** Documentat
6020: 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f  ion about VDBE o
6030: 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61  pcodes is genera
6040: 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  ted by scanning 
6050: 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72  this file.** for
6060: 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63   lines of that c
6070: 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22  ontain "Opcode:"
6080: 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64  .  That line and
6090: 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a   all subsequent.
60a0: 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73  ** comment lines
60b0: 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65   are used in the
60c0: 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   generation of t
60d0: 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64  he opcode.html d
60e0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20  ocumentation.** 
60f0: 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d  file..**.** SUMM
6100: 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46  ARY:.**.**     F
6110: 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70  ormatting is imp
6120: 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74  ortant to script
6130: 73 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73  s that scan this
6140: 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f   file..**     Do
6150: 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f   not deviate fro
6160: 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  m the formatting
6170: 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79   style currently
6180: 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a   in use..**.****
6190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f  *********/../* O
61e0: 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50  pcode:  Goto * P
61f0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e  2 * * *.**.** An
6200: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a   unconditional j
6210: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
6220: 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69  2..** The next i
6230: 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75  nstruction execu
6240: 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20  ted will be .** 
6250: 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78  the one at index
6260: 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67   P2 from the beg
6270: 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65  inning of.** the
6280: 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73   program..*/.cas
6290: 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20  e OP_Goto: {    
62a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
62b0: 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f   */.  CHECK_FOR_
62c0: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 63 20  INTERRUPT;.  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 47 6f 73 75 62 20 50 31 20  code:  Gosub P1 
6300: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
6310: 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
6320: 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65   address onto re
6330: 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64  gister P1.** and
6340: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64   then jump to ad
6350: 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73  dress P2..*/.cas
6360: 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20  e OP_Gosub: {   
6370: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6380: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6390: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
63a0: 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p1<=p->nMem );. 
63b0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
63c0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
63d0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
63e0: 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a   MEM_Dyn)==0 );.
63f0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6400: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
6410: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6420: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6430: 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54  i = pc;.  REGIST
6440: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
6450: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20  , pIn1);.  pc = 
6460: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62  pOp->p2 - 1;.  b
6470: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6480: 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a  de:  Return P1 *
6490: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
64a0: 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  p to the next in
64b0: 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20  struction after 
64c0: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
64d0: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63  egister P1..*/.c
64e0: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
64f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6500: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6510: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6520: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6530: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
6540: 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e  .  pc = (int)pIn
6550: 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b  1->u.i;.  break;
6560: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6570: 59 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a  Yield P1 * * * *
6580: 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20  .**.** Swap the 
6590: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
65a0: 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69  with the value i
65b0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
65c0: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
65d0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
65e0: 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63   in1 */.  int pc
65f0: 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26  Dest;.  pIn1 = &
6600: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6610: 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
6620: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
6630: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
6640: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6650: 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29    pcDest = (int)
6660: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
6670: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
6680: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
6690: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
66a0: 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62  pc = pcDest;.  b
66b0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
66c0: 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20  de:  HaltIfNull 
66d0: 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
66e0: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
66f0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6700: 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e   P3.  If it is N
6710: 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73  ULL then Halt us
6720: 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ing.** parameter
6730: 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20   P1, P2, and P4 
6740: 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20  as if this were 
6750: 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69  a Halt instructi
6760: 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76  on.  If the.** v
6770: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6780: 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P3 is not NULL,
6790: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
67a0: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
67b0: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66  /.case OP_HaltIf
67c0: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Null: {      /* 
67d0: 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20  in3 */.  pIn3 = 
67e0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
67f0: 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
6800: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
6810: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
6820: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
6830: 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a  o OP_Halt */.}..
6840: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
6850: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
6860: 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61  .** Exit immedia
6870: 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20  tely.  All open 
6880: 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65  cursors, etc are
6890: 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d   closed.** autom
68a0: 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  atically..**.** 
68b0: 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c 74  P1 is the result
68c0: 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62   code returned b
68d0: 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  y sqlite3_exec()
68e0: 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  , sqlite3_reset(
68f0: 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33  ),.** or sqlite3
6900: 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f  _finalize().  Fo
6910: 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c  r a normal halt,
6920: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20   this should be 
6930: 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a  SQLITE_OK (0)..*
6940: 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74  * For errors, it
6950: 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68   can be some oth
6960: 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31  er value.  If P1
6970: 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c  !=0 then P2 will
6980: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
6990: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20  ether or not to 
69a0: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72  rollback the cur
69b0: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
69c0: 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  .  Do not rollba
69d0: 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f  ck.** if P2==OE_
69e0: 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c  Fail. Do the rol
69f0: 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f  lback if P2==OE_
6a00: 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32  Rollback.  If P2
6a10: 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74  ==OE_Abort,.** t
6a20: 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c  hen back out all
6a30: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61   changes that ha
6a40: 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72 69  ve occurred duri
6a50: 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69 6f  ng this executio
6a60: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45  n of the.** VDBE
6a70: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c  , but do not rol
6a80: 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
6a90: 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  ction. .**.** If
6aa0: 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20   P4 is not null 
6ab0: 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72  then it is an er
6ac0: 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69  ror message stri
6ad0: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ng..**.** There 
6ae0: 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48  is an implied "H
6af0: 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72  alt 0 0 0" instr
6b00: 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20  uction inserted 
6b10: 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20  at the very end 
6b20: 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67  of.** every prog
6b30: 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20  ram.  So a jump 
6b40: 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e  past the last in
6b50: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65  struction of the
6b60: 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74   program.** is t
6b70: 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75  he same as execu
6b80: 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61  ting Halt..*/.ca
6b90: 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20  se OP_Halt: {.  
6ba0: 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c  if( pOp->p1==SQL
6bb0: 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72  ITE_OK && p->pFr
6bc0: 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61  ame ){.    /* Ha
6bd0: 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  lt the sub-progr
6be0: 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72  am. Return contr
6bf0: 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ol to the parent
6c00: 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56   frame. */.    V
6c10: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
6c20: 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
6c30: 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
6c40: 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20  rame->pParent;. 
6c50: 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a     p->nFrame--;.
6c60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6c70: 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
6c80: 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70  >nChange);.    p
6c90: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  c = sqlite3VdbeF
6ca0: 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61  rameRestore(pFra
6cb0: 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77  me);.    lastRow
6cc0: 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
6cd0: 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  id;.    if( pOp-
6ce0: 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p2==OE_Ignore )
6cf0: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72  {.      /* Instr
6d00: 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68 65  uction pc is the
6d10: 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74   OP_Program that
6d20: 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62   invoked the sub
6d30: 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20  -program .      
6d40: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  ** currently bei
6d50: 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68  ng halted. If th
6d60: 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e  e p2 instruction
6d70: 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74   of this OP_Halt
6d80: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75  .      ** instru
6d90: 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20  ction is set to 
6da0: 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20  OE_Ignore, then 
6db0: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
6dc0: 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20  is throwing.    
6dd0: 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65    ** an IGNORE e
6de0: 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69  xception. In thi
6df0: 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74  s case jump to t
6e00: 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69  he address speci
6e10: 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73  fied.      ** as
6e20: 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63   the p2 of the c
6e30: 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
6e40: 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 20  m.  */.      pc 
6e50: 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d  = p->aOp[pc].p2-
6e60: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70  1;.    }.    aOp
6e70: 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61   = p->aOp;.    a
6e80: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20  Mem = p->aMem;. 
6e90: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
6ea0: 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31   p->rc = pOp->p1
6eb0: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
6ec0: 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  on = (u8)pOp->p2
6ed0: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a  ;.  p->pc = pc;.
6ee0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
6ef0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
6f00: 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc!=SQLITE_OK 
6f10: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  );.    sqlite3Se
6f20: 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
6f30: 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 70  Msg, db, "%s", p
6f40: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 74  Op->p4.z);.    t
6f50: 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33  estcase( sqlite3
6f60: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f  GlobalConfig.xLo
6f70: 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  g!=0 );.    sqli
6f80: 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c  te3_log(pOp->p1,
6f90: 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e   "abort at %d in
6fa0: 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 2c 20   [%s]: %s", pc, 
6fb0: 70 2d 3e 7a 53 71 6c 2c 20 70 4f 70 2d 3e 70 34  p->zSql, pOp->p4
6fc0: 2e 7a 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  .z);.  }else if(
6fd0: 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 74 65   p->rc ){.    te
6fe0: 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47  stcase( sqlite3G
6ff0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67  lobalConfig.xLog
7000: 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
7010: 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20  e3_log(pOp->p1, 
7020: 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c  "constraint fail
7030: 65 64 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d  ed at %d in [%s]
7040: 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 29 3b  ", pc, p->zSql);
7050: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
7060: 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
7070: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
7080: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d  LITE_BUSY || rc=
7090: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63  =SQLITE_OK || rc
70a0: 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
70b0: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
70c0: 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70  TE_BUSY ){.    p
70d0: 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
70e0: 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
70f0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
7100: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28  ==SQLITE_OK || (
7110: 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c  p->rc&0xff)==SQL
7120: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29  ITE_CONSTRAINT )
7130: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
7140: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64  ==SQLITE_OK || d
7150: 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
7160: 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  >0 );.    rc = p
7170: 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52  ->rc ? SQLITE_ER
7180: 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e  ROR : SQLITE_DON
7190: 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64  E;.  }.  goto vd
71a0: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
71b0: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72   Opcode: Integer
71c0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
71d0: 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e  ** The 32-bit in
71e0: 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20 69  teger value P1 i
71f0: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72  s written into r
7200: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
7210: 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20  ase OP_Integer: 
7220: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
7230: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7240: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
7250: 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  p->p1;.  break;.
7260: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
7270: 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  t64 * P2 * P4 *.
7280: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
7290: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
72a0: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
72b0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
72c0: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
72d0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
72e0: 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20  P_Int64: {      
72f0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
7300: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
7310: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36  ert( pOp->p4.pI6
7320: 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  4!=0 );.  pOut->
7330: 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.i = *pOp->p4.p
7340: 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  I64;.  break;.}.
7350: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7360: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
7370: 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  INT./* Opcode: R
7380: 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  eal * P2 * P4 *.
7390: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
73a0: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
73b0: 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  t floating point
73c0: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
73d0: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
73e0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
73f0: 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b  .case OP_Real: {
7400: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
7410: 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c  ame as TK_FLOAT,
7420: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7430: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   */.  pOut->flag
7440: 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20  s = MEM_Real;.  
7450: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
7460: 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70  IsNaN(*pOp->p4.p
7470: 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d  Real) );.  pOut-
7480: 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52  >r = *pOp->p4.pR
7490: 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eal;.  break;.}.
74a0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
74b0: 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20  e: String8 * P2 
74c0: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
74d0: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20  points to a nul 
74e0: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
74f0: 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70   string. This op
7500: 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72  code is transfor
7510: 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20  med .** into an 
7520: 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65  OP_String before
7530: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20   it is executed 
7540: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69  for the first ti
7550: 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  me..*/.case OP_S
7560: 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20  tring8: {       
7570: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
7580: 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65  STRING, out2-pre
7590: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
75a0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
75b0: 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  0 );.  pOp->opco
75c0: 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a  de = OP_String;.
75d0: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69    pOp->p1 = sqli
75e0: 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d  te3Strlen30(pOp-
75f0: 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66  >p4.z);..#ifndef
7600: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
7610: 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e  16.  if( encodin
7620: 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  g!=SQLITE_UTF8 )
7630: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
7640: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
7650: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
7660: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
7670: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
7680: 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
7690: 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 20 67 6f  LITE_TOOBIG ) go
76a0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
76b0: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73  if( SQLITE_OK!=s
76c0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
76d0: 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
76e0: 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20  ncoding) ) goto 
76f0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65  no_mem;.    asse
7700: 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  rt( pOut->zMallo
7710: 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20  c==pOut->z );.  
7720: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e    assert( pOut->
7730: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 20  flags & MEM_Dyn 
7740: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  );.    pOut->zMa
7750: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f  lloc = 0;.    pO
7760: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
7770: 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 70 4f 75  _Static;.    pOu
7780: 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  t->flags &= ~MEM
7790: 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f  _Dyn;.    if( pO
77a0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59  p->p4type==P4_DY
77b0: 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73  NAMIC ){.      s
77c0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
77d0: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
77e0: 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79   }.    pOp->p4ty
77f0: 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b  pe = P4_DYNAMIC;
7800: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d  .    pOp->p4.z =
7810: 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f   pOut->z;.    pO
7820: 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b  p->p1 = pOut->n;
7830: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66  .  }.#endif.  if
7840: 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c  ( pOp->p1>db->aL
7850: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
7860: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
7870: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
7880: 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72   }.  /* Fall thr
7890: 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
78a0: 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67   case, OP_String
78b0: 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f   */.}.  ./* Opco
78c0: 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32  de: String P1 P2
78d0: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
78e0: 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50  e string value P
78f0: 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28  4 of length P1 (
7900: 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64  bytes) is stored
7910: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
7920: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
7930: 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  ng: {          /
7940: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7950: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
7960: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
7970: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
7980: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
7990: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
79a0: 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ut->z = pOp->p4.
79b0: 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70  z;.  pOut->n = p
79c0: 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e  Op->p1;.  pOut->
79d0: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
79e0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
79f0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
7a00: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
7a10: 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50  de: Null P1 P2 P
7a20: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  3 * *.**.** Writ
7a30: 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65  e a NULL into re
7a40: 67 69 73 74 65 72 73 20 50 32 2e 20 20 49 66 20  gisters P2.  If 
7a50: 50 33 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  P3 greater than 
7a60: 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77 72  P2, then also wr
7a70: 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f  ite.** NULL into
7a80: 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64   register P3 and
7a90: 20 65 76 65 72 79 20 72 65 67 69 73 74 65 72 20   every register 
7aa0: 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61 6e  in between P2 an
7ab0: 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20  d P3.  If P3.** 
7ac0: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32 20  is less than P2 
7ad0: 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69 73  (typically P3 is
7ae0: 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79   zero) then only
7af0: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 0a   register P2 is.
7b00: 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a  ** set to NULL..
7b10: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
7b20: 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72  value is non-zer
7b30: 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65 74  o, then also set
7b40: 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64   the MEM_Cleared
7b50: 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a   flag so that.**
7b60: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c   NULL values wil
7b70: 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65 71  l not compare eq
7b80: 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c 49  ual even if SQLI
7b90: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
7ba0: 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20   on.** OP_Ne or 
7bb0: 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OP_Eq..*/.case O
7bc0: 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  P_Null: {       
7bd0: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7be0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
7bf0: 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46  cnt;.  u16 nullF
7c00: 6c 61 67 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70  lag;.  cnt = pOp
7c10: 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20  ->p3-pOp->p2;.  
7c20: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
7c30: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f  =p->nMem );.  pO
7c40: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
7c50: 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f  Flag = pOp->p1 ?
7c60: 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43   (MEM_Null|MEM_C
7c70: 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75  leared) : MEM_Nu
7c80: 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74  ll;.  while( cnt
7c90: 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b  >0 ){.    pOut++
7ca0: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
7cb0: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
7cc0: 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c 65  .    VdbeMemRele
7cd0: 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 70  ase(pOut);.    p
7ce0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
7cf0: 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d  lFlag;.    cnt--
7d00: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
7d10: 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c  .../* Opcode: Bl
7d20: 6f 62 20 50 31 20 50 32 20 2a 20 50 34 0a 2a 2a  ob P1 P2 * P4.**
7d30: 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f  .** P4 points to
7d40: 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20   a blob of data 
7d50: 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20  P1 bytes long.  
7d60: 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c  Store this.** bl
7d70: 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
7d80: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c  2..*/.case OP_Bl
7d90: 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ob: {           
7da0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
7db0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
7dc0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20  ert( pOp->p1 <= 
7dd0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
7de0: 48 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  H );.  sqlite3Vd
7df0: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
7e00: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70  , pOp->p4.z, pOp
7e10: 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70  ->p1, 0, 0);.  p
7e20: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
7e30: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
7e40: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
7e50: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7e60: 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c   Opcode: Variabl
7e70: 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  e P1 P2 * P4 *.*
7e80: 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68  *.** Transfer th
7e90: 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e  e values of boun
7ea0: 64 20 70 61 72 61 6d 65 74 65 72 20 50 31 20 69  d parameter P1 i
7eb0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a  nto register P2.
7ec0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72  **.** If the par
7ed0: 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c  ameter is named,
7ee0: 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61   then its name a
7ef0: 70 70 65 61 72 73 20 69 6e 20 50 34 20 61 6e 64  ppears in P4 and
7f00: 20 50 33 3d 3d 31 2e 0a 2a 2a 20 54 68 65 20 50   P3==1..** The P
7f10: 34 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  4 value is used 
7f20: 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  by sqlite3_bind_
7f30: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29  parameter_name()
7f40: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72  ..*/.case OP_Var
7f50: 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  iable: {        
7f60: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7f70: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65 6d 20  elease */.  Mem 
7f80: 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20  *pVar;       /* 
7f90: 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e  Value being tran
7fa0: 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73  sferred */..  as
7fb0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
7fc0: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
7fd0: 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Var );.  assert(
7fe0: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c   pOp->p4.z==0 ||
7ff0: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61   pOp->p4.z==p->a
8000: 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20  zVar[pOp->p1-1] 
8010: 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  );.  pVar = &p->
8020: 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31  aVar[pOp->p1 - 1
8030: 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ];.  if( sqlite3
8040: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56  VdbeMemTooBig(pV
8050: 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ar) ){.    goto 
8060: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73  too_big;.  }.  s
8070: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
8080: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
8090: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
80a0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
80b0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
80c0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
80d0: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
80e0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f   P3 * *.**.** Mo
80f0: 76 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  ve the values in
8100: 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31   register P1..P1
8110: 2b 50 33 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a  +P3 over into.**
8120: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50   registers P2..P
8130: 32 2b 50 33 2e 20 20 52 65 67 69 73 74 65 72 73  2+P3.  Registers
8140: 20 50 31 2e 2e 50 31 2b 50 33 20 61 72 65 0a 2a   P1..P1+P3 are.*
8150: 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61  * left holding a
8160: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e   NULL.  It is an
8170: 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73   error for regis
8180: 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31  ter ranges.** P1
8190: 2e 2e 50 31 2b 50 33 20 61 6e 64 20 50 32 2e 2e  ..P1+P3 and P2..
81a0: 50 32 2b 50 33 20 74 6f 20 6f 76 65 72 6c 61 70  P2+P3 to overlap
81b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76  ..*/.case OP_Mov
81c0: 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61  e: {.  char *zMa
81d0: 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69  lloc;   /* Holdi
81e0: 6e 67 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20  ng variable for 
81f0: 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79  allocated memory
8200: 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
8210: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
8220: 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65   of registers le
8230: 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20  ft to copy */.  
8240: 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
8250: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
8260: 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69  copy from */.  i
8270: 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20  nt p2;          
8280: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
8290: 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d  opy to */..  n =
82a0: 20 70 4f 70 2d 3e 70 33 20 2b 20 31 3b 0a 20 20   pOp->p3 + 1;.  
82b0: 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
82c0: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
82d0: 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70  assert( n>0 && p
82e0: 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20  1>0 && p2>0 );. 
82f0: 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70   assert( p1+n<=p
8300: 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b  2 || p2+n<=p1 );
8310: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
8320: 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  [p1];.  pOut = &
8330: 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 77 68 69 6c  aMem[p2];.  whil
8340: 65 28 20 6e 2d 2d 20 29 7b 0a 20 20 20 20 61 73  e( n-- ){.    as
8350: 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65  sert( pOut<=&aMe
8360: 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20  m[p->nMem] );.  
8370: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d    assert( pIn1<=
8380: 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29  &aMem[p->nMem] )
8390: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
83a0: 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
83b0: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
83c0: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
83d0: 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70  .    zMalloc = p
83e0: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  Out->zMalloc;.  
83f0: 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20    pOut->zMalloc 
8400: 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
8410: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
8420: 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66 20  , pIn1);.#ifdef 
8430: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
8440: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
8450: 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d  yFrom>=&aMem[p1]
8460: 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79   && pOut->pScopy
8470: 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31 2b 70 4f  From<&aMem[p1+pO
8480: 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20 20 20 20  p->p3] ){.      
8490: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
84a0: 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d 3e 70 32   += p1 - pOp->p2
84b0: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
84c0: 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63     pIn1->zMalloc
84d0: 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20   = zMalloc;.    
84e0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
84f0: 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  2++, pOut);.    
8500: 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74  pIn1++;.    pOut
8510: 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
8520: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
8530: 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  opy P1 P2 P3 * *
8540: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f  .**.** Make a co
8550: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  py of registers 
8560: 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72  P1..P1+P3 into r
8570: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
8580: 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P3..**.** This i
8590: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
85a0: 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20   a deep copy of 
85b0: 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75  the value.  A du
85c0: 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61  plicate.** is ma
85d0: 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67  de of any string
85e0: 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e   or blob constan
85f0: 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f  t.  See also OP_
8600: 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  SCopy..*/.case O
8610: 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20  P_Copy: {.  int 
8620: 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  n;..  n = pOp->p
8630: 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  3;.  pIn1 = &aMe
8640: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
8650: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
8660: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
8670: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77  Out!=pIn1 );.  w
8680: 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 73  hile( 1 ){.    s
8690: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
86a0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
86b0: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
86c0: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
86d0: 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65  ize(pOut);.#ifde
86e0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
86f0: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
8700: 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  rom = 0;.#endif.
8710: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
8720: 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  CE(pOp->p2+pOp->
8730: 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p3-n, pOut);.   
8740: 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20   if( (n--)==0 ) 
8750: 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b  break;.    pOut+
8760: 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  +;.    pIn1++;. 
8770: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
8780: 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20  * Opcode: SCopy 
8790: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
87a0: 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77  * Make a shallow
87b0: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
87c0: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
87d0: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
87e0: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
87f0: 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  kes a shallow co
8800: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
8810: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
8820: 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72  * is a string or
8830: 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20   blob, then the 
8840: 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70  copy is only a p
8850: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a  ointer to the.**
8860: 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65   original and he
8870: 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69  nce if the origi
8880: 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77  nal changes so w
8890: 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a  ill the copy..**
88a0: 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f   Worse, if the o
88b0: 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c  riginal is deall
88c0: 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79  ocated, the copy
88d0: 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64   becomes invalid
88e0: 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72  ..** Thus the pr
88f0: 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61  ogram must guara
8900: 6e 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72  ntee that the or
8910: 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20  iginal will not 
8920: 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67  change.** during
8930: 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66   the lifetime of
8940: 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20   the copy.  Use 
8950: 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20  OP_Copy to make 
8960: 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f  a complete.** co
8970: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  py..*/.case OP_S
8980: 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20  Copy: {         
8990: 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20     /* in1, out2 
89a0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
89b0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
89c0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
89d0: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
89e0: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
89f0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
8a00: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
8a10: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
8a20: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
8a30: 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d  EBUG.  if( pOut-
8a40: 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29  >pScopyFrom==0 )
8a50: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
8a60: 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66  m = pIn1;.#endif
8a70: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
8a80: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
8a90: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8aa0: 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52   Opcode: ResultR
8ab0: 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ow P1 P2 * * *.*
8ac0: 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
8ad0: 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31  rs P1 through P1
8ae0: 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20  +P2-1 contain a 
8af0: 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a  single row of.**
8b00: 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f   results. This o
8b10: 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65  pcode causes the
8b20: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
8b30: 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74  call to terminat
8b40: 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c  e.** with an SQL
8b50: 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63  ITE_ROW return c
8b60: 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20  ode and it sets 
8b70: 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  up the sqlite3_s
8b80: 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  tmt.** structure
8b90: 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65   to provide acce
8ba0: 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20 50 31  ss to the top P1
8bb0: 20 76 61 6c 75 65 73 20 61 73 20 74 68 65 20 72   values as the r
8bc0: 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f  esult.** row..*/
8bd0: 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52  .case OP_ResultR
8be0: 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  ow: {.  Mem *pMe
8bf0: 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73  m;.  int i;.  as
8c00: 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c  sert( p->nResCol
8c10: 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a  umn==pOp->p2 );.
8c20: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8c30: 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  1>0 );.  assert(
8c40: 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32   pOp->p1+pOp->p2
8c50: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a  <=p->nMem+1 );..
8c60: 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61    /* If this sta
8c70: 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61  tement has viola
8c80: 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  ted immediate fo
8c90: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
8ca0: 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e  aints, do.  ** n
8cb0: 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ot return the nu
8cc0: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64  mber of rows mod
8cd0: 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f  ified. And do no
8ce0: 74 20 52 45 4c 45 41 53 45 20 74 68 65 20 73 74  t RELEASE the st
8cf0: 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61  atement.  ** tra
8d00: 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65  nsaction. It nee
8d10: 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
8d20: 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20  back.  */.  if( 
8d30: 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d  SQLITE_OK!=(rc =
8d40: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
8d50: 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20  kFk(p, 0)) ){.  
8d60: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c    assert( db->fl
8d70: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
8d80: 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65  Rows );.    asse
8d90: 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a  rt( p->usesStmtJ
8da0: 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72  ournal );.    br
8db0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
8dc0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75  f the SQLITE_Cou
8dd0: 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73  ntRows flag is s
8de0: 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c  et in sqlite3.fl
8df0: 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a  ags mask, then .
8e00: 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65    ** DML stateme
8e10: 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  nts invoke this 
8e20: 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e  opcode to return
8e30: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
8e40: 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69  ows .  ** modifi
8e50: 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
8e60: 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
8e70: 20 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74   way that a VM t
8e80: 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61  hat.  ** opens a
8e90: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
8ea0: 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b  action may invok
8eb0: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20  e this opcode.. 
8ec0: 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65   **.  ** In case
8ed0: 20 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20   this is such a 
8ee0: 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65  statement, close
8ef0: 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74   any statement t
8f00: 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20  ransaction.  ** 
8f10: 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56  opened by this V
8f20: 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  M before returni
8f30: 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  ng control to th
8f40: 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20  e user. This is 
8f50: 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74  to.  ** ensure t
8f60: 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  hat statement-tr
8f70: 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61  ansactions are a
8f80: 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f  lways nested, no
8f90: 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20  t overlapping.. 
8fa0: 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20   ** If the open 
8fb0: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
8fc0: 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f  ction is not clo
8fd0: 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74  sed here, then t
8fe0: 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79  he user.  ** may
8ff0: 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d   step another VM
9000: 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20   that opens its 
9010: 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72  own statement tr
9020: 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a  ansaction. This.
9030: 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f    ** may lead to
9040: 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61   overlapping sta
9050: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
9060: 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ons..  **.  ** T
9070: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
9080: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65  nsaction is neve
9090: 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72  r a top-level tr
90a0: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63  ansaction.  Henc
90b0: 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41  e.  ** the RELEA
90c0: 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61  SE call below ca
90d0: 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20  n never fail..  
90e0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  */.  assert( p->
90f0: 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c  iStatement==0 ||
9100: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
9110: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
9120: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
9130: 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28  eCloseStatement(
9140: 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  p, SAVEPOINT_REL
9150: 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e 45 56  EASE);.  if( NEV
9160: 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  ER(rc!=SQLITE_OK
9170: 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ) ){.    break;.
9180: 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69    }..  /* Invali
9190: 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72  date all ephemer
91a0: 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61  al cursor row ca
91b0: 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63  ches */.  p->cac
91c0: 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68  heCtr = (p->cach
91d0: 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20  eCtr + 2)|1;..  
91e0: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
91f0: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
9200: 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20  current row are 
9210: 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a  \000 terminated.
9220: 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e    ** and have an
9230: 20 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20   assigned type. 
9240: 20 54 68 65 20 72 65 73 75 6c 74 73 20 61 72 65   The results are
9250: 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65   de-ephemeralize
9260: 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65  d as.  ** a side
9270: 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20   effect..  */.  
9280: 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c  pMem = p->pResul
9290: 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  tSet = &aMem[pOp
92a0: 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p1];.  for(i=0
92b0: 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b  ; i<pOp->p2; i++
92c0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
92d0: 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b  emIsValid(&pMem[
92e0: 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68  i]) );.    Deeph
92f0: 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b  emeralize(&pMem[
9300: 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  i]);.    assert(
9310: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
9320: 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a  & MEM_Ephem)==0.
9330: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28              || (
9340: 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20  pMem[i].flags & 
9350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
9360: 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  b))==0 );.    sq
9370: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54  lite3VdbeMemNulT
9380: 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69  erminate(&pMem[i
9390: 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ]);.    sqlite3V
93a0: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
93b0: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52  &pMem[i]);.    R
93c0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
93d0: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
93e0: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
93f0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
9400: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
9410: 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54   /* Return SQLIT
9420: 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e  E_ROW.  */.  p->
9430: 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72  pc = pc + 1;.  r
9440: 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a  c = SQLITE_ROW;.
9450: 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
9460: 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  rn;.}../* Opcode
9470: 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50  : Concat P1 P2 P
9480: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20  3 * *.**.** Add 
9490: 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69  the text in regi
94a0: 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65  ster P1 onto the
94b0: 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74   end of the text
94c0: 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
94d0: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
94e0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
94f0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
9500: 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50  ther the P1 or P
9510: 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20  2 text are NULL 
9520: 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20  then store NULL 
9530: 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50  in P3..**.**   P
9540: 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a  3 = P2 || P1.**.
9550: 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
9560: 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74   for P1 and P3 t
9570: 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65  o be the same re
9580: 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65  gister. Sometime
9590: 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74  s,.** if P3 is t
95a0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
95b0: 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c   as P2, the impl
95c0: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62  ementation is ab
95d0: 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61  le.** to avoid a
95e0: 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61   memcpy()..*/.ca
95f0: 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20  se OP_Concat: { 
9600: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9610: 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20  e as TK_CONCAT, 
9620: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
9630: 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a  /.  i64 nByte;..
9640: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9650: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
9660: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
9670: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
9680: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
9690: 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20  ert( pIn1!=pOut 
96a0: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
96b0: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
96c0: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
96d0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
96e0: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
96f0: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
9700: 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42   }.  if( ExpandB
9710: 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70  lob(pIn1) || Exp
9720: 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20  andBlob(pIn2) ) 
9730: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53  goto no_mem;.  S
9740: 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65  tringify(pIn1, e
9750: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69  ncoding);.  Stri
9760: 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f  ngify(pIn2, enco
9770: 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d  ding);.  nByte =
9780: 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d   pIn1->n + pIn2-
9790: 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e  >n;.  if( nByte>
97a0: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
97b0: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
97c0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
97d0: 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65  big;.  }.  MemSe
97e0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
97f0: 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20  MEM_Str);.  if( 
9800: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
9810: 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ow(pOut, (int)nB
9820: 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e  yte+2, pOut==pIn
9830: 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  2) ){.    goto n
9840: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69 66 28  o_mem;.  }.  if(
9850: 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20   pOut!=pIn2 ){. 
9860: 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e     memcpy(pOut->
9870: 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32  z, pIn2->z, pIn2
9880: 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63  ->n);.  }.  memc
9890: 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32  py(&pOut->z[pIn2
98a0: 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70  ->n], pIn1->z, p
98b0: 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d  In1->n);.  pOut-
98c0: 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30 3b 0a 20  >z[nByte] = 0;. 
98d0: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31   pOut->z[nByte+1
98e0: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66  ] = 0;.  pOut->f
98f0: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d  lags |= MEM_Term
9900: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
9910: 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
9920: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
9930: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
9940: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9950: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9960: 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20  code: Add P1 P2 
9970: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64  P3 * *.**.** Add
9980: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
9990: 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
99a0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
99b0: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
99c0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
99d0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
99e0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
99f0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
9a00: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
9a10: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74  ./* Opcode: Mult
9a20: 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20  iply P1 P2 P3 * 
9a30: 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69  *.**.**.** Multi
9a40: 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ply the value in
9a50: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
9a60: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9a70: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
9a80: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
9a90: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
9aa0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
9ab0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
9ac0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9ad0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
9ae0: 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33  ubtract P1 P2 P3
9af0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72   * *.**.** Subtr
9b00: 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  act the value in
9b10: 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f   register P1 fro
9b20: 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
9b30: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
9b40: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
9b50: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
9b60: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
9b70: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
9b80: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9b90: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9ba0: 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33   Divide P1 P2 P3
9bb0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64   * *.**.** Divid
9bc0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
9bd0: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
9be0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9bf0: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
9c00: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
9c10: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50  n register P3 (P
9c20: 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65  3=P2/P1). If the
9c30: 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65   value in .** re
9c40: 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72  gister P1 is zer
9c50: 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  o, then the resu
9c60: 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65  lt is NULL. If e
9c70: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a  ither input is .
9c80: 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  ** NULL, the res
9c90: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
9ca0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69  /* Opcode: Remai
9cb0: 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20  nder P1 P2 P3 * 
9cc0: 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20  *.**.** Compute 
9cd0: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66  the remainder af
9ce0: 74 65 72 20 69 6e 74 65 67 65 72 20 64 69 76 69  ter integer divi
9cf0: 73 69 6f 6e 20 6f 66 20 74 68 65 20 76 61 6c 75  sion of the valu
9d00: 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
9d10: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
9d20: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
9d30: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9d40: 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a 2a 2a 20  sult in P3. .** 
9d50: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
9d60: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 7a  register P2 is z
9d70: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
9d80: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
9d90: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
9da0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
9db0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
9dc0: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
9de0: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
9df0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
9e00: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
9e10: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
9e20: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
9e30: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
9e40: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
9e50: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
9e60: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
9e70: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
9e80: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
9e90: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
9eb0: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
9ec0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
9ed0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
9ee0: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
9ef0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9f00: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
9f10: 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49  ut3 */.  char bI
9f20: 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72  ntint;   /* Star
9f30: 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69  ted out as two i
9f40: 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20  nteger operands 
9f50: 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20  */.  int flags; 
9f60: 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64       /* Combined
9f70: 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f   MEM_* flags fro
9f80: 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f  m both inputs */
9f90: 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20 20  .  i64 iA;      
9fa0: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
9fb0: 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  lue of left oper
9fc0: 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b  and */.  i64 iB;
9fd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
9fe0: 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67  ger value of rig
9ff0: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ht operand */.  
a000: 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20  double rA;      
a010: 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66  /* Real value of
a020: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
a030: 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20  .  double rB;   
a040: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
a050: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
a060: 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  d */..  pIn1 = &
a070: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
a080: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
a090: 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a 20 20 70  inity(pIn1);.  p
a0a0: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
a0b0: 3e 70 32 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d  >p2];.  applyNum
a0c0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
a0d0: 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2);.  pOut = &aM
a0e0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
a0f0: 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61  lags = pIn1->fla
a100: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
a110: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20 26  ;.  if( (flags &
a120: 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20   MEM_Null)!=0 ) 
a130: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
a140: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
a150: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
a160: 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs & pIn2->flags
a170: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d   & MEM_Int)==MEM
a180: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 41 20 3d  _Int ){.    iA =
a190: 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn1->u.i;.    
a1a0: 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a  iB = pIn2->u.i;.
a1b0: 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b      bIntint = 1;
a1c0: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
a1d0: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
a1e0: 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20    case OP_Add:  
a1f0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
a200: 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29  AddInt64(&iB,iA)
a210: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
a220: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
a230: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
a240: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62    if( sqlite3Sub
a250: 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20  Int64(&iB,iA) ) 
a260: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62  goto fp_math;  b
a270: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
a280: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69   OP_Multiply:  i
a290: 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74  f( sqlite3MulInt
a2a0: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
a2b0: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
a2c0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
a2d0: 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20  _Divide: {.     
a2e0: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
a2f0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
a300: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
a310: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
a320: 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53  1 && iB==SMALLES
a330: 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66  T_INT64 ) goto f
a340: 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20  p_math;.        
a350: 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20  iB /= iA;.      
a360: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
a370: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20  .      default: 
a380: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  {.        if( iA
a390: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
a3a0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
a3b0: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
a3c0: 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20  ( iA==-1 ) iA = 
a3d0: 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d  1;.        iB %=
a3e0: 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   iA;.        bre
a3f0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
a400: 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  }.    pOut->u.i 
a410: 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = iB;.    MemSet
a420: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
a430: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65  EM_Int);.  }else
a440: 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20  {.    bIntint = 
a450: 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20  0;.fp_math:.    
a460: 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rA = sqlite3Vdbe
a470: 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b  RealValue(pIn1);
a480: 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65  .    rB = sqlite
a490: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
a4a0: 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68  In2);.    switch
a4b0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
a4c0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
a4d0: 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b  dd:         rB +
a4e0: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
a4f0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
a500: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42  _Subtract:    rB
a510: 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   -= rA;       br
a520: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
a530: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
a540: 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20  rB *= rA;       
a550: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
a560: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20  e OP_Divide: {. 
a570: 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c         /* (doubl
a580: 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53  e)0 In case of S
a590: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
a5a0: 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a  ING_POINT... */.
a5b0: 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d          if( rA==
a5c0: 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f  (double)0 ) goto
a5d0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
a5e0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
a5f0: 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20      rB /= rA;.  
a600: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
a610: 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75     }.      defau
a620: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41  lt: {.        iA
a630: 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20   = (i64)rA;.    
a640: 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42      iB = (i64)rB
a650: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
a660: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
a670: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
a680: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
a690: 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20  ( iA==-1 ) iA = 
a6a0: 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20  1;.        rB = 
a6b0: 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41  (double)(iB % iA
a6c0: 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  );.        break
a6d0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
a6e0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
a6f0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
a700: 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  T.    pOut->u.i 
a710: 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = rB;.    MemSet
a720: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
a730: 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  EM_Int);.#else. 
a740: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73     if( sqlite3Is
a750: 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20  NaN(rB) ){.     
a760: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
a770: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
a780: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
a790: 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d  >r = rB;.    Mem
a7a0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
a7b0: 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20  , MEM_Real);.   
a7c0: 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45   if( (flags & ME
a7d0: 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62  M_Real)==0 && !b
a7e0: 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  Intint ){.      
a7f0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
a800: 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29  erAffinity(pOut)
a810: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
a820: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69   }.  break;..ari
a830: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a840: 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65  s_null:.  sqlite
a850: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
a860: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
a870: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
a880: 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a  llSeq P1 * * P4.
a890: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
a8a0: 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53  inter to a CollS
a8b0: 65 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68  eq struct. If th
a8c0: 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61  e next call to a
a8d0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a   user function.*
a8e0: 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63  * or aggregate c
a8f0: 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46  alls sqlite3GetF
a900: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68  uncCollSeq(), th
a910: 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  is collation seq
a920: 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65  uence will.** be
a930: 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20   returned. This 
a940: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62  is used by the b
a950: 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d  uilt-in min(), m
a960: 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28  ax() and nullif(
a970: 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  ).** functions..
a980: 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
a990: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  ot zero, then it
a9a0: 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
a9b0: 68 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74  hat a subsequent
a9c0: 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78   min() or.** max
a9d0: 28 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c  () aggregate wil
a9e0: 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68  l set to 1 if th
a9f0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73  e current row is
aa00: 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d   not the minimum
aa10: 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20   or.** maximum. 
aa20: 20 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72   The P1 register
aa30: 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
aa40: 74 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73  to 0 by this ins
aa50: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
aa60: 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73  The interface us
aa70: 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d  ed by the implem
aa80: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
aa90: 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66  aforementioned f
aaa0: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72  unctions.** to r
aab0: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c  etrieve the coll
aac0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73  ation sequence s
aad0: 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  et by this opcod
aae0: 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  e is not availab
aaf0: 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20  le.** publicly, 
ab00: 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e  only to user fun
ab10: 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69  ctions defined i
ab20: 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73  n func.c..*/.cas
ab30: 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a  e OP_CollSeq: {.
ab40: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
ab50: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
ab60: 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Q );.  if( pOp->
ab70: 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p1 ){.    sqlite
ab80: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
ab90: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c  (&aMem[pOp->p1],
aba0: 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   0);.  }.  break
abb0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
abc0: 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50  Function P1 P2 P
abd0: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e  3 P4 P5.**.** In
abe0: 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63  voke a user func
abf0: 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f  tion (P4 is a po
ac00: 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74  inter to a Funct
ac10: 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74 68  ion structure th
ac20: 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68  at.** defines th
ac30: 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68  e function) with
ac40: 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61   P5 arguments ta
ac50: 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
ac60: 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63  r P2 and.** succ
ac70: 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73  essors.  The res
ac80: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
ac90: 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
aca0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
acb0: 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73   Register P3 mus
acc0: 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20  t not be one of 
acd0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70  the function inp
ace0: 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  uts..**.** P1 is
acf0: 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73   a 32-bit bitmas
ad00: 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  k indicating whe
ad10: 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68  ther or not each
ad20: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
ad30: 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61   .** function wa
ad40: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20  s determined to 
ad50: 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63  be constant at c
ad60: 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20  ompile time. If 
ad70: 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
ad80: 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61  ument was consta
ad90: 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66  nt then bit 0 of
ada0: 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73   P1 is set. This
adb0: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
adc0: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
add0: 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63   meta data assoc
ade0: 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65  iated with a use
adf0: 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  r function argum
ae00: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ent using the.**
ae10: 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78   sqlite3_set_aux
ae20: 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62  data() API may b
ae30: 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65  e safely retaine
ae40: 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
ae50: 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  .** invocation o
ae60: 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  f this opcode..*
ae70: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41  *.** See also: A
ae80: 67 67 53 74 65 70 20 61 6e 64 20 41 67 67 46 69  ggStep and AggFi
ae90: 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  nal.*/.case OP_F
aea0: 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74  unction: {.  int
aeb0: 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b   i;.  Mem *pArg;
aec0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
aed0: 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
aee0: 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
aef0: 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d  .  int n;..  n =
af00: 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70 56 61   pOp->p5;.  apVa
af10: 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  l = p->apArg;.  
af20: 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c  assert( apVal ||
af30: 20 6e 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72   n==0 );.  asser
af40: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
af50: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
af60: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
af70: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
af80: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
af90: 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 61 73 73  p, pOut);..  ass
afa0: 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f  ert( n==0 || (pO
afb0: 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
afc0: 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 29  p2+n<=p->nMem+1)
afd0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
afe0: 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c  p->p3<pOp->p2 ||
aff0: 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
b000: 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d 20  2+n );.  pArg = 
b010: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b020: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
b030: 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20  i++, pArg++){.  
b040: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
b050: 61 6c 69 64 28 70 41 72 67 29 20 29 3b 0a 20 20  alid(pArg) );.  
b060: 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72    apVal[i] = pAr
b070: 67 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  g;.    Deephemer
b080: 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a 20 20 20  alize(pArg);.   
b090: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
b0a0: 74 6f 72 65 54 79 70 65 28 70 41 72 67 29 3b 0a  toreType(pArg);.
b0b0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
b0c0: 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41  CE(pOp->p2+i, pA
b0d0: 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  rg);.  }..  asse
b0e0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
b0f0: 3d 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c 20 70  =P4_FUNCDEF || p
b100: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56  Op->p4type==P4_V
b110: 44 42 45 46 55 4e 43 20 29 3b 0a 20 20 69 66 28  DBEFUNC );.  if(
b120: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
b130: 5f 46 55 4e 43 44 45 46 20 29 7b 0a 20 20 20 20  _FUNCDEF ){.    
b140: 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
b150: 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20 20 63  >p4.pFunc;.    c
b160: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 30  tx.pVdbeFunc = 0
b170: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
b180: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 28  tx.pVdbeFunc = (
b190: 56 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d 3e 70  VdbeFunc*)pOp->p
b1a0: 34 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20  4.pVdbeFunc;.   
b1b0: 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 63 74 78   ctx.pFunc = ctx
b1c0: 2e 70 56 64 62 65 46 75 6e 63 2d 3e 70 46 75 6e  .pVdbeFunc->pFun
b1d0: 63 3b 0a 20 20 7d 0a 0a 20 20 63 74 78 2e 73 2e  c;.  }..  ctx.s.
b1e0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
b1f0: 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64  ;.  ctx.s.db = d
b200: 62 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20  b;.  ctx.s.xDel 
b210: 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61  = 0;.  ctx.s.zMa
b220: 6c 6c 6f 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20  lloc = 0;..  /* 
b230: 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20  The output cell 
b240: 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65  may already have
b250: 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61   a buffer alloca
b260: 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74  ted. Move.  ** t
b270: 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 63 74  he pointer to ct
b280: 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74  x.s so in case t
b290: 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  he user-function
b2a0: 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74 68   can use.  ** th
b2b0: 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  e already alloca
b2c0: 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65  ted buffer inste
b2d0: 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67  ad of allocating
b2e0: 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f   a new one..  */
b2f0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
b300: 6d 4d 6f 76 65 28 26 63 74 78 2e 73 2c 20 70 4f  mMove(&ctx.s, pO
b310: 75 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  ut);.  MemSetTyp
b320: 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20 4d 45  eFlag(&ctx.s, ME
b330: 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e  M_Null);..  ctx.
b340: 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 69  isError = 0;.  i
b350: 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c  f( ctx.pFunc->fl
b360: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e  ags & SQLITE_FUN
b370: 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20  C_NEEDCOLL ){.  
b380: 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f    assert( pOp>aO
b390: 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p );.    assert(
b3a0: 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d   pOp[-1].p4type=
b3b0: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
b3c0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
b3d0: 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f  1].opcode==OP_Co
b3e0: 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78  llSeq );.    ctx
b3f0: 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d  .pColl = pOp[-1]
b400: 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20  .p4.pColl;.  }. 
b410: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
b420: 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a   lastRowid;.  (*
b430: 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63  ctx.pFunc->xFunc
b440: 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c  )(&ctx, n, apVal
b450: 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35  ); /* IMP: R-245
b460: 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61  05-23230 */.  la
b470: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
b480: 73 74 52 6f 77 69 64 3b 0a 0a 20 20 2f 2a 20 49  stRowid;..  /* I
b490: 66 20 61 6e 79 20 61 75 78 69 6c 69 61 72 79 20  f any auxiliary 
b4a0: 64 61 74 61 20 66 75 6e 63 74 69 6f 6e 73 20 68  data functions h
b4b0: 61 76 65 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  ave been called 
b4c0: 62 79 20 74 68 69 73 20 75 73 65 72 20 66 75 6e  by this user fun
b4d0: 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d 65  ction,.  ** imme
b4e0: 64 69 61 74 65 6c 79 20 63 61 6c 6c 20 74 68 65  diately call the
b4f0: 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20   destructor for 
b500: 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69 63 20 76  any non-static v
b510: 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66  alues..  */.  if
b520: 28 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20  ( ctx.pVdbeFunc 
b530: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
b540: 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61 28  beDeleteAuxData(
b550: 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2c 20 70  ctx.pVdbeFunc, p
b560: 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 70 4f 70  Op->p1);.    pOp
b570: 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 20 3d  ->p4.pVdbeFunc =
b580: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 3b 0a   ctx.pVdbeFunc;.
b590: 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20      pOp->p4type 
b5a0: 3d 20 50 34 5f 56 44 42 45 46 55 4e 43 3b 0a 20  = P4_VDBEFUNC;. 
b5b0: 20 7d 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61   }..  if( db->ma
b5c0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20  llocFailed ){.  
b5d0: 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68    /* Even though
b5e0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20   a malloc() has 
b5f0: 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c  failed, the impl
b600: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
b610: 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75  e.    ** user fu
b620: 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20  nction may have 
b630: 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65  called an sqlite
b640: 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66  3_result_XXX() f
b650: 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74  unction.    ** t
b660: 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65  o return a value
b670: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  . The following 
b680: 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e  call releases an
b690: 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20  y resources.    
b6a0: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
b6b0: 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e  th such a value.
b6c0: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
b6d0: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
b6e0: 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67  e(&ctx.s);.    g
b6f0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
b700: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e  .  /* If the fun
b710: 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61  ction returned a
b720: 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61  n error, throw a
b730: 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  n exception */. 
b740: 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72   if( ctx.isError
b750: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
b760: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
b770: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
b780: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
b790: 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20  xt(&ctx.s));.   
b7a0: 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f   rc = ctx.isErro
b7b0: 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70  r;.  }..  /* Cop
b7c0: 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  y the result of 
b7d0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74  the function int
b7e0: 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f  o register P3 */
b7f0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
b800: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 63 74  angeEncoding(&ct
b810: 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  x.s, encoding);.
b820: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
b830: 4d 6f 76 65 28 70 4f 75 74 2c 20 26 63 74 78 2e  Move(pOut, &ctx.
b840: 73 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  s);.  if( sqlite
b850: 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
b860: 4f 75 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Out) ){.    goto
b870: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 23   too_big;.  }..#
b880: 69 66 20 30 0a 20 20 2f 2a 20 54 68 65 20 61 70  if 0.  /* The ap
b890: 70 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  p-defined functi
b8a0: 6f 6e 20 68 61 73 20 64 6f 6e 65 20 73 6f 6d 65  on has done some
b8b0: 74 68 69 6e 67 20 74 68 61 74 20 61 73 20 63 61  thing that as ca
b8c0: 75 73 65 64 20 74 68 69 73 0a 20 20 2a 2a 20 73  used this.  ** s
b8d0: 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78 70 69  tatement to expi
b8e0: 72 65 2e 20 20 28 50 65 72 68 61 70 73 20 74 68  re.  (Perhaps th
b8f0: 65 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 65  e function calle
b900: 64 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  d sqlite3_exec()
b910: 0a 20 20 2a 2a 20 77 69 74 68 20 61 20 43 52 45  .  ** with a CRE
b920: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
b930: 65 6e 74 2e 29 0a 20 20 2a 2f 0a 20 20 69 66 28  ent.).  */.  if(
b940: 20 70 2d 3e 65 78 70 69 72 65 64 20 29 20 72 63   p->expired ) rc
b950: 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b   = SQLITE_ABORT;
b960: 0a 23 65 6e 64 69 66 0a 0a 20 20 52 45 47 49 53  .#endif..  REGIS
b970: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
b980: 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
b990: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
b9a0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
b9b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
b9c0: 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  tAnd P1 P2 P3 * 
b9d0: 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  *.**.** Take the
b9e0: 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66   bit-wise AND of
b9f0: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
ba00: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
ba10: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
ba20: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
ba30: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
ba40: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
ba50: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
ba60: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
ba70: 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31  Opcode: BitOr P1
ba80: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
ba90: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
baa0: 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  se OR of the val
bab0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
bac0: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
bad0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
bae0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
baf0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
bb00: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
bb10: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
bb20: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
bb30: 53 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20  ShiftLeft P1 P2 
bb40: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69  P3 * *.**.** Shi
bb50: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
bb60: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
bb70: 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20   P2 to the left 
bb80: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
bb90: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
bba0: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
bbb0: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
bbc0: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
bbd0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
bbe0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
bbf0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
bc00: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
bc10: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
bc20: 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20 50  de: ShiftRight P
bc30: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
bc40: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
bc50: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
bc60: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
bc70: 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20  right by the.** 
bc80: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
bc90: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
bca0: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
bcb0: 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65  ter P1..** Store
bcc0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
bcd0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
bce0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
bcf0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
bd00: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
bd10: 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20  ase OP_BitAnd:  
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bd30: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
bd40: 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  AND, in1, in2, o
bd50: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  ut3 */.case OP_B
bd60: 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20  itOr:           
bd70: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
bd80: 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c  s TK_BITOR, in1,
bd90: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
bda0: 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a  se OP_ShiftLeft:
bdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bdc0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49   same as TK_LSHI
bdd0: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
bde0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
bdf0: 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20  iftRight: {     
be00: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
be10: 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c   TK_RSHIFT, in1,
be20: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
be30: 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41  i64 iA;.  u64 uA
be40: 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38  ;.  i64 iB;.  u8
be50: 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26   op;..  pIn1 = &
be60: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
be70: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
be80: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
be90: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
bea0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
beb0: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
bec0: 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  s) & MEM_Null ){
bed0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
bee0: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
bef0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
bf00: 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56  .  iA = sqlite3V
bf10: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
bf20: 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65  );.  iB = sqlite
bf30: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
bf40: 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d  n1);.  op = pOp-
bf50: 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f  >opcode;.  if( o
bf60: 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a  p==OP_BitAnd ){.
bf70: 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20      iA &= iB;.  
bf80: 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50  }else if( op==OP
bf90: 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41  _BitOr ){.    iA
bfa0: 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20   |= iB;.  }else 
bfb0: 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20  if( iB!=0 ){.   
bfc0: 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f   assert( op==OP_
bfd0: 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70  ShiftRight || op
bfe0: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29  ==OP_ShiftLeft )
bff0: 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69  ;..    /* If shi
c000: 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74  fting by a negat
c010: 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66  ive amount, shif
c020: 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64  t in the other d
c030: 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  irection */.    
c040: 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20  if( iB<0 ){.    
c050: 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69    assert( OP_Shi
c060: 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66  ftRight==OP_Shif
c070: 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20  tLeft+1 );.     
c080: 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74   op = 2*OP_Shift
c090: 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20  Left + 1 - op;. 
c0a0: 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36       iB = iB>(-6
c0b0: 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20  4) ? -iB : 64;. 
c0c0: 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42     }..    if( iB
c0d0: 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41  >=64 ){.      iA
c0e0: 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d   = (iA>=0 || op=
c0f0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f  =OP_ShiftLeft) ?
c100: 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c   0 : -1;.    }el
c110: 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79  se{.      memcpy
c120: 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f  (&uA, &iA, sizeo
c130: 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66  f(uA));.      if
c140: 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  ( op==OP_ShiftLe
c150: 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41  ft ){.        uA
c160: 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d   <<= iB;.      }
c170: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41  else{.        uA
c180: 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20   >>= iB;.       
c190: 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20   /* Sign-extend 
c1a0: 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69 66 74  on a right shift
c1b0: 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e   of a negative n
c1c0: 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  umber */.       
c1d0: 20 69 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c   if( iA<0 ) uA |
c1e0: 3d 20 28 28 28 28 75 36 34 29 30 78 66 66 66 66  = ((((u64)0xffff
c1f0: 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66  ffff)<<32)|0xfff
c200: 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42  fffff) << (64-iB
c210: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
c220: 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41   memcpy(&iA, &uA
c230: 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20  , sizeof(iA));. 
c240: 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d     }.  }.  pOut-
c250: 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d  >u.i = iA;.  Mem
c260: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
c270: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
c280: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c290: 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32  e: AddImm  P1 P2
c2a0: 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64   * * *.** .** Ad
c2b0: 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50  d the constant P
c2c0: 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  2 to the value i
c2d0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
c2e0: 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20  * The result is 
c2f0: 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65  always an intege
c300: 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63  r..**.** To forc
c310: 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74  e any register t
c320: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c  o be an integer,
c330: 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a   just add 0..*/.
c340: 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20  case OP_AddImm: 
c350: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
c360: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
c370: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
c380: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
c390: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73  ge(p, pIn1);.  s
c3a0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
c3b0: 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
c3c0: 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
c3d0: 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  p->p2;.  break;.
c3e0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  }../* Opcode: Mu
c3f0: 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20  stBeInt P1 P2 * 
c400: 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65  * *.** .** Force
c410: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
c420: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
c430: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
c440: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
c450: 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P1 is not an int
c460: 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20  eger and cannot 
c470: 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
c480: 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  o an integer.** 
c490: 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73  without data los
c4a0: 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  s, then jump imm
c4b0: 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20  ediately to P2, 
c4c0: 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72  or if P2==0.** r
c4d0: 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d  aise an SQLITE_M
c4e0: 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f  ISMATCH exceptio
c4f0: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  n..*/.case OP_Mu
c500: 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20  stBeInt: {      
c510: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
c520: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
c530: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
c540: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
c550: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
c560: 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
c570: 67 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  g);.  if( (pIn1-
c580: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
c590: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
c5a0: 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
c5b0: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
c5c0: 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  MISMATCH;.      
c5d0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
c5e0: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
c5f0: 73 65 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70  se{.      pc = p
c600: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
c610: 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4d  }.  }else{.    M
c620: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
c630: 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  n1, MEM_Int);.  
c640: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
c650: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
c660: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
c670: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
c680: 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20  Affinity P1 * * 
c690: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67  * *.**.** If reg
c6a0: 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61  ister P1 holds a
c6b0: 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72  n integer conver
c6c0: 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76  t it to a real v
c6d0: 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  alue..**.** This
c6e0: 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
c6f0: 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20  when extracting 
c700: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
c710: 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a   a column that.*
c720: 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e  * has REAL affin
c730: 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d  ity.  Such colum
c740: 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69  n values may sti
c750: 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a  ll be stored as.
c760: 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72  ** integers, for
c770: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63   space efficienc
c780: 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74  y, but after ext
c790: 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20  raction we want 
c7a0: 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20  them.** to have 
c7b0: 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75  only a real valu
c7c0: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  e..*/.case OP_Re
c7d0: 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20  alAffinity: {   
c7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c7f0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
c800: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
c810: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
c820: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
c830: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c840: 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29  MemRealify(pIn1)
c850: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
c860: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
c870: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
c880: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54  T./* Opcode: ToT
c890: 65 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ext P1 * * * *.*
c8a0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
c8b0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c8c0: 20 50 31 20 74 6f 20 62 65 20 74 65 78 74 2e 0a   P1 to be text..
c8d0: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
c8e0: 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76  is numeric, conv
c8f0: 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69  ert it to a stri
c900: 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  ng using the.** 
c910: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 70 72  equivalent of pr
c920: 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61  intf().  Blob va
c930: 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67  lues are unchang
c940: 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66  ed and.** are af
c950: 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20  terwards simply 
c960: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 74  interpreted as t
c970: 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ext..**.** A NUL
c980: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
c990: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
c9a0: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
c9b0: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
c9c0: 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20  e OP_ToText: {  
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9e0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
c9f0: 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20  _TEXT, in1 */.  
ca00: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
ca10: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
ca20: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
ca30: 31 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1);.  if( pIn1->
ca40: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
ca50: 20 29 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65   ) break;.  asse
ca60: 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45  rt( MEM_Str==(ME
ca70: 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20  M_Blob>>3) );.  
ca80: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28  pIn1->flags |= (
ca90: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
caa0: 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c  Blob)>>3;.  appl
cab0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
cac0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
cad0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63   encoding);.  rc
cae0: 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
caf0: 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  n1);.  assert( p
cb00: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
cb10: 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  _Str || db->mall
cb20: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49  ocFailed );.  pI
cb30: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
cb40: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
cb50: 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72  MEM_Blob|MEM_Zer
cb60: 6f 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  o);.  UPDATE_MAX
cb70: 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
cb80: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
cb90: 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50  Opcode: ToBlob P
cba0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
cbb0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
cbc0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
cbd0: 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20  o be a BLOB..** 
cbe0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
cbf0: 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74  numeric, convert
cc00: 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20   it to a string 
cc10: 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67  first..** String
cc20: 73 20 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69  s are simply rei
cc30: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 62 6c  nterpreted as bl
cc40: 6f 62 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e  obs with no chan
cc50: 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64  ge.** to the und
cc60: 65 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a  erlying data..**
cc70: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
cc80: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
cc90: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
cca0: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
ccb0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
ccc0: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
ccd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cce0: 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20   as TK_TO_BLOB, 
ccf0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
cd00: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
cd10: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
cd20: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62  s & MEM_Null ) b
cd30: 72 65 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e  reak;.  if( (pIn
cd40: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  1->flags & MEM_B
cd50: 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  lob)==0 ){.    a
cd60: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
cd70: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  1, SQLITE_AFF_TE
cd80: 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  XT, encoding);. 
cd90: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d     assert( pIn1-
cda0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
cdb0: 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61   || db->mallocFa
cdc0: 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53  iled );.    MemS
cdd0: 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c  etTypeFlag(pIn1,
cde0: 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65   MEM_Blob);.  }e
cdf0: 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66  lse{.    pIn1->f
ce00: 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79  lags &= ~(MEM_Ty
ce10: 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62  peMask&~MEM_Blob
ce20: 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
ce30: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
ce40: 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1);.  break;.}..
ce50: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d  /* Opcode: ToNum
ce60: 65 72 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  eric P1 * * * *.
ce70: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
ce80: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
ce90: 72 20 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72  r P1 to be numer
cea0: 69 63 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a  ic (either an.**
ceb0: 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c   integer or a fl
cec0: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d  oating-point num
ced0: 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20  ber.).** If the 
cee0: 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72  value is text or
cef0: 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f   blob, try to co
cf00: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75  nvert it to an u
cf10: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
cf20: 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29  valent of atoi()
cf30: 20 6f 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73   or atof() and s
cf40: 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63  tore 0 if no suc
cf50: 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a  h conversion .**
cf60: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
cf70: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
cf80: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
cf90: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
cfa0: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
cfb0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
cfc0: 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20  Numeric: {      
cfd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
cfe0: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d  ame as TK_TO_NUM
cff0: 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  ERIC, in1 */.  p
d000: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
d010: 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p1];.  sqlite3V
d020: 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70  dbeMemNumerify(p
d030: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
d040: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
d050: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
d060: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74  /* Opcode: ToInt
d070: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
d080: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
d090: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
d0a0: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
d0b0: 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61  r.  If.** The va
d0c0: 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79  lue is currently
d0d0: 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20   a real number, 
d0e0: 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f  drop its fractio
d0f0: 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20  nal part..** If 
d100: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
d110: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
d120: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
d130: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
d140: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
d150: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
d160: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
d170: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
d180: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
d190: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
d1a0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
d1b0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
d1c0: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
d1d0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e  .*/.case OP_ToIn
d1e0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
d1f0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d200: 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20   TK_TO_INT, in1 
d210: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
d220: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
d230: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
d240: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
d250: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d260: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
d270: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
d280: 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  ;.}..#if !define
d290: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  d(SQLITE_OMIT_CA
d2a0: 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ST) && !defined(
d2b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
d2c0: 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20 4f  TING_POINT)./* O
d2d0: 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31  pcode: ToReal P1
d2e0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
d2f0: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
d300: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
d310: 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   be a floating p
d320: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20  oint number..** 
d330: 49 66 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  If The value is 
d340: 63 75 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74  currently an int
d350: 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74  eger, convert it
d360: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
d370: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
d380: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
d390: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
d3a0: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
d3b0: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
d3c0: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
d3d0: 2e 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f  .0 if no such co
d3e0: 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73  nversion is poss
d3f0: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
d400: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
d410: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
d420: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
d430: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
d440: 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20  se OP_ToReal: { 
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d460: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
d470: 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20  O_REAL, in1 */. 
d480: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d490: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
d4a0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
d4b0: 6e 31 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  n1);.  if( (pIn1
d4c0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
d4d0: 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  ll)==0 ){.    sq
d4e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
d4f0: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
d500: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
d510: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
d520: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26  ITE_OMIT_CAST) &
d530: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
d540: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
d550: 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f 2a 20 4f 70  POINT) */../* Op
d560: 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50  code: Lt P1 P2 P
d570: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f  3 P4 P5.**.** Co
d580: 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  mpare the values
d590: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
d5a0: 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28  and P3.  If reg(
d5b0: 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e  P3)<reg(P1) then
d5c0: 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  .** jump to addr
d5d0: 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20  ess P2.  .**.** 
d5e0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
d5f0: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20  MPIFNULL bit of 
d600: 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69  P5 is set and ei
d610: 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a  ther reg(P1) or.
d620: 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55  ** reg(P3) is NU
d630: 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
d640: 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53   jump.  If the S
d650: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
d660: 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61   .** bit is clea
d670: 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  r then fall thro
d680: 75 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70  ugh if either op
d690: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a  erand is NULL..*
d6a0: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
d6b0: 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e  AFF_MASK portion
d6c0: 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61   of P5 must be a
d6d0: 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61  n affinity chara
d6e0: 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45  cter -.** SQLITE
d6f0: 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54  _AFF_TEXT, SQLIT
d700: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61  E_AFF_INTEGER, a
d710: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20  nd so forth. An 
d720: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
d730: 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f  .** to coerce bo
d740: 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64  th inputs accord
d750: 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69  ing to this affi
d760: 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a  nity before the.
d770: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ** comparison is
d780: 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51   made. If the SQ
d790: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73  LITE_AFF_MASK is
d7a0: 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65   0x00, then nume
d7b0: 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20  ric.** affinity 
d7c0: 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68  is used. Note th
d7d0: 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  at the affinity 
d7e0: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20  conversions are 
d7f0: 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69  stored.** back i
d800: 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65  nto the input re
d810: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
d820: 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f  3.  So this opco
d830: 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20  de can cause.** 
d840: 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67  persistent chang
d850: 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20  es to registers 
d860: 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a  P1 and P3..**.**
d870: 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72   Once any conver
d880: 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e  sions have taken
d890: 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74   place, and neit
d8a0: 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  her value is NUL
d8b0: 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  L, .** the value
d8c0: 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20  s are compared. 
d8d0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
d8e0: 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65  re blobs then me
d8f0: 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65  mcmp() is.** use
d900: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
d910: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
d920: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
d930: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a  f both values.**
d940: 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20   are text, then 
d950: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
d960: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
d970: 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a  on specified in.
d980: 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74  ** P4 is  used t
d990: 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  o do the compari
d9a0: 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e  son.  If P4 is n
d9b0: 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65  ot specified the
d9c0: 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73  n.** memcmp() is
d9d0: 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
d9e0: 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49   text string.  I
d9f0: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
da00: 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68  e.** numeric, th
da10: 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d  en a numeric com
da20: 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e  parison is used.
da30: 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75   If the two valu
da40: 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66  es.** are of dif
da50: 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68  ferent types, th
da60: 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63  en numbers are c
da70: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
da80: 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61  han.** strings a
da90: 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63  nd strings are c
daa0: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
dab0: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a  han blobs..**.**
dac0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   If the SQLITE_S
dad0: 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20 50 35  TOREP2 bit of P5
dae0: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f   is set, then do
daf0: 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74   not jump.  Inst
db00: 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20  ead,.** store a 
db10: 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28  boolean result (
db20: 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20  either 0, or 1, 
db30: 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69  or NULL) in regi
db40: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
db50: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  f the SQLITE_NUL
db60: 4c 45 51 20 62 69 74 20 69 73 20 73 65 74 20 69  LEQ bit is set i
db70: 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20  n P5, then NULL 
db80: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
db90: 64 65 72 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74  dered.** equal t
dba0: 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70  o one another, p
dbb0: 72 6f 76 69 64 65 64 20 74 68 61 74 20 74 68 65  rovided that the
dbc0: 79 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 68  y do not have th
dbd0: 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a  eir MEM_Cleared.
dbe0: 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f  ** bit set..*/./
dbf0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
dc00: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
dc10: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
dc20: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
dc30: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
dc40: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
dc50: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
dc60: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
dc70: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
dc80: 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65   not equal.  See
dc90: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
dca0: 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  or.** additional
dcb0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
dcc0: 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55  .** If SQLITE_NU
dcd0: 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50  LLEQ is set in P
dce0: 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  5 then the resul
dcf0: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
dd00: 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  is always either
dd10: 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73  .** true or fals
dd20: 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e  e and is never N
dd30: 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70  ULL.  If both op
dd40: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
dd50: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a  then the result.
dd60: 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  ** of comparison
dd70: 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20 65   is false.  If e
dd80: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
dd90: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
dda0: 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a  esult is true..*
ddb0: 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65  * If neither ope
ddc0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
ddd0: 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73   result is the s
dde0: 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20  ame as it would 
ddf0: 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c  be if.** the SQL
de00: 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20  ITE_NULLEQ flag 
de10: 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  were omitted fro
de20: 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  m P5..*/./* Opco
de30: 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20  de: Eq P1 P2 P3 
de40: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
de50: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
de60: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
de70: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
de80: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
de90: 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  ** the operands 
dea0: 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
deb0: 61 6e 64 20 50 33 20 61 72 65 20 65 71 75 61 6c  and P3 are equal
dec0: 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20  ..** See the Lt 
ded0: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
dee0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
def0: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  n..**.** If SQLI
df00: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
df10: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
df20: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
df30: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
df40: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
df50: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
df60: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
df70: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
df80: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
df90: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
dfa0: 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20  rison is true.  
dfb0: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
dfc0: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  d is NULL then t
dfd0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c  he result is fal
dfe0: 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  se..** If neithe
dff0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e000: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
e010: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
e020: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
e030: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e040: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
e050: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a  d from P5..*/./*
e060: 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50   Opcode: Le P1 P
e070: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
e080: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
e090: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
e0a0: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
e0b0: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
e0c0: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
e0d0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
e0e0: 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P3 is less than 
e0f0: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
e100: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
e110: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
e120: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
e130: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
e140: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
e150: 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32  Opcode: Gt P1 P2
e160: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
e170: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
e180: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
e190: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
e1a0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
e1b0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
e1c0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
e1d0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
e1e0: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
e1f0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
e200: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
e210: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
e220: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
e230: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
e240: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
e250: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
e260: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
e270: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
e280: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
e290: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
e2a0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
e2b0: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
e2c0: 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
e2d0: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
e2e0: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
e2f0: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
e300: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
e310: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
e320: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a  ..*/.case OP_Eq:
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e340: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c  * same as TK_EQ,
e350: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
e360: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20  */.case OP_Ne:  
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e380: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a  same as TK_NE, j
e390: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
e3a0: 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20  .case OP_Lt:    
e3b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
e3c0: 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d  me as TK_LT, jum
e3d0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
e3e0: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20  ase OP_Le:      
e3f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e400: 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c   as TK_LE, jump,
e410: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
e420: 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20  e OP_Gt:        
e430: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
e440: 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69  s TK_GT, jump, i
e450: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
e460: 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20  OP_Ge: {        
e470: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
e480: 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GE, jump, in1
e490: 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
e4a0: 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  es;            /
e4b0: 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20  * Result of the 
e4c0: 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49  comparison of pI
e4d0: 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20  n1 against pIn3 
e4e0: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
e4f0: 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ty;      /* Affi
e500: 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20  nity to use for 
e510: 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20  comparison */.  
e520: 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20  u16 flags1;     
e530: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
e540: 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
e550: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20  pIn1->flags */. 
e560: 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20   u16 flags3;    
e570: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
e580: 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
e590: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a   pIn3->flags */.
e5a0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
e5b0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
e5c0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
e5d0: 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49  ];.  flags1 = pI
e5e0: 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61  n1->flags;.  fla
e5f0: 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  gs3 = pIn3->flag
e600: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31  s;.  if( (flags1
e610: 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e   | flags3)&MEM_N
e620: 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  ull ){.    /* On
e630: 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e  e or both operan
e640: 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20  ds are NULL */. 
e650: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
e660: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29   SQLITE_NULLEQ )
e670: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51  {.      /* If SQ
e680: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
e690: 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f  et (which will o
e6a0: 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68  nly happen if th
e6b0: 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20  e operator is.  
e6c0: 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20      ** OP_Eq or 
e6d0: 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65  OP_Ne) then take
e6e0: 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74   the jump or not
e6f0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
e700: 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f  ether.      ** o
e710: 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61  r not both opera
e720: 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20  nds are null..  
e730: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
e740: 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
e750: 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e  ==OP_Eq || pOp->
e760: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
e770: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
e780: 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65  flags1 & MEM_Cle
e790: 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ared)==0 );.    
e7a0: 20 20 69 66 28 20 28 66 6c 61 67 73 31 26 4d 45    if( (flags1&ME
e7b0: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
e7c0: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
e7d0: 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20  _Null)!=0.      
e7e0: 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f   && (flags3&MEM_
e7f0: 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20  Cleared)==0.    
e800: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73    ){.        res
e810: 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74   = 0;  /* Result
e820: 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
e830: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
e840: 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a      res = 1;  /*
e850: 20 52 65 73 75 6c 74 73 20 61 72 65 20 6e 6f 74   Results are not
e860: 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
e870: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
e880: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c     /* SQLITE_NUL
e890: 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64  LEQ is clear and
e8a0: 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70   at least one op
e8b0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20  erand is NULL,. 
e8c0: 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
e8d0: 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
e8e0: 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a  s NULL..      **
e8f0: 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   The jump is tak
e900: 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45  en if the SQLITE
e910: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
e920: 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f  is set..      */
e930: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
e940: 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
e950: 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70  EP2 ){.        p
e960: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
e970: 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65  >p2];.        Me
e980: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
e990: 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
e9a0: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
e9b0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
e9c0: 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ut);.      }else
e9d0: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
e9e0: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
e9f0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d   ){.        pc =
ea00: 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20   pOp->p2-1;.    
ea10: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
ea20: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
ea30: 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f      /* Neither o
ea40: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20  perand is NULL. 
ea50: 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   Do a comparison
ea60: 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74  . */.    affinit
ea70: 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  y = pOp->p5 & SQ
ea80: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20  LITE_AFF_MASK;. 
ea90: 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 20     if( affinity 
eaa0: 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  ){.      applyAf
eab0: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66 66  finity(pIn1, aff
eac0: 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29  inity, encoding)
ead0: 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  ;.      applyAff
eae0: 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69  inity(pIn3, affi
eaf0: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
eb00: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6d  .      if( db->m
eb10: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
eb20: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
eb30: 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ..    assert( pO
eb40: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
eb50: 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
eb60: 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
eb70: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
eb80: 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  );.    ExpandBlo
eb90: 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 72 65 73  b(pIn3);.    res
eba0: 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
ebb0: 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c  pare(pIn3, pIn1,
ebc0: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b   pOp->p4.pColl);
ebd0: 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70  .  }.  switch( p
ebe0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
ebf0: 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20    case OP_Eq:   
ec00: 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20   res = res==0;  
ec10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
ec20: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73  se OP_Ne:    res
ec30: 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62   = res!=0;     b
ec40: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
ec50: 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Lt:    res = r
ec60: 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es<0;      break
ec70: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65  ;.    case OP_Le
ec80: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d  :    res = res<=
ec90: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
eca0: 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20    case OP_Gt:   
ecb0: 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20   res = res>0;   
ecc0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
ecd0: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73  fault:       res
ece0: 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62   = res>=0;     b
ecf0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
ed00: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
ed10: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
ed20: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
ed30: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41  p->p2];.    memA
ed40: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
ed50: 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65  pOut);.    MemSe
ed60: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
ed70: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
ed80: 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20  ut->u.i = res;. 
ed90: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
eda0: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
edb0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65  ;.  }else if( re
edc0: 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
edd0: 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 0a 20 20  p->p2-1;.  }..  
ede0: 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e  /* Undo any chan
edf0: 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c  ges made by appl
ee00: 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74  yAffinity() to t
ee10: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
ee20: 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66  rs. */.  pIn1->f
ee30: 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e 66 6c  lags = (pIn1->fl
ee40: 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73  ags&~MEM_TypeMas
ee50: 6b 29 20 7c 20 28 66 6c 61 67 73 31 26 4d 45 4d  k) | (flags1&MEM
ee60: 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 70 49  _TypeMask);.  pI
ee70: 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e  n3->flags = (pIn
ee80: 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79  3->flags&~MEM_Ty
ee90: 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
eea0: 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b  3&MEM_TypeMask);
eeb0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
eec0: 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
eed0: 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
eee0: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
eef0: 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
ef00: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
ef10: 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74  operator to be t
ef20: 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69  he array.** of i
ef30: 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a  ntegers in P4..*
ef40: 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61  *.** The permuta
ef50: 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c  tion is only val
ef60: 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  id until the nex
ef70: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61  t OP_Compare tha
ef80: 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46  t has.** the OPF
ef90: 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
efa0: 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63  set in P5. Typic
efb0: 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d  ally the OP_Perm
efc0: 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a  utation should .
efd0: 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61  ** occur immedia
efe0: 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68  tely prior to th
eff0: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f  e OP_Compare..*/
f000: 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61  .case OP_Permuta
f010: 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74  tion: {.  assert
f020: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
f030: 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
f040: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
f050: 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65  ai );.  aPermute
f060: 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
f070: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
f080: 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31  code: Compare P1
f090: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
f0a0: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76  ** Compare two v
f0b0: 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
f0c0: 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
f0d0: 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61  reg(P1+P3-1) (ca
f0e0: 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f  ll this.** vecto
f0f0: 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65  r "A") and in re
f100: 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33  g(P2)..reg(P2+P3
f110: 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65  -1) ("B").  Save
f120: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
f130: 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
f140: 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the 
f150: 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73  next OP_Jump ins
f160: 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  truct..**.** If 
f170: 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
f180: 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
f190: 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65  t, then the orde
f1a0: 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  r of comparison 
f1b0: 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64  is.** determined
f1c0: 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
f1d0: 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ent OP_Permutati
f1e0: 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66  on operator.  If
f1f0: 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50   the.** OPFLAG_P
f200: 45 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c  ERMUTE bit is cl
f210: 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74  ear, then regist
f220: 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20  er are compared 
f230: 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a  in sequential.**
f240: 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   order..**.** P4
f250: 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   is a KeyInfo st
f260: 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66  ructure that def
f270: 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ines collating s
f280: 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72  equences and sor
f290: 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20  t.** orders for 
f2a0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
f2b0: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
f2c0: 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69   applies to regi
f2d0: 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  sters.** only.  
f2e0: 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d  The KeyInfo elem
f2f0: 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65  ents are used se
f300: 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a  quentially..**.*
f310: 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * The comparison
f320: 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61   is a sort compa
f330: 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20  rison, so NULLs 
f340: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a  compare equal,.*
f350: 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73  * NULLs are less
f360: 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e   than numbers, n
f370: 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20  umbers are less 
f380: 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a  than strings,.**
f390: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
f3a0: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
f3b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d  ..*/.case OP_Com
f3c0: 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  pare: {.  int n;
f3d0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
f3e0: 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  p1;.  int p2;.  
f3f0: 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70  const KeyInfo *p
f400: 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69  KeyInfo;.  int i
f410: 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  dx;.  CollSeq *p
f420: 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c  Coll;    /* Coll
f430: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74  ating sequence t
f440: 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65  o use on this te
f450: 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76  rm */.  int bRev
f460: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
f470: 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e  ue for DESCENDIN
f480: 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a  G sort order */.
f490: 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20  .  if( (pOp->p5 
f4a0: 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  & OPFLAG_PERMUTE
f4b0: 29 3d 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20  )==0 ) aPermute 
f4c0: 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  = 0;.  n = pOp->
f4d0: 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d  p3;.  pKeyInfo =
f4e0: 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
f4f0: 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  o;.  assert( n>0
f500: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
f510: 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70  eyInfo!=0 );.  p
f520: 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
f530: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66  2 = pOp->p2;.#if
f540: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
f550: 69 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a  if( aPermute ){.
f560: 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20      int k, mx = 
f570: 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20  0;.    for(k=0; 
f580: 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50  k<n; k++) if( aP
f590: 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d  ermute[k]>mx ) m
f5a0: 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b  x = aPermute[k];
f5b0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
f5c0: 30 20 26 26 20 70 31 2b 6d 78 3c 3d 70 2d 3e 6e  0 && p1+mx<=p->n
f5d0: 4d 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  Mem+1 );.    ass
f5e0: 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
f5f0: 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  mx<=p->nMem+1 );
f600: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
f610: 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
f620: 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  +n<=p->nMem+1 );
f630: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
f640: 30 20 26 26 20 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d  0 && p2+n<=p->nM
f650: 65 6d 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  em+1 );.  }.#end
f660: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
f670: 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b  UG */.  for(i=0;
f680: 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<n; i++){.    
f690: 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f  idx = aPermute ?
f6a0: 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69   aPermute[i] : i
f6b0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
f6c0: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
f6d0: 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61  1+idx]) );.    a
f6e0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
f6f0: 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  d(&aMem[p2+idx])
f700: 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
f710: 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26  _TRACE(p1+idx, &
f720: 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20  aMem[p1+idx]);. 
f730: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
f740: 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p2+idx, &aMem[
f750: 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73  p2+idx]);.    as
f760: 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f  sert( i<pKeyInfo
f770: 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20  ->nField );.    
f780: 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f  pColl = pKeyInfo
f790: 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20  ->aColl[i];.    
f7a0: 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  bRev = pKeyInfo-
f7b0: 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a  >aSortOrder[i];.
f7c0: 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73      iCompare = s
f7d0: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
f7e0: 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20  (&aMem[p1+idx], 
f7f0: 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70  &aMem[p2+idx], p
f800: 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69  Coll);.    if( i
f810: 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20  Compare ){.     
f820: 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d   if( bRev ) iCom
f830: 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65  pare = -iCompare
f840: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
f850: 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d     }.  }.  aPerm
f860: 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  ute = 0;.  break
f870: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
f880: 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20  Jump P1 P2 P3 * 
f890: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
f8a0: 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  the instruction 
f8b0: 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50  at address P1, P
f8c0: 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69  2, or P3 dependi
f8d0: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
f8e0: 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   in the most rec
f8f0: 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69  ent OP_Compare i
f900: 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50  nstruction the P
f910: 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73  1 vector was les
f920: 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20  s than.** equal 
f930: 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
f940: 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f  han the P2 vecto
f950: 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r, respectively.
f960: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70  .*/.case OP_Jump
f970: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
f980: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
f990: 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20   iCompare<0 ){. 
f9a0: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20     pc = pOp->p1 
f9b0: 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  - 1;.  }else if(
f9c0: 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a   iCompare==0 ){.
f9d0: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
f9e0: 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   - 1;.  }else{. 
f9f0: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20     pc = pOp->p3 
fa00: 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
fa10: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
fa20: 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
fa30: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
fa40: 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74  logical AND of t
fa50: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
fa60: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32  isters P1 and P2
fa70: 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68   and.** write th
fa80: 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65  e result into re
fa90: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
faa0: 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
fab0: 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29   P2 is 0 (false)
fac0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
fad0: 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a   is 0 even if.**
fae0: 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
faf0: 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
fb00: 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77  L and true or tw
fb10: 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20  o NULLs give.** 
fb20: 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
fb30: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20  /./* Opcode: Or 
fb40: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
fb50: 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
fb60: 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61  cal OR of the va
fb70: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
fb80: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
fb90: 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77  * store the answ
fba0: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
fbb0: 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
fbc0: 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e  er P1 or P2 is n
fbd0: 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68  onzero (true) th
fbe0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
fbf0: 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65   1 (true).** eve
fc00: 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69  n if the other i
fc10: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
fc20: 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20   NULL and false 
fc30: 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20  or two NULLs.** 
fc40: 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70  give a NULL outp
fc50: 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ut..*/.case OP_A
fc60: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
fc70: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41   /* same as TK_A
fc80: 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
fc90: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72  t3 */.case OP_Or
fca0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
fcb0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52  /* same as TK_OR
fcc0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
fcd0: 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20   */.  int v1;   
fce0: 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64   /* Left operand
fcf0: 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  :  0==FALSE, 1==
fd00: 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
fd10: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e   or NULL */.  in
fd20: 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68  t v2;    /* Righ
fd30: 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41  t operand: 0==FA
fd40: 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
fd50: 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
fd60: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
fd70: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
fd80: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
fd90: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
fda0: 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v1 = 2;.  }els
fdb0: 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69  e{.    v1 = sqli
fdc0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
fdd0: 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn1)!=0;.  }.  
fde0: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
fdf0: 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
fe00: 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  2->flags & MEM_N
fe10: 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20  ull ){.    v2 = 
fe20: 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
fe30: 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v2 = sqlite3Vdbe
fe40: 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d  IntValue(pIn2)!=
fe50: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
fe60: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64  ->opcode==OP_And
fe70: 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
fe80: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
fe90: 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d  ar and_logic[] =
fea0: 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31   { 0, 0, 0, 0, 1
feb0: 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a  , 2, 0, 2, 2 };.
fec0: 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67      v1 = and_log
fed0: 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
fee0: 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63  else{.    static
fef0: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
ff00: 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20  char or_logic[] 
ff10: 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20  = { 0, 1, 2, 1, 
ff20: 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b  1, 1, 2, 1, 2 };
ff30: 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67  .    v1 = or_log
ff40: 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
ff50: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
ff60: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
ff70: 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d  v1==2 ){.    Mem
ff80: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
ff90: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d  , MEM_Null);.  }
ffa0: 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  else{.    pOut->
ffb0: 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65  u.i = v1;.    Me
ffc0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
ffd0: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
ffe0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
fff0: 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50  Opcode: Not P1 P
10000 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
10010 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
10020 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
10030 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
10040 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  lue.  Store the.
10050 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c  ** boolean compl
10060 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65  ement in registe
10070 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61  r P2.  If the va
10080 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
10090 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  P1 is .** NULL, 
100a0 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73  then a NULL is s
100b0 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a  tored in P2..*/.
100c0 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20  case OP_Not: {  
100d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
100e0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c   same as TK_NOT,
100f0 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
10100 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
10110 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
10120 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
10130 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
10140 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
10150 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10160 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
10170 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
10180 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
10190 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69  nt64(pOut, !sqli
101a0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
101b0 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72  pIn1));.  }.  br
101c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
101d0 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20  e: BitNot P1 P2 
101e0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  * * *.**.** Inte
101f0 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e  rpret the conten
10200 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  t of register P1
10210 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   as an integer. 
10220 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e   Store the.** on
10230 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66  es-complement of
10240 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e   the P1 value in
10250 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  to register P2. 
10260 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20   If P1 holds.** 
10270 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  a NULL then stor
10280 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a  e a NULL in P2..
10290 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f  */.case OP_BitNo
102a0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
102b0 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
102c0 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32  ITNOT, in1, out2
102d0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
102e0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
102f0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
10300 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p2];.  if( pIn1
10310 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
10320 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
10330 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
10340 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
10350 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10360 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
10370 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   ~sqlite3VdbeInt
10380 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20  Value(pIn1));.  
10390 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
103a0 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31   Opcode: Once P1
103b0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
103c0 43 68 65 63 6b 20 69 66 20 4f 50 5f 4f 6e 63 65  Check if OP_Once
103d0 20 66 6c 61 67 20 50 31 20 69 73 20 73 65 74 2e   flag P1 is set.
103e0 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20   If so, jump to 
103f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
10400 4f 74 68 65 72 77 69 73 65 2c 0a 2a 2a 20 73 65  Otherwise,.** se
10410 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64 20 66  t the flag and f
10420 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
10430 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
10440 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
10450 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20  Once: {         
10460 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
10470 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
10480 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 29 3b  <p->nOnceFlag );
10490 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63 65 46  .  if( p->aOnceF
104a0 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a  lag[pOp->p1] ){.
104b0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
104c0 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
104d0 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f   p->aOnceFlag[pO
104e0 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a  p->p1] = 1;.  }.
104f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
10500 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20  pcode: If P1 P2 
10510 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
10520 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
10530 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
10540 20 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68   P1 is true.  Th
10550 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f  e value.** is co
10560 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66  nsidered true if
10570 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61   it is numeric a
10580 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66  nd non-zero.  If
10590 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
105a0 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P1 is NULL then
105b0 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
105c0 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
105d0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
105e0 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a  IfNot P1 P2 P3 *
105f0 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
10600 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
10610 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
10620 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76  is False.  The v
10630 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  alue.** is consi
10640 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20 69  dered false if i
10650 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20  t has a numeric 
10660 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20  value of zero.  
10670 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
10680 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
10690 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
106a0 20 69 66 20 50 33 20 69 73 20 7a 65 72 6f 2e 0a   if P3 is zero..
106b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20  */.case OP_If:  
106c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
106d0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63  * jump, in1 */.c
106e0 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20  ase OP_IfNot: { 
106f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
10700 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
10710 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   c;.  pIn1 = &aM
10720 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
10730 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
10740 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
10750 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   c = pOp->p3;.  
10760 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51  }else{.#ifdef SQ
10770 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
10780 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d  NG_POINT.    c =
10790 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
107a0 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23  alue(pIn1)!=0;.#
107b0 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c  else.    c = sql
107c0 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
107d0 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65  e(pIn1)!=0.0;.#e
107e0 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70  ndif.    if( pOp
107f0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e  ->opcode==OP_IfN
10800 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d  ot ) c = !c;.  }
10810 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20  .  if( c ){.    
10820 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
10830 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
10840 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
10850 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
10860 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
10870 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
10880 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55  egister P1 is NU
10890 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  LL..*/.case OP_I
108a0 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  sNull: {        
108b0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
108c0 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  K_ISNULL, jump, 
108d0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
108e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
108f0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
10900 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
10910 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
10920 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
10930 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10940 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31  code: NotNull P1
10950 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
10960 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
10970 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
10980 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55  ter P1 is not NU
10990 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  LL.  .*/.case OP
109a0 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  _NotNull: {     
109b0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
109c0 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75  s TK_NOTNULL, ju
109d0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
109e0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
109f0 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
10a00 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
10a10 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  l)==0 ){.    pc 
10a20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
10a30 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10a40 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e  * Opcode: Column
10a50 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
10a60 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
10a70 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75  the data that cu
10a80 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
10a90 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65  o as a structure
10aa0 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20   built using.** 
10ab0 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  the MakeRecord i
10ac0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65  nstruction.  (Se
10ad0 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  e the MakeRecord
10ae0 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
10af0 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d  tional.** inform
10b00 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
10b10 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61  format of the da
10b20 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68  ta.)  Extract th
10b30 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a  e P2-th column.*
10b40 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f  * from this reco
10b50 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  rd.  If there ar
10b60 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b  e less that (P2+
10b70 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e  1) .** values in
10b80 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74   the record, ext
10b90 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a  ract a NULL..**.
10ba0 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74  ** The value ext
10bb0 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64  racted is stored
10bc0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
10bd0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f  .**.** If the co
10be0 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65  lumn contains fe
10bf0 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c  wer than P2 fiel
10c00 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74  ds, then extract
10c10 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a   a NULL.  Or,.**
10c20 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   if the P4 argum
10c30 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20  ent is a P4_MEM 
10c40 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  use the value of
10c50 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
10c60 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c   as.** the resul
10c70 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
10c80 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
10c90 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20  E bit is set on 
10ca0 50 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70  P5 and P1 is a p
10cb0 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
10cc0 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  or,.** then the 
10cd0 63 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72  cache of the cur
10ce0 73 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69  sor is reset pri
10cf0 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67  or to extracting
10d00 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20   the column..** 
10d10 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c  The first OP_Col
10d20 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73  umn against a ps
10d30 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72  eudo-table after
10d40 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
10d50 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67  e content.** reg
10d60 69 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65  ister has change
10d70 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68  d should have th
10d80 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  is bit set..**.*
10d90 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
10da0 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
10db0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62  FLAG_TYPEOFARG b
10dc0 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50  its are set on P
10dd0 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65  5 when.** the re
10de0 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65  sult is guarante
10df0 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73  ed to only be us
10e00 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
10e10 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29  nt of a length()
10e20 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20  .** or typeof() 
10e30 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63  function, respec
10e40 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61  tively.  The loa
10e50 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c  ding of large bl
10e60 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b  obs can be.** sk
10e70 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68  ipped for length
10e80 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65  () and all conte
10e90 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62  nt loading can b
10ea0 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79  e skipped for ty
10eb0 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  peof()..*/.case 
10ec0 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75  OP_Column: {.  u
10ed0 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20  32 payloadSize; 
10ee0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
10ef0 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
10f00 72 64 20 2a 2f 0a 20 20 69 36 34 20 70 61 79 6c  rd */.  i64 payl
10f10 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75  oadSize64; /* Nu
10f20 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
10f30 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
10f40 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
10f50 20 20 20 20 2f 2a 20 50 31 20 76 61 6c 75 65 20      /* P1 value 
10f60 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f  of the opcode */
10f70 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
10f80 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20        /* column 
10f90 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65  number to retrie
10fa0 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ve */.  VdbeCurs
10fb0 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
10fc0 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
10fd0 0a 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20 20  .  char *zRec;  
10fe0 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
10ff0 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65 63   to complete rec
11000 6f 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74  ord-data */.  Bt
11010 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
11020 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
11030 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
11040 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Type;        /* 
11050 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74  aType[i] holds t
11060 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20  he numeric type 
11070 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75  of the i-th colu
11080 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  mn */.  u32 *aOf
11090 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
110a0 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
110b0 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
110c0 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
110d0 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  umn */.  int nFi
110e0 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e  eld;        /* n
110f0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
11100 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
11110 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20  .  int len;     
11120 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e        /* The len
11130 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61  gth of the seria
11140 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74  lized data for t
11150 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  he column */.  i
11160 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
11170 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
11180 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61  r */.  char *zDa
11190 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61 72  ta;       /* Par
111a0 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
111b0 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
111c0 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20  .  Mem *pDest;  
111d0 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74        /* Where t
111e0 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72  o write the extr
111f0 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20  acted value */. 
11200 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
11210 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
11220 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
11230 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
11240 20 75 38 20 2a 7a 49 64 78 3b 20 20 20 20 20 20   u8 *zIdx;      
11250 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
11260 6f 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 38  o header */.  u8
11270 20 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20 20 20   *zEndHdr;      
11280 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66   /* Pointer to f
11290 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20  irst byte after 
112a0 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
112b0 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20  u32 offset;     
112c0 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74     /* Offset int
112d0 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20  o the data */.  
112e0 75 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20 20  u32 szField;    
112f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11300 62 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6e  bytes in the con
11310 74 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64 20  tent of a field 
11320 2a 2f 0a 20 20 69 6e 74 20 73 7a 48 64 72 3b 20  */.  int szHdr; 
11330 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
11340 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 73 69  of the header si
11350 7a 65 20 66 69 65 6c 64 20 61 74 20 73 74 61 72  ze field at star
11360 74 20 6f 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20  t of record */. 
11370 20 69 6e 74 20 61 76 61 69 6c 3b 20 20 20 20 20   int avail;     
11380 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11390 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61   bytes of availa
113a0 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33  ble data */.  u3
113b0 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  2 t;            
113c0 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20   /* A type code 
113d0 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20  from the record 
113e0 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  header */.  Mem 
113f0 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  *pReg;         /
11400 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e  * PseudoTable in
11410 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
11420 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
11430 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
11440 3b 0a 20 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65  ;.  pC = 0;.  me
11450 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
11460 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
11470 61 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43  assert( p1<p->nC
11480 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
11490 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
114a0 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
114b0 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61   );.  pDest = &a
114c0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
114d0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
114e0 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 7a 52  (p, pDest);.  zR
114f0 65 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68  ec = 0;..  /* Th
11500 69 73 20 62 6c 6f 63 6b 20 73 65 74 73 20 74 68  is block sets th
11510 65 20 76 61 72 69 61 62 6c 65 20 70 61 79 6c 6f  e variable paylo
11520 61 64 53 69 7a 65 20 74 6f 20 62 65 20 74 68 65  adSize to be the
11530 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
11540 0a 20 20 2a 2a 20 62 79 74 65 73 20 69 6e 20 74  .  ** bytes in t
11550 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a  he record..  **.
11560 20 20 2a 2a 20 7a 52 65 63 20 69 73 20 73 65 74    ** zRec is set
11570 20 74 6f 20 62 65 20 74 68 65 20 63 6f 6d 70 6c   to be the compl
11580 65 74 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  ete text of the 
11590 72 65 63 6f 72 64 20 69 66 20 69 74 20 69 73 20  record if it is 
115a0 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20  available..  ** 
115b0 54 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63  The complete rec
115c0 6f 72 64 20 74 65 78 74 20 69 73 20 61 6c 77 61  ord text is alwa
115d0 79 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  ys available for
115e0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20   pseudo-tables. 
115f0 20 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72   ** If the recor
11600 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  d is stored in a
11610 20 63 75 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d   cursor, the com
11620 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78  plete record tex
11630 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20  t.  ** might be 
11640 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65  available in the
11650 20 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65    pC->aRow cache
11660 2e 20 20 4f 72 20 69 74 20 6d 69 67 68 74 20 6e  .  Or it might n
11670 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74  ot be..  ** If t
11680 68 65 20 64 61 74 61 20 69 73 20 75 6e 61 76 61  he data is unava
11690 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20 69 73  ilable,  zRec is
116a0 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20   set to NULL..  
116b0 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20  **.  ** We also 
116c0 63 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  compute the numb
116d0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
116e0 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 46 6f   the record.  Fo
116f0 72 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20  r cursors,.  ** 
11700 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
11710 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72 65 64 20  lumns is stored 
11720 69 6e 20 74 68 65 20 56 64 62 65 43 75 72 73 6f  in the VdbeCurso
11730 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74  r.nField element
11740 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d  ..  */.  pC = p-
11750 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73  >apCsr[p1];.  as
11760 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
11770 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
11780 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
11790 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56    assert( pC->pV
117a0 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a  tabCursor==0 );.
117b0 23 65 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d  #endif.  pCrsr =
117c0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
117d0 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a  if( pCrsr!=0 ){.
117e0 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
117f0 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  d is stored in a
11800 20 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20 72   B-Tree */.    r
11810 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
11820 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
11830 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
11840 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
11850 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
11860 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
11870 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
11880 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 0;.    }else i
11890 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
118a0 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us==p->cacheCtr 
118b0 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64  ){.      payload
118c0 53 69 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f  Size = pC->paylo
118d0 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52  adSize;.      zR
118e0 65 63 20 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e  ec = (char*)pC->
118f0 61 52 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20  aRow;.    }else 
11900 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  if( pC->isIndex 
11910 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
11920 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
11930 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
11940 29 20 29 3b 0a 20 20 20 20 20 20 56 56 41 5f 4f  ) );.      VVA_O
11950 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
11960 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
11970 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a  rsr, &payloadSiz
11980 65 36 34 29 3b 0a 20 20 20 20 20 20 61 73 73 65  e64);.      asse
11990 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
119a0 4b 20 29 3b 20 20 20 2f 2a 20 54 72 75 65 20 62  K );   /* True b
119b0 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
119c0 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62  Moveto() call ab
119d0 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20  ove */.      /* 
119e0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73  sqlite3BtreePars
119f0 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20  eCellPtr() uses 
11a00 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f  getVarint32() to
11a10 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20   extract the.   
11a20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69     ** payload si
11a30 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70  ze, so it is imp
11a40 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c  ossible for payl
11a50 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a  oadSize64 to be.
11a60 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20        ** larger 
11a70 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f  than 32 bits. */
11a80 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
11a90 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20  payloadSize64 & 
11aa0 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d  SQLITE_MAX_U32)=
11ab0 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a  =(u64)payloadSiz
11ac0 65 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61 79  e64 );.      pay
11ad0 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29  loadSize = (u32)
11ae0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20  payloadSize64;. 
11af0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
11b00 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
11b10 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
11b20 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
11b30 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
11b40 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
11b50 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61  aSize(pCrsr, &pa
11b60 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20  yloadSize);.    
11b70 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
11b80 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
11b90 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f  DataSize() canno
11ba0 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 7d 0a  t fail */.    }.
11bb0 20 20 7d 65 6c 73 65 20 69 66 28 20 41 4c 57 41    }else if( ALWA
11bc0 59 53 28 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  YS(pC->pseudoTab
11bd0 6c 65 52 65 67 3e 30 29 20 29 7b 0a 20 20 20 20  leReg>0) ){.    
11be0 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d  pReg = &aMem[pC-
11bf0 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d  >pseudoTableReg]
11c00 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6d 75  ;.    if( pC->mu
11c10 6c 74 69 50 73 65 75 64 6f 20 29 7b 0a 20 20 20  ltiPseudo ){.   
11c20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
11c30 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65  mShallowCopy(pDe
11c40 73 74 2c 20 70 52 65 67 2b 70 32 2c 20 4d 45 4d  st, pReg+p2, MEM
11c50 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 20 20 44  _Ephem);.      D
11c60 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 44  eephemeralize(pD
11c70 65 73 74 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  est);.      goto
11c80 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
11c90 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
11ca0 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20  ( pReg->flags & 
11cb0 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
11cc0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
11cd0 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20  id(pReg) );.    
11ce0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 52  payloadSize = pR
11cf0 65 67 2d 3e 6e 3b 0a 20 20 20 20 7a 52 65 63 20  eg->n;.    zRec 
11d00 3d 20 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 70  = pReg->z;.    p
11d10 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
11d20 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47   (pOp->p5&OPFLAG
11d30 5f 43 4c 45 41 52 43 41 43 48 45 29 20 3f 20 43  _CLEARCACHE) ? C
11d40 41 43 48 45 5f 53 54 41 4c 45 20 3a 20 70 2d 3e  ACHE_STALE : p->
11d50 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 61 73  cacheCtr;.    as
11d60 73 65 72 74 28 20 70 61 79 6c 6f 61 64 53 69 7a  sert( payloadSiz
11d70 65 3d 3d 30 20 7c 7c 20 7a 52 65 63 21 3d 30 20  e==0 || zRec!=0 
11d80 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11d90 2f 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 65 20  /* Consider the 
11da0 72 6f 77 20 74 6f 20 62 65 20 4e 55 4c 4c 20 2a  row to be NULL *
11db0 2f 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a  /.    payloadSiz
11dc0 65 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  e = 0;.  }..  /*
11dd0 20 49 66 20 70 61 79 6c 6f 61 64 53 69 7a 65 20   If payloadSize 
11de0 69 73 20 30 2c 20 74 68 65 6e 20 6a 75 73 74 20  is 0, then just 
11df0 73 74 6f 72 65 20 61 20 4e 55 4c 4c 2e 20 20 54  store a NULL.  T
11e00 68 69 73 20 63 61 6e 20 68 61 70 70 65 6e 20 62  his can happen b
11e10 65 63 61 75 73 65 20 6f 66 0a 20 20 2a 2a 20 6e  ecause of.  ** n
11e20 75 6c 6c 52 6f 77 20 6f 72 20 62 65 63 61 75 73  ullRow or becaus
11e30 65 20 6f 66 20 61 20 63 6f 72 72 75 70 74 20 64  e of a corrupt d
11e40 61 74 61 62 61 73 65 2e 20 2a 2f 0a 20 20 69 66  atabase. */.  if
11e50 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30  ( payloadSize==0
11e60 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79   ){.    MemSetTy
11e70 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45  peFlag(pDest, ME
11e80 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 67 6f 74  M_Null);.    got
11e90 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
11ea0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64  .  }.  assert( d
11eb0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
11ec0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d  _LIMIT_LENGTH]>=
11ed0 30 20 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f  0 );.  if( paylo
11ee0 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62  adSize > (u32)db
11ef0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
11f00 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
11f10 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
11f20 67 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64  g;.  }..  nField
11f30 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20   = pC->nField;. 
11f40 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65   assert( p2<nFie
11f50 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64  ld );..  /* Read
11f60 20 61 6e 64 20 70 61 72 73 65 20 74 68 65 20 74   and parse the t
11f70 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74  able header.  St
11f80 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ore the results 
11f90 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a  of the parse.  *
11fa0 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  * into the recor
11fb0 64 20 68 65 61 64 65 72 20 63 61 63 68 65 20 66  d header cache f
11fc0 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72  ields of the cur
11fd0 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70  sor..  */.  aTyp
11fe0 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20  e = pC->aType;. 
11ff0 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74   if( pC->cacheSt
12000 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74  atus==p->cacheCt
12010 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74  r ){.    aOffset
12020 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a   = pC->aOffset;.
12030 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
12040 65 72 74 28 61 54 79 70 65 29 3b 0a 20 20 20 20  ert(aType);.    
12050 61 76 61 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70  avail = 0;.    p
12060 43 2d 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f 66  C->aOffset = aOf
12070 66 73 65 74 20 3d 20 26 61 54 79 70 65 5b 6e 46  fset = &aType[nF
12080 69 65 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70  ield];.    pC->p
12090 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61 79  ayloadSize = pay
120a0 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 70 43  loadSize;.    pC
120b0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
120c0 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20 20  p->cacheCtr;..  
120d0 20 20 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20    /* Figure out 
120e0 68 6f 77 20 6d 61 6e 79 20 62 79 74 65 73 20 61  how many bytes a
120f0 72 65 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  re in the header
12100 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a 52 65 63   */.    if( zRec
12110 20 29 7b 0a 20 20 20 20 20 20 7a 44 61 74 61 20   ){.      zData 
12120 3d 20 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73  = zRec;.    }els
12130 65 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  e{.      if( pC-
12140 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
12150 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61      zData = (cha
12160 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 4b  r*)sqlite3BtreeK
12170 65 79 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  eyFetch(pCrsr, &
12180 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65  avail);.      }e
12190 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61  lse{.        zDa
121a0 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69  ta = (char*)sqli
121b0 74 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63  te3BtreeDataFetc
121c0 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29  h(pCrsr, &avail)
121d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
121e0 2f 2a 20 49 66 20 4b 65 79 46 65 74 63 68 28 29  /* If KeyFetch()
121f0 2f 44 61 74 61 46 65 74 63 68 28 29 20 6d 61 6e  /DataFetch() man
12200 61 67 65 64 20 74 6f 20 67 65 74 20 74 68 65 20  aged to get the 
12210 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a  entire payload,.
12220 20 20 20 20 20 20 2a 2a 20 73 61 76 65 20 74 68        ** save th
12230 65 20 70 61 79 6c 6f 61 64 20 69 6e 20 74 68 65  e payload in the
12240 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e   pC->aRow cache.
12250 20 20 54 68 61 74 20 77 69 6c 6c 20 73 61 76 65    That will save
12260 20 75 73 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a   us from.      *
12270 2a 20 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65  * having to make
12280 20 61 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c   additional call
12290 73 20 74 6f 20 66 65 74 63 68 20 74 68 65 20 63  s to fetch the c
122a0 6f 6e 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f  ontent portion o
122b0 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72  f.      ** the r
122c0 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a  ecord..      */.
122d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76        assert( av
122e0 61 69 6c 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20  ail>=0 );.      
122f0 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20  if( payloadSize 
12300 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b  <= (u32)avail ){
12310 0a 20 20 20 20 20 20 20 20 7a 52 65 63 20 3d 20  .        zRec = 
12320 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 20 20 70  zData;.        p
12330 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a  C->aRow = (u8*)z
12340 44 61 74 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Data;.      }els
12350 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  e{.        pC->a
12360 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  Row = 0;.      }
12370 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68  .    }.    /* Th
12380 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65  e following asse
12390 72 74 20 69 73 20 74 72 75 65 20 69 6e 20 61 6c  rt is true in al
123a0 6c 20 63 61 73 65 73 20 65 78 63 65 70 74 20 77  l cases except w
123b0 68 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 64  hen.    ** the d
123c0 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 61 73  atabase file has
123d0 20 62 65 65 6e 20 63 6f 72 72 75 70 74 65 64 20   been corrupted 
123e0 65 78 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20  externally..    
123f0 2a 2a 20 20 20 20 61 73 73 65 72 74 28 20 7a 52  **    assert( zR
12400 65 63 21 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d  ec!=0 || avail>=
12410 70 61 79 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61  payloadSize || a
12420 76 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20  vail>=9 ); */.  
12430 20 20 73 7a 48 64 72 20 3d 20 67 65 74 56 61 72    szHdr = getVar
12440 69 6e 74 33 32 28 28 75 38 2a 29 7a 44 61 74 61  int32((u8*)zData
12450 2c 20 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20 20  , offset);..    
12460 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63  /* Make sure a c
12470 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20  orrupt database 
12480 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73  has not given us
12490 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61   an oversize hea
124a0 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74  der..    ** Do t
124b0 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64  his now to avoid
124c0 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d   an oversize mem
124d0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a  ory allocation..
124e0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79      **.    ** Ty
124f0 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62  pe entries can b
12500 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
12510 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42  5 bytes each.  B
12520 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a  ut 4 and 5 byte.
12530 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65      ** types use
12540 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70   so much data sp
12550 61 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63  ace that there c
12560 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20  an only be 4096 
12570 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a  and 32 of.    **
12580 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76   them, respectiv
12590 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78  ely.  So the max
125a0 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67  imum header leng
125b0 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  th results from 
125c0 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20  a.    ** 3-byte 
125d0 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66  type for each of
125e0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
125f0 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c  32768 columns pl
12600 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20  us three.    ** 
12610 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20  extra bytes for 
12620 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74  the header lengt
12630 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38  h itself.  32768
12640 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a  *3 + 3 = 98307..
12650 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f      */.    if( o
12660 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 29 7b  ffset > 98307 ){
12670 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
12680 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
12690 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
126a0 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
126b0 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65  ..    /* Compute
126c0 20 69 6e 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62   in len the numb
126d0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
126e0 61 74 61 20 77 65 20 6e 65 65 64 20 74 6f 20 72  ata we need to r
126f0 65 61 64 20 69 6e 20 6f 72 64 65 72 0a 20 20 20  ead in order.   
12700 20 2a 2a 20 74 6f 20 67 65 74 20 6e 46 69 65 6c   ** to get nFiel
12710 64 20 74 79 70 65 20 76 61 6c 75 65 73 2e 20 20  d type values.  
12720 6f 66 66 73 65 74 20 69 73 20 61 6e 20 75 70 70  offset is an upp
12730 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73  er bound on this
12740 2e 20 20 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46  .  But.    ** nF
12750 69 65 6c 64 20 6d 69 67 68 74 20 62 65 20 73 69  ield might be si
12760 67 6e 69 66 69 63 61 6e 74 6c 79 20 6c 65 73 73  gnificantly less
12770 20 74 68 61 6e 20 74 68 65 20 74 72 75 65 20 6e   than the true n
12780 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
12790 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 74  .    ** in the t
127a0 61 62 6c 65 2c 20 61 6e 64 20 69 6e 20 74 68 61  able, and in tha
127b0 74 20 63 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64  t case, 5*nField
127c0 2b 33 20 6d 69 67 68 74 20 62 65 20 73 6d 61 6c  +3 might be smal
127d0 6c 65 72 20 74 68 61 6e 20 6f 66 66 73 65 74 2e  ler than offset.
127e0 0a 20 20 20 20 2a 2a 20 57 65 20 77 61 6e 74 20  .    ** We want 
127f0 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20  to minimize len 
12800 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69  in order to limi
12810 74 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  t the size of th
12820 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20  e memory.    ** 
12830 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65  allocation, espe
12840 63 69 61 6c 6c 79 20 69 66 20 61 20 63 6f 72 72  cially if a corr
12850 75 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c  upt database fil
12860 65 20 68 61 73 20 63 61 75 73 65 64 20 6f 66 66  e has caused off
12870 73 65 74 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  set.    ** to be
12880 20 6f 76 65 72 73 69 7a 65 64 2e 20 4f 66 66 73   oversized. Offs
12890 65 74 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f  et is limited to
128a0 20 39 38 33 30 37 20 61 62 6f 76 65 2e 20 20 42   98307 above.  B
128b0 75 74 20 39 38 33 30 37 20 6d 69 67 68 74 0a 20  ut 98307 might. 
128c0 20 20 20 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65     ** still exce
128d0 65 64 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79  ed Robson memory
128e0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69   allocation limi
128f0 74 73 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69  ts on some confi
12900 67 75 72 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a  gurations..    *
12910 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 74 68 61  * On systems tha
12920 74 20 63 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74  t cannot tolerat
12930 65 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61  e large memory a
12940 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65  llocations, nFie
12950 6c 64 2a 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69  ld*5+3.    ** wi
12960 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63  ll likely be muc
12970 68 20 73 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20  h smaller since 
12980 6e 46 69 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65  nField will like
12990 6c 79 20 62 65 20 6c 65 73 73 20 74 68 61 6e 0a  ly be less than.
129a0 20 20 20 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e      ** 20 or so.
129b0 20 20 54 68 69 73 20 69 6e 73 75 72 65 73 20 74    This insures t
129c0 68 61 74 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72  hat Robson memor
129d0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d  y allocation lim
129e0 69 74 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e  its are.    ** n
129f0 6f 74 20 65 78 63 65 65 64 65 64 20 65 76 65 6e  ot exceeded even
12a00 20 66 6f 72 20 63 6f 72 72 75 70 74 20 64 61 74   for corrupt dat
12a10 61 62 61 73 65 20 66 69 6c 65 73 2e 0a 20 20 20  abase files..   
12a20 20 2a 2f 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46   */.    len = nF
12a30 69 65 6c 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20  ield*5 + 3;.    
12a40 69 66 28 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f  if( len > (int)o
12a50 66 66 73 65 74 20 29 20 6c 65 6e 20 3d 20 28 69  ffset ) len = (i
12a60 6e 74 29 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20  nt)offset;..    
12a70 2f 2a 20 54 68 65 20 4b 65 79 46 65 74 63 68 28  /* The KeyFetch(
12a80 29 20 6f 72 20 44 61 74 61 46 65 74 63 68 28 29  ) or DataFetch()
12a90 20 61 62 6f 76 65 20 61 72 65 20 66 61 73 74 20   above are fast 
12aa0 61 6e 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65  and will get the
12ab0 20 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72   entire.    ** r
12ac0 65 63 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20  ecord header in 
12ad0 6d 6f 73 74 20 63 61 73 65 73 2e 20 20 42 75 74  most cases.  But
12ae0 20 74 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20   they will fail 
12af0 74 6f 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c  to get the compl
12b00 65 74 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72  ete.    ** recor
12b10 64 20 68 65 61 64 65 72 20 69 66 20 74 68 65 20  d header if the 
12b20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f  record header do
12b30 65 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20  es not fit on a 
12b40 73 69 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20  single page.    
12b50 2a 2a 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65  ** in the B-Tree
12b60 2e 20 20 57 68 65 6e 20 74 68 61 74 20 68 61 70  .  When that hap
12b70 70 65 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65  pens, use sqlite
12b80 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
12b90 65 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63  e() to.    ** ac
12ba0 71 75 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65  quire the comple
12bb0 74 65 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a  te header text..
12bc0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21      */.    if( !
12bd0 7a 52 65 63 20 26 26 20 61 76 61 69 6c 3c 6c 65  zRec && avail<le
12be0 6e 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e  n ){.      sMem.
12bf0 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20  flags = 0;.     
12c00 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20   sMem.db = 0;.  
12c10 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
12c20 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
12c30 28 70 43 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20  (pCrsr, 0, len, 
12c40 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d  pC->isIndex, &sM
12c50 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  em);.      if( r
12c60 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
12c70 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
12c80 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
12c90 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20    }.      zData 
12ca0 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a  = sMem.z;.    }.
12cb0 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75      zEndHdr = (u
12cc0 38 20 2a 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b  8 *)&zData[len];
12cd0 0a 20 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20  .    zIdx = (u8 
12ce0 2a 29 26 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b  *)&zData[szHdr];
12cf0 0a 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20 74 68  ..    /* Scan th
12d00 65 20 68 65 61 64 65 72 20 61 6e 64 20 75 73 65  e header and use
12d10 20 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74   it to fill in t
12d20 68 65 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 61  he aType[] and a
12d30 4f 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20  Offset[].    ** 
12d40 61 72 72 61 79 73 2e 20 20 61 54 79 70 65 5b 69  arrays.  aType[i
12d50 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74  ] will contain t
12d60 68 65 20 74 79 70 65 20 69 6e 74 65 67 65 72 20  he type integer 
12d70 66 6f 72 20 74 68 65 20 69 2d 74 68 0a 20 20 20  for the i-th.   
12d80 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61   ** column and a
12d90 4f 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63  Offset[i] will c
12da0 6f 6e 74 61 69 6e 20 74 68 65 20 6f 66 66 73 65  ontain the offse
12db0 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
12dc0 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74  ning.    ** of t
12dd0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 74 68 65  he record to the
12de0 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 64 61   start of the da
12df0 74 61 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20  ta for the i-th 
12e00 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20  column.    */.  
12e10 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69    for(i=0; i<nFi
12e20 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  eld; i++){.     
12e30 20 69 66 28 20 7a 49 64 78 3c 7a 45 6e 64 48 64   if( zIdx<zEndHd
12e40 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61 4f 66  r ){.        aOf
12e50 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74  fset[i] = offset
12e60 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 49  ;.        if( zI
12e70 64 78 5b 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20  dx[0]<0x80 ){.  
12e80 20 20 20 20 20 20 20 20 74 20 3d 20 7a 49 64 78          t = zIdx
12e90 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7a  [0];.          z
12ea0 49 64 78 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  Idx++;.        }
12eb0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
12ec0 7a 49 64 78 20 2b 3d 20 73 71 6c 69 74 65 33 47  zIdx += sqlite3G
12ed0 65 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c  etVarint32(zIdx,
12ee0 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a   &t);.        }.
12ef0 20 20 20 20 20 20 20 20 61 54 79 70 65 5b 69 5d          aType[i]
12f00 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 73 7a   = t;.        sz
12f10 46 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56  Field = sqlite3V
12f20 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
12f30 28 74 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66  (t);.        off
12f40 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a  set += szField;.
12f50 20 20 20 20 20 20 20 20 69 66 28 20 6f 66 66 73          if( offs
12f60 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f  et<szField ){  /
12f70 2a 20 54 72 75 65 20 69 66 20 6f 66 66 73 65 74  * True if offset
12f80 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20   overflows */.  
12f90 20 20 20 20 20 20 20 20 7a 49 64 78 20 3d 20 26          zIdx = &
12fa0 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20  zEndHdr[1];  /* 
12fb0 46 6f 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f  Forces SQLITE_CO
12fc0 52 52 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c  RRUPT return bel
12fd0 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ow */.          
12fe0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
12ff0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
13000 20 20 20 20 20 20 2f 2a 20 49 66 20 69 20 69 73        /* If i is
13010 20 6c 65 73 73 20 74 68 61 74 20 6e 46 69 65 6c   less that nFiel
13020 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 61 72  d, then there ar
13030 65 20 66 65 77 65 72 20 66 69 65 6c 64 73 20 69  e fewer fields i
13040 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a  n this.        *
13050 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20 53 65  * record than Se
13060 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64 69  tNumColumns indi
13070 63 61 74 65 64 20 74 68 65 72 65 20 61 72 65 20  cated there are 
13080 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20  columns in the. 
13090 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 2e         ** table.
130a0 20 53 65 74 20 74 68 65 20 6f 66 66 73 65 74 20   Set the offset 
130b0 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20 63 6f  for any extra co
130c0 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65 6e  lumns not presen
130d0 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20  t in.        ** 
130e0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 30 2e  the record to 0.
130f0 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f 64 65   This tells code
13100 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65 20   below to store 
13110 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
13120 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72  e.        ** for
13130 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 73 74   the column inst
13140 65 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c 69  ead of deseriali
13150 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72 6f  zing a value fro
13160 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  m the record..  
13170 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
13180 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b   aOffset[i] = 0;
13190 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
131a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
131b0 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
131c0 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20  .    sMem.flags 
131d0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20  = MEM_Null;..   
131e0 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72   /* If we have r
131f0 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20  ead more header 
13200 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f  data than was co
13210 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68  ntained in the h
13220 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72  eader,.    ** or
13230 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
13240 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
13250 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74  pears to be past
13260 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
13270 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f      ** record, o
13280 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
13290 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
132a0 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66  ppears to be bef
132b0 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20  ore the end.    
132c0 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
132d0 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64   (when all field
132e0 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e  s present), then
132f0 20 77 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c   we must be deal
13300 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74 68  ing .    ** with
13310 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
13320 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ase..    */.    
13330 69 66 28 20 28 7a 49 64 78 20 3e 20 7a 45 6e 64  if( (zIdx > zEnd
13340 48 64 72 29 20 7c 7c 20 28 6f 66 66 73 65 74 20  Hdr) || (offset 
13350 3e 20 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20  > payloadSize). 
13360 20 20 20 20 20 20 20 20 7c 7c 20 28 7a 49 64 78          || (zIdx
13370 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66  ==zEndHdr && off
13380 73 65 74 21 3d 70 61 79 6c 6f 61 64 53 69 7a 65  set!=payloadSize
13390 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  ) ){.      rc = 
133a0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
133b0 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
133c0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
133d0 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47     }.  }..  /* G
133e0 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  et the column in
133f0 66 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20 61 4f  formation. If aO
13400 66 66 73 65 74 5b 70 32 5d 20 69 73 20 6e 6f 6e  ffset[p2] is non
13410 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20 20 2a  -zero, then .  *
13420 2a 20 64 65 73 65 72 69 61 6c 69 7a 65 20 74 68  * deserialize th
13430 65 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  e value from the
13440 20 72 65 63 6f 72 64 2e 20 49 66 20 61 4f 66 66   record. If aOff
13450 73 65 74 5b 70 32 5d 20 69 73 20 7a 65 72 6f 2c  set[p2] is zero,
13460 0a 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 72 65  .  ** then there
13470 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20   are not enough 
13480 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
13490 63 6f 72 64 20 74 6f 20 73 61 74 69 73 66 79 20  cord to satisfy 
134a0 74 68 65 0a 20 20 2a 2a 20 72 65 71 75 65 73 74  the.  ** request
134b0 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
134c0 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 4e   set the value N
134d0 55 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69 66 20  ULL or to P4 if 
134e0 50 34 20 69 73 0a 20 20 2a 2a 20 61 20 70 6f 69  P4 is.  ** a poi
134f0 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d 20 6f 62  nter to a Mem ob
13500 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  ject..  */.  if(
13510 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 29 7b 0a   aOffset[p2] ){.
13520 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
13530 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20  SQLITE_OK );.   
13540 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20   if( zRec ){.   
13550 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68     /* This is th
13560 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68  e common case wh
13570 65 72 65 20 74 68 65 20 77 68 6f 6c 65 20 72 6f  ere the whole ro
13580 77 20 66 69 74 73 20 6f 6e 20 61 20 73 69 6e 67  w fits on a sing
13590 6c 65 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 20  le page */.     
135a0 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28   VdbeMemRelease(
135b0 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 73 71  pDest);.      sq
135c0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
135d0 65 74 28 28 75 38 20 2a 29 26 7a 52 65 63 5b 61  et((u8 *)&zRec[a
135e0 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61 54 79  Offset[p2]], aTy
135f0 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
13600 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
13610 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20   /* This branch 
13620 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65  happens only whe
13630 6e 20 74 68 65 20 72 6f 77 20 6f 76 65 72 66 6c  n the row overfl
13640 6f 77 73 20 6f 6e 74 6f 20 6d 75 6c 74 69 70 6c  ows onto multipl
13650 65 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 20  e pages */.     
13660 20 74 20 3d 20 61 54 79 70 65 5b 70 32 5d 3b 0a   t = aType[p2];.
13670 20 20 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e        if( (pOp->
13680 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e  p5 & (OPFLAG_LEN
13690 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59  GTHARG|OPFLAG_TY
136a0 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20  PEOFARG))!=0.   
136b0 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26      && ((t>=12 &
136c0 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28  & (t&1)==0) || (
136d0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
136e0 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29 0a  _TYPEOFARG)!=0).
136f0 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
13700 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69   /* Content is i
13710 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 20 74 68  rrelevant for th
13720 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  e typeof() funct
13730 69 6f 6e 20 61 6e 64 20 66 6f 72 0a 20 20 20 20  ion and for.    
13740 20 20 20 20 2a 2a 20 74 68 65 20 6c 65 6e 67 74      ** the lengt
13750 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66  h(X) function if
13760 20 58 20 69 73 20 61 20 62 6c 6f 62 2e 20 20 53   X is a blob.  S
13770 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65  o we might as we
13780 6c 6c 20 75 73 65 0a 20 20 20 20 20 20 20 20 2a  ll use.        *
13790 2a 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  * bogus content 
137a0 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61 64  rather than read
137b0 69 6e 67 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d  ing content from
137c0 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20 77 6f 72   disk.  NULL wor
137d0 6b 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 6f  ks.        ** fo
137e0 72 20 74 65 78 74 20 61 6e 64 20 62 6c 6f 62 20  r text and blob 
137f0 61 6e 64 20 77 68 61 74 65 76 65 72 20 69 73 20  and whatever is 
13800 69 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53 69  in the payloadSi
13810 7a 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20 20  ze64 variable.  
13820 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f        ** will wo
13830 72 6b 20 66 6f 72 20 65 76 65 72 79 74 68 69 6e  rk for everythin
13840 67 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 20 20 20  g else. */.     
13850 20 20 20 7a 44 61 74 61 20 3d 20 74 3c 31 32 20     zData = t<12 
13860 3f 20 28 63 68 61 72 2a 29 26 70 61 79 6c 6f 61  ? (char*)&payloa
13870 64 53 69 7a 65 36 34 20 3a 20 30 3b 0a 20 20 20  dSize64 : 0;.   
13880 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13890 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56    len = sqlite3V
138a0 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
138b0 28 74 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  (t);.        sql
138c0 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
138d0 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20  &sMem, pDest);. 
138e0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
138f0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
13900 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73  ree(pCrsr, aOffs
13910 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 20 70 43  et[p2], len,  pC
13920 2d 3e 69 73 49 6e 64 65 78 2c 0a 20 20 20 20 20  ->isIndex,.     
13930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13950 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20  &sMem);.        
13960 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
13970 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
13980 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
13990 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
139a0 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65       zData = sMe
139b0 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  m.z;.      }.   
139c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
139d0 72 69 61 6c 47 65 74 28 28 75 38 2a 29 7a 44 61  rialGet((u8*)zDa
139e0 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20  ta, t, pDest);. 
139f0 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e     }.    pDest->
13a00 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
13a10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28    }else{.    if(
13a20 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
13a30 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73 71  _MEM ){.      sq
13a40 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
13a50 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70  lowCopy(pDest, p
13a60 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d  Op->p4.pMem, MEM
13a70 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d 65  _Static);.    }e
13a80 6c 73 65 7b 0a 20 20 20 20 20 20 4d 65 6d 53 65  lse{.      MemSe
13a90 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
13aa0 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
13ab0 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77  }.  }..  /* If w
13ac0 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  e dynamically al
13ad0 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f  located space to
13ae0 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28   hold the data (
13af0 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69  in the.  ** sqli
13b00 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
13b10 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  ree() call above
13b20 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72 20  ) then transfer 
13b30 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a  control of that.
13b40 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79    ** dynamically
13b50 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
13b60 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44 65   over to the pDe
13b70 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20  st structure..  
13b80 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73  ** This prevents
13b90 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a   a memory copy..
13ba0 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e    */.  if( sMem.
13bb0 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61  zMalloc ){.    a
13bc0 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73  ssert( sMem.z==s
13bd0 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20  Mem.zMalloc );. 
13be0 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65     assert( !(pDe
13bf0 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  st->flags & MEM_
13c00 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73 65  Dyn) );.    asse
13c10 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61  rt( !(pDest->fla
13c20 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
13c30 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73  EM_Str)) || pDes
13c40 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a  t->z==sMem.z );.
13c50 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
13c60 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c   &= ~(MEM_Ephem|
13c70 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
13c80 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d   pDest->flags |=
13c90 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70   MEM_Term;.    p
13ca0 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a  Dest->z = sMem.z
13cb0 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61  ;.    pDest->zMa
13cc0 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c  lloc = sMem.zMal
13cd0 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d  loc;.  }..  rc =
13ce0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
13cf0 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44 65  akeWriteable(pDe
13d00 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  st);..op_column_
13d10 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  out:.  UPDATE_MA
13d20 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
13d30 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
13d40 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
13d50 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st);.  break;.}.
13d60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69  ./* Opcode: Affi
13d70 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20  nity P1 P2 * P4 
13d80 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66  *.**.** Apply af
13d90 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61  finities to a ra
13da0 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74  nge of P2 regist
13db0 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74  ers starting wit
13dc0 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  h P1..**.** P4 i
13dd0 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
13de0 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
13df0 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63   long. The nth c
13e00 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
13e10 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
13e20 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
13e30 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
13e40 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
13e50 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72  the nth.** memor
13e60 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
13e70 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
13e80 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
13e90 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
13ea0 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
13eb0 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
13ec0 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63  lied */.  char c
13ed0 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aff;            
13ee0 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63     /* A single c
13ef0 68 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69  haracter of affi
13f00 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  nity */..  zAffi
13f10 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
13f20 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
13f30 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
13f40 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b  sert( zAffinity[
13f50 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20  pOp->p2]==0 );. 
13f60 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
13f70 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28  p->p1];.  while(
13f80 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69   (cAff = *(zAffi
13f90 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20  nity++))!=0 ){. 
13fa0 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20     assert( pIn1 
13fb0 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e  <= &p->aMem[p->n
13fc0 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  Mem] );.    asse
13fd0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
13fe0 49 6e 31 29 20 29 3b 0a 20 20 20 20 45 78 70 61  In1) );.    Expa
13ff0 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
14000 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
14010 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f  pIn1, cAff, enco
14020 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b  ding);.    pIn1+
14030 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
14040 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  }../* Opcode: Ma
14050 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50  keRecord P1 P2 P
14060 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e  3 P4 *.**.** Con
14070 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
14080 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
14090 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
140a0 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
140b0 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
140c0 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
140d0 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
140e0 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
140f0 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
14100 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
14110 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
14120 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
14130 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
14140 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
14150 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
14160 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20  e nth character 
14170 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
14180 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
14190 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
141a0 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
141b0 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a  ed for the nth.*
141c0 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69  * field of the i
141d0 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20  ndex key..**.** 
141e0 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d  The mapping from
141f0 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66   character to af
14200 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20  finity is given 
14210 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  by the SQLITE_AF
14220 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66  F_.** macros def
14230 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e  ined in sqliteIn
14240 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  t.h..**.** If P4
14250 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c   is NULL then al
14260 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68  l index fields h
14270 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79  ave the affinity
14280 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NONE..*/.case O
14290 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a  P_MakeRecord: {.
142a0 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64    u8 *zNewRecord
142b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75  ;        /* A bu
142c0 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65  ffer to hold the
142d0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65   data for the ne
142e0 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  w record */.  Me
142f0 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20  m *pRec;        
14300 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
14310 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20  record */.  u64 
14320 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  nData;          
14330 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14340 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
14350 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64  ace */.  int nHd
14360 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
14370 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
14380 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
14390 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  ce */.  i64 nByt
143a0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
143b0 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71  * Data space req
143c0 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72  uired for this r
143d0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
143e0 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20  Zero;           
143f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
14400 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
14410 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
14420 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72  rd */.  int nVar
14430 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
14440 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
14450 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f  s in a varint */
14460 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79  .  u32 serial_ty
14470 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70  pe;       /* Typ
14480 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d  e field */.  Mem
14490 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20   *pData0;       
144a0 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65      /* First fie
144b0 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65  ld to be combine
144c0 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  d into the recor
144d0 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73  d */.  Mem *pLas
144e0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
144f0 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74   Last field of t
14500 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
14510 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
14520 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14530 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
14540 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61   record */.  cha
14550 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
14560 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
14570 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ity string for t
14580 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
14590 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  nt file_format; 
145a0 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f        /* File fo
145b0 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20  rmat to use for 
145c0 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
145d0 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
145e0 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
145f0 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
14600 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  [] */.  int len;
14610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14620 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69  * Length of a fi
14630 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  eld */..  /* Ass
14640 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  uming the record
14650 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c   contains N fiel
14660 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66  ds, the record f
14670 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a  ormat looks.  **
14680 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a   like this:.  **
14690 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
146a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
146b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
146c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
146d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
146e0 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c   ** | hdr-size |
146f0 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31   type 0 | type 1
14700 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d   | ... | type N-
14710 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20  1 | data0 | ... 
14720 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20  | data N-1 | .  
14730 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
14740 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14750 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14760 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14770 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
14780 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73  .  ** Data(0) is
14790 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
147a0 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31  ster P1.  Data(1
147b0 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67  ) comes from reg
147c0 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20  ister P1+1.  ** 
147d0 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20  and so froth..  
147e0 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70  **.  ** Each typ
147f0 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72  e field is a var
14800 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67  int representing
14810 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65   the serial type
14820 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f   of the .  ** co
14830 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61  rresponding data
14840 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71   element (see sq
14850 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14860 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a  ype()). The.  **
14870 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20   hdr-size field 
14880 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74  is also a varint
14890 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
148a0 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
148b0 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20  ginning.  ** of 
148c0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61  the record to da
148d0 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74  ta0..  */.  nDat
148e0 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
148f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
14900 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
14910 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20  */.  nHdr = 0;  
14920 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14930 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
14940 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
14950 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20  nZero = 0;      
14960 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14970 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
14980 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
14990 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  ord */.  nField 
149a0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66  = pOp->p1;.  zAf
149b0 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
149c0 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46  .z;.  assert( nF
149d0 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ield>0 && pOp->p
149e0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
149f0 46 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  Field<=p->nMem+1
14a00 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
14a10 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
14a20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
14a30 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
14a40 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
14a50 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
14a60 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
14a70 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
14a80 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
14a90 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
14aa0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
14ab0 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
14ac0 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
14ad0 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
14ae0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
14af0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
14b00 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
14b10 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
14b20 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
14b30 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
14b40 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
14b50 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
14b60 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
14b70 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
14b80 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
14b90 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30   for(pRec=pData0
14ba0 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70  ; pRec<=pLast; p
14bb0 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  Rec++){.    asse
14bc0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
14bd0 52 65 63 29 20 29 3b 0a 20 20 20 20 69 66 28 20  Rec) );.    if( 
14be0 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20  zAffinity ){.   
14bf0 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
14c00 28 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79  (pRec, zAffinity
14c10 5b 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65  [pRec-pData0], e
14c20 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a  ncoding);.    }.
14c30 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
14c40 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20  ags&MEM_Zero && 
14c50 70 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20  pRec->n>0 ){.   
14c60 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
14c70 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63  mExpandBlob(pRec
14c80 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72  );.    }.    ser
14c90 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
14ca0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
14cb0 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
14cc0 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73  at);.    len = s
14cd0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
14ce0 54 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74  TypeLen(serial_t
14cf0 79 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20  ype);.    nData 
14d00 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72  += len;.    nHdr
14d10 20 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e   += sqlite3Varin
14d20 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
14d30 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
14d40 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
14d50 6f 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e  o ){.      /* On
14d60 6c 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c  ly pure zero-fil
14d70 6c 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65  led BLOBs can be
14d80 20 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f   input to this O
14d90 70 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20  pcode..      ** 
14da0 57 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  We do not allow 
14db0 62 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65  blobs with a pre
14dc0 66 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66  fix and a zero-f
14dd0 69 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20  illed tail. */. 
14de0 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52       nZero += pR
14df0 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
14e00 20 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29   }else if( len )
14e10 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20  {.      nZero = 
14e20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  0;.    }.  }..  
14e30 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69  /* Add the initi
14e40 61 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74  al header varint
14e50 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73   and total the s
14e60 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d  ize */.  nHdr +=
14e70 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74   nVarint = sqlit
14e80 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
14e90 29 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74  );.  if( nVarint
14ea0 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65  <sqlite3VarintLe
14eb0 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e  n(nHdr) ){.    n
14ec0 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79  Hdr++;.  }.  nBy
14ed0 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d  te = nHdr+nData-
14ee0 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79  nZero;.  if( nBy
14ef0 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
14f00 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
14f10 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
14f20 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f  oo_big;.  }..  /
14f30 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
14f40 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
14f50 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72  has a buffer lar
14f60 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f  ge enough to sto
14f70 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77  re .  ** the new
14f80 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74   record. The out
14f90 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f  put register (pO
14fa0 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c  p->p3) is not al
14fb0 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65  lowed to.  ** be
14fc0 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75   one of the inpu
14fd0 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63  t registers (bec
14fe0 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ause the followi
14ff0 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20  ng call to.  ** 
15000 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
15010 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62  ow() could clobb
15020 65 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66  er the value bef
15030 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e  ore it is used).
15040 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
15050 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
15060 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c  Out, (int)nByte,
15070 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
15080 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
15090 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
150a0 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
150b0 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
150c0 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
150d0 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
150e0 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70  , nHdr);.  for(p
150f0 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
15100 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
15110 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
15120 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
15130 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
15140 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
15150 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74    i += putVarint
15160 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  32(&zNewRecord[i
15170 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  ], serial_type);
15180 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20        /* serial 
15190 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f  type */.  }.  fo
151a0 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
151b0 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
151c0 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20  ++){  /* serial 
151d0 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d  data */.    i +=
151e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
151f0 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
15200 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74  d[i], (int)(nByt
15210 65 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f  e-i), pRec,file_
15220 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61  format);.  }.  a
15230 73 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20  ssert( i==nByte 
15240 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
15250 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
15260 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
15270 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
15280 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
15290 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20  lags = MEM_Blob 
152a0 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75  | MEM_Dyn;.  pOu
152b0 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69  t->xDel = 0;.  i
152c0 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
152d0 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
152e0 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
152f0 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
15300 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ro;.  }.  pOut->
15310 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
15320 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
15330 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
15340 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78  converted to tex
15350 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f  t */.  REGISTER_
15360 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
15370 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
15380 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
15390 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
153a0 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
153b0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
153c0 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
153d0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
153e0 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
153f0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
15400 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
15410 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
15420 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
15430 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
15440 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
15450 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
15460 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
15470 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
15480 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42   i64 nEntry;.  B
15490 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
154a0 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70  .  pCrsr = p->ap
154b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43  Csr[pOp->p1]->pC
154c0 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57  ursor;.  if( ALW
154d0 41 59 53 28 70 43 72 73 72 29 20 29 7b 0a 20 20  AYS(pCrsr) ){.  
154e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
154f0 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20  reeCount(pCrsr, 
15500 26 6e 45 6e 74 72 79 29 3b 0a 20 20 7d 65 6c 73  &nEntry);.  }els
15510 65 7b 0a 20 20 20 20 6e 45 6e 74 72 79 20 3d 20  e{.    nEntry = 
15520 30 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  0;.  }.  pOut->u
15530 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62  .i = nEntry;.  b
15540 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
15550 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70  /* Opcode: Savep
15560 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a  oint P1 * * P4 *
15570 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c  .**.** Open, rel
15580 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b  ease or rollback
15590 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e   the savepoint n
155a0 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65  amed by paramete
155b0 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a  r P4, depending.
155c0 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20  ** on the value 
155d0 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61  of P1. To open a
155e0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20   new savepoint, 
155f0 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73  P1==0. To releas
15600 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a  e (commit) an.**
15610 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
15620 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74  int, P1==1, or t
15630 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78  o rollback an ex
15640 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
15650 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20   P1==2..*/.case 
15660 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a  OP_Savepoint: {.
15670 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
15680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15690 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31    /* Value of P1
156a0 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68   operand */.  ch
156b0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
156d0 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69   Name of savepoi
156e0 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d  nt */.  int nNam
156f0 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  e;.  Savepoint *
15700 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e  pNew;.  Savepoin
15710 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  t *pSavepoint;. 
15720 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70   Savepoint *pTmp
15730 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  ;.  int iSavepoi
15740 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20  nt;.  int ii;.. 
15750 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
15760 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34   zName = pOp->p4
15770 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74  .z;..  /* Assert
15780 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72   that the p1 par
15790 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e  ameter is valid.
157a0 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68   Also that if th
157b0 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20  ere is no open. 
157c0 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c   ** transaction,
157d0 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e   then there cann
157e0 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f  ot be any savepo
157f0 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73  ints. .  */.  as
15800 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
15810 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61  oint==0 || db->a
15820 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
15830 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41    assert( p1==SA
15840 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70  VEPOINT_BEGIN||p
15850 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
15860 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EASE||p1==SAVEPO
15870 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a  INT_ROLLBACK );.
15880 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
15890 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e  avepoint || db->
158a0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
158b0 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61  epoint==0 );.  a
158c0 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
158d0 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
158e0 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56  ;..  if( p1==SAV
158f0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a  EPOINT_BEGIN ){.
15900 20 20 20 20 69 66 28 20 64 62 2d 3e 77 72 69 74      if( db->writ
15910 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20  eVdbeCnt>0 ){.  
15920 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76      /* A new sav
15930 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65  epoint cannot be
15940 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72   created if ther
15950 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
15960 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61  te .      ** sta
15970 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70  tements (i.e. op
15980 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e  en read/write in
15990 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68  cremental blob h
159a0 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a  andles)..      *
159b0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
159c0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
159d0 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
159e0 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74  t open savepoint
159f0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
15a00 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
15a10 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
15a20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
15a30 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
15a40 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
15a50 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
15a60 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
15a70 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
15a80 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
15a90 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
15aa0 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
15ab0 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
15ac0 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
15ad0 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
15ae0 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
15af0 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
15b00 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
15b10 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
15b20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
15b30 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
15b40 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
15b50 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
15b60 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
15b70 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
15b80 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
15b90 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
15ba0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
15bb0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
15bc0 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
15bd0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
15be0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
15bf0 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
15c00 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
15c30 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
15c40 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
15c50 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
15c60 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
15c70 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
15c80 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
15c90 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
15ca0 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
15cb0 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
15cc0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
15cd0 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
15ce0 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
15cf0 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
15d00 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
15d10 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
15d20 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
15d30 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
15d40 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
15d50 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
15d60 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
15d70 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
15d80 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
15d90 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
15da0 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
15db0 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
15dc0 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
15dd0 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
15de0 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
15df0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
15e00 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
15e10 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
15e20 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
15e30 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
15e40 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
15e50 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
15e60 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
15e70 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73  * Link the new s
15e80 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68  avepoint into th
15e90 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
15ea0 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20  e's list. */.   
15eb0 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74       pNew->pNext
15ec0 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
15ed0 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
15ee0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77  Savepoint = pNew
15ef0 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
15f00 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
15f10 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
15f20 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  s;.      }.    }
15f30 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53  .  }else{.    iS
15f40 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20  avepoint = 0;.. 
15f50 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e     /* Find the n
15f60 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  amed savepoint. 
15f70 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
15f80 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74  uch savepoint, t
15f90 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e  hen an.    ** an
15fa0 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
15fb0 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
15fc0 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20   */.    for(.   
15fd0 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
15fe0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
15ff0 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
16000 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49  t && sqlite3StrI
16010 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e  Cmp(pSavepoint->
16020 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20  zName, zName);. 
16030 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
16040 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
16050 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  ext.    ){.     
16060 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20   iSavepoint++;. 
16070 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53     }.    if( !pS
16080 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
16090 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
160a0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
160b0 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76  db, "no such sav
160c0 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61  epoint: %s", zNa
160d0 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  me);.      rc = 
160e0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
160f0 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e    }else if( db->
16100 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20 26  writeVdbeCnt>0 &
16110 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
16120 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
16130 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f   /* It is not po
16140 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73  ssible to releas
16150 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76  e (commit) a sav
16160 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20  epoint if there 
16170 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63  are .      ** ac
16180 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65  tive write state
16190 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a  ments..      */.
161a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
161b0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
161c0 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20  sg, db, .       
161d0 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65   "cannot release
161e0 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c   savepoint - SQL
161f0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
16200 72 6f 67 72 65 73 73 22 0a 20 20 20 20 20 20 29  rogress".      )
16210 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
16220 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
16230 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  lse{..      /* D
16240 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
16250 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20   or not this is 
16260 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
16270 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a  vepoint. If so,.
16280 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69        ** and thi
16290 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63  s is a RELEASE c
162a0 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65  ommand, then the
162b0 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
162c0 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69  tion .      ** i
162d0 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20  s committed. .  
162e0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74      */.      int
162f0 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d   isTransaction =
16300 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
16310 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54  xt==0 && db->isT
16320 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
16330 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69  int;.      if( i
16340 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20  sTransaction && 
16350 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
16360 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
16370 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
16380 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
16390 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
163a0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
163b0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
163c0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
163d0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
163e0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
163f0 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
16400 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
16410 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   ){.          p-
16420 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
16430 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
16440 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  it = 0;.        
16450 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
16460 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
16470 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
16480 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
16490 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73  }.        db->is
164a0 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
164b0 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  oint = 0;.      
164c0 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20    rc = p->rc;.  
164d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
164e0 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20     iSavepoint = 
164f0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d  db->nSavepoint -
16500 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b   iSavepoint - 1;
16510 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d  .        if( p1=
16520 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
16530 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ACK ){.         
16540 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
16550 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
16560 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
16570 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72  3BtreeTripAllCur
16580 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d  sors(db->aDb[ii]
16590 2e 70 42 74 2c 20 53 51 4c 49 54 45 5f 41 42 4f  .pBt, SQLITE_ABO
165a0 52 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  RT);.          }
165b0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
165c0 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
165d0 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
165e0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
165f0 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70  qlite3BtreeSavep
16600 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d  oint(db->aDb[ii]
16610 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70  .pBt, p1, iSavep
16620 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  oint);.         
16630 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
16640 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
16650 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
16660 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
16670 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
16680 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d  .        if( p1=
16690 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
166a0 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67  ACK && (db->flag
166b0 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  s&SQLITE_InternC
166c0 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20  hanges)!=0 ){.  
166d0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
166e0 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
166f0 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
16700 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65         sqlite3Re
16710 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
16720 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20  onnection(db);. 
16730 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61           db->fla
16740 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20  gs = (db->flags 
16750 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  | SQLITE_InternC
16760 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20  hanges);.       
16770 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20   }.      }.  .  
16780 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73      /* Regardles
16790 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69  s of whether thi
167a0 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f  s is a RELEASE o
167b0 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74  r ROLLBACK, dest
167c0 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a  roy all .      *
167d0 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73  * savepoints nes
167e0 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68  ted inside of th
167f0 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
16800 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a  g operated on. *
16810 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64  /.      while( d
16820 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70  b->pSavepoint!=p
16830 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
16840 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e       pTmp = db->
16850 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
16860 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
16870 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74  nt = pTmp->pNext
16880 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
16890 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70  3DbFree(db, pTmp
168a0 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
168b0 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
168c0 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
168d0 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53  f it is a RELEAS
168e0 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20  E, then destroy 
168f0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
16900 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20  ing operated on 
16910 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49  .      ** too. I
16920 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41  f it is a ROLLBA
16930 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20  CK TO, then set 
16940 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65  the number of de
16950 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a  ferred .      **
16960 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
16970 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69  ations present i
16980 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
16990 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  o the value stor
169a0 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e  ed.      ** when
169b0 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77   the savepoint w
169c0 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a  as created.  */.
169d0 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
169e0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
169f0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
16a00 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64  t( pSavepoint==d
16a10 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b  b->pSavepoint );
16a20 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
16a30 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
16a40 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  oint->pNext;.   
16a50 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
16a60 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e  ee(db, pSavepoin
16a70 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
16a80 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29  !isTransaction )
16a90 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
16aa0 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
16ab0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
16ac0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  lse{.        db-
16ad0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
16ae0 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
16af0 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
16b00 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21    }..      if( !
16b10 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
16b20 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
16b30 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
16b40 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65  nt(db, p1, iSave
16b50 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
16b60 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
16b70 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
16b80 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
16b90 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a     }.    }.  }..
16ba0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
16bb0 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69  pcode: AutoCommi
16bc0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
16bd0 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61  .** Set the data
16be0 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74  base auto-commit
16bf0 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f   flag to P1 (1 o
16c00 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74  r 0). If P2 is t
16c10 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63  rue, roll.** bac
16c20 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20  k any currently 
16c30 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61  active btree tra
16c40 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68  nsactions. If th
16c50 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
16c60 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74  ve.** VMs (apart
16c70 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c   from this one),
16c80 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b   then a ROLLBACK
16c90 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49   fails.  A COMMI
16ca0 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68  T fails if.** th
16cb0 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
16cc0 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63  riting VMs or ac
16cd0 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73  tive VMs that us
16ce0 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a  e shared cache..
16cf0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
16d00 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  uction causes th
16d10 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f  e VM to halt..*/
16d20 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d  .case OP_AutoCom
16d30 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73  mit: {.  int des
16d40 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
16d50 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b    int iRollback;
16d60 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b  .  int turnOnAC;
16d70 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43  ..  desiredAutoC
16d80 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b  ommit = pOp->p1;
16d90 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70  .  iRollback = p
16da0 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e  Op->p2;.  turnOn
16db0 41 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f  AC = desiredAuto
16dc0 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61  Commit && !db->a
16dd0 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73  utoCommit;.  ass
16de0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
16df0 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73  Commit==1 || des
16e00 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
16e10 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
16e20 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
16e30 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b  ==1 || iRollback
16e40 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
16e50 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
16e60 6e 74 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c  nt>0 );  /* At l
16e70 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d  east this one VM
16e80 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 23   is active */..#
16e90 69 66 20 30 0a 20 20 69 66 28 20 74 75 72 6e 4f  if 0.  if( turnO
16ea0 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b  nAC && iRollback
16eb0 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64   && db->activeVd
16ec0 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 2f  beCnt>1 ){.    /
16ed0 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75  * If this instru
16ee0 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
16ef0 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64 20   a ROLLBACK and 
16f00 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20  other VMs are.  
16f10 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69    ** still runni
16f20 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61  ng, and a transa
16f30 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c  ction is active,
16f40 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
16f50 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20   indicating.    
16f60 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68 65  ** that the othe
16f70 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c  r VMs must compl
16f80 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20  ete first. .    
16f90 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  */.    sqlite3Se
16fa0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
16fb0 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
16fc0 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
16fd0 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20  ction - ".      
16fe0 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
16ff0 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
17000 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
17010 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 0a 23  _BUSY;.  }else.#
17020 65 6e 64 69 66 0a 20 20 69 66 28 20 74 75 72 6e  endif.  if( turn
17030 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61  OnAC && !iRollba
17040 63 6b 20 26 26 20 64 62 2d 3e 77 72 69 74 65 56  ck && db->writeV
17050 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20  dbeCnt>0 ){.    
17060 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
17070 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
17080 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f  s a COMMIT and o
17090 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69  ther VMs are wri
170a0 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75  ting.    ** retu
170b0 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
170c0 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20  cating that the 
170d0 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
170e0 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
170f0 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
17100 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
17110 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
17120 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e  nnot commit tran
17130 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
17140 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
17150 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
17160 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
17170 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
17180 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
17190 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f  Commit!=db->auto
171a0 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66  Commit ){.    if
171b0 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20  ( iRollback ){. 
171c0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73       assert( des
171d0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
171e0 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  1 );.      sqlit
171f0 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62  e3RollbackAll(db
17200 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  , SQLITE_ABORT_R
17210 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20  OLLBACK);.      
17220 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
17230 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
17240 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
17250 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
17260 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
17270 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
17280 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73  return;.    }els
17290 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  e{.      db->aut
172a0 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65  oCommit = (u8)de
172b0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
172c0 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
172d0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
172e0 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
172f0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
17300 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  ;.        db->au
17310 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
17320 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
17330 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  mit);.        p-
17340 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
17350 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
17360 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
17370 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
17380 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
17390 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b  nStatement==0 );
173a0 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73  .    sqlite3Clos
173b0 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b  eSavepoints(db);
173c0 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  .    if( p->rc==
173d0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
173e0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44     rc = SQLITE_D
173f0 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ONE;.    }else{.
17400 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
17410 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20  E_ERROR;.    }. 
17420 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
17430 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  urn;.  }else{.  
17440 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
17450 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
17460 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65  db,.        (!de
17470 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29  siredAutoCommit)
17480 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61  ?"cannot start a
17490 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74   transaction wit
174a0 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
174b0 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52  n":(.        (iR
174c0 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74  ollback)?"cannot
174d0 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74   rollback - no t
174e0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
174f0 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20  tive":.         
17500 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
17510 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72  t commit - no tr
17520 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
17530 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20  ive"));.        
17540 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54   .    rc = SQLIT
17550 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62  E_ERROR;.  }.  b
17560 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
17570 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20  de: Transaction 
17580 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
17590 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61  * Begin a transa
175a0 63 74 69 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e  ction.  The tran
175b0 73 61 63 74 69 6f 6e 20 65 6e 64 73 20 77 68 65  saction ends whe
175c0 6e 20 61 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f  n a Commit or Ro
175d0 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65  llback.** opcode
175e0 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
175f0 20 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74    Depending on t
17600 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73  he ON CONFLICT s
17610 65 74 74 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74  etting, the.** t
17620 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74  ransaction might
17630 20 61 6c 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20   also be rolled 
17640 62 61 63 6b 20 69 66 20 61 6e 20 65 72 72 6f 72  back if an error
17650 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
17660 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
17670 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
17680 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77  tabase file on w
17690 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63  hich the transac
176a0 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74  tion is.** start
176b0 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20  ed.  Index 0 is 
176c0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
176d0 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78  e file and index
176e0 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c   1 is the.** fil
176f0 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
17700 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e  rary tables.  In
17710 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f  dices of 2 or mo
17720 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a  re are used for.
17730 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ** attached data
17740 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  bases..**.** If 
17750 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P2 is non-zero, 
17760 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61  then a write-tra
17770 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
17780 74 65 64 2e 20 20 41 20 52 45 53 45 52 56 45 44  ted.  A RESERVED
17790 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62 74 61   lock is.** obta
177a0 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61  ined on the data
177b0 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20 61  base file when a
177c0 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
177d0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20  on is started.  
177e0 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20 70 72 6f 63  No.** other proc
177f0 65 73 73 20 63 61 6e 20 73 74 61 72 74 20 61 6e  ess can start an
17800 6f 74 68 65 72 20 77 72 69 74 65 20 74 72 61 6e  other write tran
17810 73 61 63 74 69 6f 6e 20 77 68 69 6c 65 20 74 68  saction while th
17820 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  is transaction i
17830 73 0a 2a 2a 20 75 6e 64 65 72 77 61 79 2e 20 20  s.** underway.  
17840 53 74 61 72 74 69 6e 67 20 61 20 77 72 69 74 65  Starting a write
17850 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 73   transaction als
17860 6f 20 63 72 65 61 74 65 73 20 61 20 72 6f 6c 6c  o creates a roll
17870 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a  back journal. A.
17880 2a 2a 20 77 72 69 74 65 20 74 72 61 6e 73 61 63  ** write transac
17890 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
178a0 72 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20  rted before any 
178b0 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d  changes can be m
178c0 61 64 65 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61  ade to the.** da
178d0 74 61 62 61 73 65 2e 20 20 49 66 20 50 32 20 69  tabase.  If P2 i
178e0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
178f0 72 20 65 71 75 61 6c 20 74 6f 20 32 20 74 68 65  r equal to 2 the
17900 6e 20 61 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  n an EXCLUSIVE l
17910 6f 63 6b 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 6f  ock is.** also o
17920 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 66  btained on the f
17930 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20  ile..**.** If a 
17940 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
17950 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64  n is started and
17960 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74   the Vdbe.usesSt
17970 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69  mtJournal flag i
17980 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20  s.** true (this 
17990 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74  flag is set if t
179a0 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69  he Vdbe may modi
179b0 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  fy more than one
179c0 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20   row and may.** 
179d0 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
179e0 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61  xception), a sta
179f0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
17a00 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f  on may also be o
17a10 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73  pened..** More s
17a20 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73  pecifically, a s
17a30 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
17a40 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69  tion is opened i
17a50 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  ff the database.
17a60 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  ** connection is
17a70 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69   currently not i
17a80 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64  n autocommit mod
17a90 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61  e, or if there a
17aa0 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69  re other.** acti
17ab0 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41  ve statements. A
17ac0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
17ad0 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68  action allows th
17ae0 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62  e changes made b
17af0 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74  y this.** VDBE t
17b00 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
17b10 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
17b20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74  without having t
17b30 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a  o roll back the.
17b40 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  ** entire transa
17b50 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72  ction. If no err
17b60 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
17b70 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  d, the statement
17b80 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
17b90 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
17ba0 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74  ly commit when t
17bb0 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a  he VDBE halts..*
17bc0 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65  *.** If P2 is ze
17bd0 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d  ro, then a read-
17be0 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
17bf0 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
17c00 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   file..*/.case O
17c10 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b  P_Transaction: {
17c20 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
17c30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
17c40 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
17c50 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
17c60 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
17c70 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
17c80 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  1)<<pOp->p1))!=0
17c90 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   );.  pBt = db->
17ca0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
17cb0 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  ;..  if( pBt ){.
17cc0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
17cd0 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
17ce0 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  pBt, pOp->p2);. 
17cf0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
17d00 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
17d10 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
17d20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
17d30 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
17d40 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
17d50 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  rn;.    }.    if
17d60 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
17d70 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
17d80 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
17d90 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
17da0 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75   pOp->p2 && p->u
17db0 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a  sesStmtJournal .
17dc0 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74       && (db->aut
17dd0 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
17de0 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
17df0 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  1) .    ){.     
17e00 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
17e10 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
17e20 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28  Bt) );.      if(
17e30 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
17e40 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
17e50 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
17e60 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53  ent>=0 && db->nS
17e70 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20  avepoint>=0 );. 
17e80 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
17e90 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20  ement++; .      
17ea0 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20    p->iStatement 
17eb0 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
17ec0 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e   + db->nStatemen
17ed0 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  t;.      }..    
17ee0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
17ef0 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
17f00 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c  SAVEPOINT_BEGIN,
17f10 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31   p->iStatement-1
17f20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
17f30 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
17f40 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
17f50 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74  e3BtreeBeginStmt
17f60 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d  (pBt, p->iStatem
17f70 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ent);.      }.. 
17f80 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68       /* Store th
17f90 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value 
17fa0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
17fb0 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64  handles deferred
17fc0 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20   constraint.    
17fd0 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66    ** counter. If
17fe0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
17ff0 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73  ransaction needs
18000 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
18010 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ck,.      ** the
18020 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
18030 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20  ounter needs to 
18040 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e  be restored too.
18050 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53    */.      p->nS
18060 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d  tmtDefCons = db-
18070 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
18080 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
18090 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
180a0 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50   ReadCookie P1 P
180b0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 P3 * *.**.** R
180c0 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  ead cookie numbe
180d0 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61  r P3 from databa
180e0 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20  se P1 and write 
180f0 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  it into register
18100 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73   P2..** P3==1 is
18110 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
18120 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74  ion.  P3==2 is t
18130 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
18140 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20  at..** P3==3 is 
18150 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
18160 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65  pager cache size
18170 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
18180 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65   P1==0 is.** the
18190 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
181a0 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
181b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
181c0 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
181d0 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
181e0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  bles..**.** Ther
181f0 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64  e must be a read
18200 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74  -lock on the dat
18210 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20  abase (either a 
18220 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d  transaction.** m
18230 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f  ust be started o
18240 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20  r there must be 
18250 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20  an open cursor) 
18260 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74  before.** execut
18270 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
18280 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
18290 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20  _ReadCookie: {  
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
182b0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
182c0 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  */.  int iMeta;.
182d0 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
182e0 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 69 44 62   iCookie;..  iDb
182f0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43   = pOp->p1;.  iC
18300 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b  ookie = pOp->p3;
18310 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
18320 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p3<SQLITE_N_BTRE
18330 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65  E_META );.  asse
18340 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
18350 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
18360 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69  ssert( db->aDb[i
18370 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db].pBt!=0 );.  
18380 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
18390 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
183a0 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20  sk)1)<<iDb))!=0 
183b0 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72  );..  sqlite3Btr
183c0 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44  eeGetMeta(db->aD
183d0 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f  b[iDb].pBt, iCoo
183e0 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65  kie, (u32 *)&iMe
183f0 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ta);.  pOut->u.i
18400 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61   = iMeta;.  brea
18410 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
18420 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
18430 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
18440 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ite the content 
18450 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28  of register P3 (
18460 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
18470 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e  n integer).** in
18480 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
18490 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
184a0 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68  P1.  P2==1 is th
184b0 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
184c0 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20  .  .** P2==2 is 
184d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
184e0 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68  mat. P2==3 is th
184f0 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
18500 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
18510 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
18520 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
18530 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
18540 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
18550 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
18560 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
18570 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
18580 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
18590 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
185a0 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
185b0 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
185c0 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
185d0 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20  OP_SetCookie: { 
185e0 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
185f0 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
18600 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
18610 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
18620 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
18630 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
18640 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
18650 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
18660 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
18670 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29  ask)1)<<pOp->p1)
18680 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  )!=0 );.  pDb = 
18690 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
186a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
186b0 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ->pBt!=0 );.  as
186c0 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
186d0 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
186e0 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
186f0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
18700 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74  Op->p3];.  sqlit
18710 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
18720 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20  ify(pIn3);.  /* 
18730 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69  See note about i
18740 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e  ndex shifting on
18750 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a   OP_ReadCookie *
18760 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
18770 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28  BtreeUpdateMeta(
18780 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70  pDb->pBt, pOp->p
18790 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e  2, (int)pIn3->u.
187a0 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  i);.  if( pOp->p
187b0 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
187c0 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
187d0 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
187e0 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
187f0 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
18800 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
18810 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  ly */.    pDb->p
18820 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
18830 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e  ookie = (int)pIn
18840 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e  3->u.i;.    db->
18850 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
18860 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20  InternChanges;. 
18870 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
18880 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46  p2==BTREE_FILE_F
18890 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20  ORMAT ){.    /* 
188a0 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69  Record changes i
188b0 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  n the file forma
188c0 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  t */.    pDb->pS
188d0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
188e0 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75  at = (u8)pIn3->u
188f0 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  .i;.  }.  if( pO
18900 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p1==1 ){.    
18910 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
18920 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  l prepared state
18930 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74  ments whenever t
18940 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
18950 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69  .    ** schema i
18960 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b  s changed.  Tick
18970 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20  et #1644 */.    
18980 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
18990 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
189a0 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  db);.    p->expi
189b0 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  red = 0;.  }.  b
189c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
189d0 64 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69 65  de: VerifyCookie
189e0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
189f0 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61  .** Check the va
18a00 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61  lue of global da
18a10 74 61 62 61 73 65 20 70 61 72 61 6d 65 74 65 72  tabase parameter
18a20 20 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a 2a   number 0 (the.*
18a30 2a 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  * schema version
18a40 29 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20  ) and make sure 
18a50 69 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50  it is equal to P
18a60 32 20 61 6e 64 20 74 68 61 74 20 74 68 65 0a 2a  2 and that the.*
18a70 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * generation cou
18a80 6e 74 65 72 20 6f 6e 20 74 68 65 20 6c 6f 63 61  nter on the loca
18a90 6c 20 73 63 68 65 6d 61 20 70 61 72 73 65 20 65  l schema parse e
18aa0 71 75 61 6c 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  quals P3..**.** 
18ab0 50 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  P1 is the databa
18ac0 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  se number which 
18ad0 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69  is 0 for the mai
18ae0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  n database file.
18af0 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65  ** and 1 for the
18b00 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65   file holding te
18b10 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61  mporary tables a
18b20 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e  nd some higher n
18b30 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78  umber.** for aux
18b40 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73  iliary databases
18b50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b  ..**.** The cook
18b60 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76  ie changes its v
18b70 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68  alue whenever th
18b80 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
18b90 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68  a changes..** Th
18ba0 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
18bb0 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77  used to detect w
18bc0 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f  hen that the coo
18bd0 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a  kie has changed.
18be0 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  ** and that the 
18bf0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
18c00 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20  needs to reread 
18c10 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  the schema..**.*
18c20 2a 20 45 69 74 68 65 72 20 61 20 74 72 61 6e 73  * Either a trans
18c30 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  action needs to 
18c40 68 61 76 65 20 62 65 65 6e 20 73 74 61 72 74 65  have been starte
18c50 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20  d or an OP_Open 
18c60 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65  needs.** to be e
18c70 78 65 63 75 74 65 64 20 28 74 6f 20 65 73 74 61  xecuted (to esta
18c80 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63  blish a read loc
18c90 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f  k) before this o
18ca0 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f  pcode is.** invo
18cb0 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ked..*/.case OP_
18cc0 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a  VerifyCookie: {.
18cd0 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
18ce0 6e 74 20 69 47 65 6e 3b 0a 20 20 42 74 72 65 65  nt iGen;.  Btree
18cf0 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
18d00 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
18d10 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
18d20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
18d30 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
18d40 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
18d50 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73  >p1))!=0 );.  as
18d60 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
18d70 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
18d80 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
18d90 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
18da0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
18db0 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 73  if( pBt ){.    s
18dc0 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65  qlite3BtreeGetMe
18dd0 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43  ta(pBt, BTREE_SC
18de0 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75  HEMA_VERSION, (u
18df0 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20  32 *)&iMeta);.  
18e00 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62    iGen = db->aDb
18e10 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
18e20 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a  a->iGeneration;.
18e30 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65    }else{.    iGe
18e40 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20  n = iMeta = 0;. 
18e50 20 7d 0a 20 20 69 66 28 20 69 4d 65 74 61 21 3d   }.  if( iMeta!=
18e60 70 4f 70 2d 3e 70 32 20 7c 7c 20 69 47 65 6e 21  pOp->p2 || iGen!
18e70 3d 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20  =pOp->p3 ){.    
18e80 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
18e90 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
18ea0 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
18eb0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
18ec0 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63  db, "database sc
18ed0 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
18ee0 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ");.    /* If th
18ef0 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
18f00 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
18f10 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74  e file matches t
18f20 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a  he cookie .    *
18f30 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  * stored with th
18f40 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72  e in-memory repr
18f50 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
18f60 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20  e schema, do.   
18f70 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74   ** not reload t
18f80 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74  he schema from t
18f90 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
18fa0 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
18fb0 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  If virtual-table
18fc0 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68  s are in use, th
18fd0 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  is is not just a
18fe0 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
18ff0 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d      ** Often, v-
19000 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65  tables store the
19010 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72  ir data in other
19020 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20   SQLite tables, 
19030 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65  which.    ** are
19040 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69   queried from wi
19050 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64  thin xNext() and
19060 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d   other v-table m
19070 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20  ethods using.   
19080 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65   ** prepared que
19090 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20  ries. If such a 
190a0 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d  query is out-of-
190b0 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20  date, we do not 
190c0 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64  want to.    ** d
190d0 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62  iscard the datab
190e0 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74  ase schema, as t
190f0 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70  he user code imp
19100 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20  lementing the.  
19110 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75    ** v-table wou
19120 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65  ld have to be re
19130 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ady for the sqli
19140 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
19150 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a  re itself.    **
19160 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
19170 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69  ed whenever sqli
19180 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61  te3_step() is ca
19190 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
191a0 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62   .    ** a v-tab
191b0 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a  le method..    *
191c0 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44  /.    if( db->aD
191d0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
191e0 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
191f0 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20  e!=iMeta ){.    
19200 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e    sqlite3ResetOn
19210 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d  eSchema(db, pOp-
19220 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  >p1);.    }..   
19230 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
19240 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
19250 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62  _SCHEMA;.  }.  b
19260 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
19270 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20  de: OpenRead P1 
19280 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
19290 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
192a0 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
192b0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
192c0 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
192d0 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
192e0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
192f0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19300 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
19310 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
19320 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
19330 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
19340 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
19350 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
19360 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
19370 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
19380 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
19390 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
193a0 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
193b0 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
193c0 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
193d0 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
193e0 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
193f0 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
19400 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
19410 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
19420 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
19430 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
19440 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
19450 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ive..**.** If P5
19460 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65  !=0 then use the
19470 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
19480 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72  ster P2 as the r
19490 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a  oot page, not.**
194a0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32   the value of P2
194b0 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54   itself..**.** T
194c0 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72  here will be a r
194d0 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead lock on the 
194e0 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65  database wheneve
194f0 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a  r there is an.**
19500 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49   open cursor.  I
19510 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
19520 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f  as unlocked prio
19530 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75  r to this instru
19540 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20  ction.** then a 
19550 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71  read lock is acq
19560 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66  uired as part of
19570 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
19580 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f  n.  A read.** lo
19590 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20  ck allows other 
195a0 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61  processes to rea
195b0 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  d the database b
195c0 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20  ut prohibits.** 
195d0 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73  any other proces
195e0 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67  s from modifying
195f0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
19600 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  The read lock is
19610 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65  .** released whe
19620 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72  n all cursors ar
19630 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  e closed.  If th
19640 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  is instruction a
19650 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65  ttempts.** to ge
19660 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75  t a read lock bu
19670 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72  t fails, the scr
19680 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77  ipt terminates w
19690 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ith an.** SQLITE
196a0 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65  _BUSY error code
196b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
196c0 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
196d0 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
196e0 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
196f0 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
19700 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
19710 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
19720 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
19730 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
19740 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
19750 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
19760 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
19770 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
19780 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
19790 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
197a0 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
197b0 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
197c0 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
197d0 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
197e0 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
197f0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
19800 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
19810 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a  also OpenWrite..
19820 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  */./* Opcode: Op
19830 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33  enWrite P1 P2 P3
19840 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65   P4 P5.**.** Ope
19850 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63  n a read/write c
19860 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f  ursor named P1 o
19870 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
19880 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a  ndex whose root.
19890 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20  ** page is P2.  
198a0 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20  Or if P5!=0 use 
198b0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
198c0 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69  egister P2 to fi
198d0 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70  nd the.** root p
198e0 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  age..**.** The P
198f0 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
19900 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
19910 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
19920 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
19930 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
19940 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
19950 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
19960 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
19970 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
19980 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
19990 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
199a0 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
199b0 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
199c0 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
199d0 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
199e0 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
199f0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
19a00 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
19a10 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
19a20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
19a30 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74  e table, or to t
19a40 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e  he.** largest in
19a50 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d  dex of any colum
19a60 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  n of the table t
19a70 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  hat is actually 
19a80 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  used..**.** This
19a90 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72   instruction wor
19aa0 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65  ks just like Ope
19ab0 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61  nRead except tha
19ac0 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63  t it opens the c
19ad0 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64  ursor.** in read
19ae0 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f  /write mode.  Fo
19af0 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c  r a given table,
19b00 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e   there can be on
19b10 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f  e or more read-o
19b20 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f  nly.** cursors o
19b30 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f  r a single read/
19b40 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74  write cursor but
19b50 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a   not both..**.**
19b60 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65   See also OpenRe
19b70 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ad..*/.case OP_O
19b80 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50  penRead:.case OP
19b90 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20  _OpenWrite: {.  
19ba0 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65  int nField;.  Ke
19bb0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
19bc0 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74  .  int p2;.  int
19bd0 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c   iDb;.  int wrFl
19be0 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b  ag;.  Btree *pX;
19bf0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
19c00 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  Cur;.  Db *pDb;.
19c10 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d  .  assert( (pOp-
19c20 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50 32 49 53  >p5&(OPFLAG_P2IS
19c30 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  REG|OPFLAG_BULKC
19c40 53 52 29 29 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b  SR))==pOp->p5 );
19c50 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
19c60 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
19c70 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  rite || pOp->p5=
19c80 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e  =0 );..  if( p->
19c90 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72  expired ){.    r
19ca0 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  c = SQLITE_ABORT
19cb0 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
19cc0 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a  ..  nField = 0;.
19cd0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a    pKeyInfo = 0;.
19ce0 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
19cf0 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b    iDb = pOp->p3;
19d00 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
19d10 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
19d20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
19d30 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
19d40 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62  (yDbMask)1)<<iDb
19d50 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ))!=0 );.  pDb =
19d60 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a   &db->aDb[iDb];.
19d70 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b    pX = pDb->pBt;
19d80 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30  .  assert( pX!=0
19d90 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
19da0 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
19db0 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61  ite ){.    wrFla
19dc0 67 20 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72  g = 1;.    asser
19dd0 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
19de0 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44  MutexHeld(db, iD
19df0 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28  b, 0) );.    if(
19e00 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
19e10 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e  ile_format < p->
19e20 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
19e30 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  at ){.      p->m
19e40 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
19e50 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  t = pDb->pSchema
19e60 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20  ->file_format;. 
19e70 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
19e80 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20    wrFlag = 0;.  
19e90 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  }.  if( pOp->p5 
19ea0 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  & OPFLAG_P2ISREG
19eb0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
19ec0 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65  p2>0 );.    asse
19ed0 72 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  rt( p2<=p->nMem 
19ee0 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61  );.    pIn2 = &a
19ef0 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73  Mem[p2];.    ass
19f00 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
19f10 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73  pIn2) );.    ass
19f20 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
19f30 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
19f40 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
19f50 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
19f60 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20  pIn2);.    p2 = 
19f70 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a  (int)pIn2->u.i;.
19f80 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61      /* The p2 va
19f90 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73  lue always comes
19fa0 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50   from a prior OP
19fb0 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63  _CreateTable opc
19fc0 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74  ode and.    ** t
19fd0 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  hat opcode will 
19fe0 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70  always set the p
19ff0 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20  2 value to 2 or 
1a000 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69  more or else fai
1a010 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65  l..    ** If the
1a020 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72  re were a failur
1a030 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20  e, the prepared 
1a040 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
1a050 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20  have halted.    
1a060 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69  ** before reachi
1a070 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
1a080 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  ion. */.    if( 
1a090 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a  NEVER(p2<2) ) {.
1a0a0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1a0b0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
1a0c0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1a0d0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1a0e0 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70     }.  }.  if( p
1a0f0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1a100 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b  EYINFO ){.    pK
1a110 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1a120 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 70  .pKeyInfo;.    p
1a130 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45  KeyInfo->enc = E
1a140 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 6e  NC(p->db);.    n
1a150 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f  Field = pKeyInfo
1a160 2d 3e 6e 46 69 65 6c 64 2b 31 3b 0a 20 20 7d 65  ->nField+1;.  }e
1a170 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  lse if( pOp->p4t
1a180 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b  ype==P4_INT32 ){
1a190 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
1a1a0 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61  p->p4.i;.  }.  a
1a1b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1a1c0 30 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 61 6c  0 );.  pCur = al
1a1d0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1a1e0 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c  pOp->p1, nField,
1a1f0 20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20   iDb, 1);.  if( 
1a200 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCur==0 ) goto n
1a210 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e  o_mem;.  pCur->n
1a220 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1a230 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  ur->isOrdered = 
1a240 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  1;.  rc = sqlite
1a250 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c  3BtreeCursor(pX,
1a260 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65   p2, wrFlag, pKe
1a270 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75  yInfo, pCur->pCu
1a280 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70  rsor);.  pCur->p
1a290 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1a2a0 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50  fo;.  assert( OP
1a2b0 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54  FLAG_BULKCSR==BT
1a2c0 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a  REE_BULKLOAD );.
1a2d0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
1a2e0 72 73 6f 72 48 69 6e 74 73 28 70 43 75 72 2d 3e  rsorHints(pCur->
1a2f0 70 43 75 72 73 6f 72 2c 20 28 70 4f 70 2d 3e 70  pCursor, (pOp->p
1a300 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  5 & OPFLAG_BULKC
1a310 53 52 29 29 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63  SR));..  /* Sinc
1a320 65 20 69 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f  e it performs no
1a330 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1a340 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e  on or IO, the on
1a350 6c 79 20 76 61 6c 75 65 20 74 68 61 74 0a 20 20  ly value that.  
1a360 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
1a370 75 72 73 6f 72 28 29 20 6d 61 79 20 72 65 74 75  ursor() may retu
1a380 72 6e 20 69 73 20 53 51 4c 49 54 45 5f 4f 4b 2e  rn is SQLITE_OK.
1a390 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72 63   */.  assert( rc
1a3a0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a  ==SQLITE_OK );..
1a3b0 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62    /* Set the Vdb
1a3c0 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20  eCursor.isTable 
1a3d0 61 6e 64 20 69 73 49 6e 64 65 78 20 76 61 72 69  and isIndex vari
1a3e0 61 62 6c 65 73 2e 20 50 72 65 76 69 6f 75 73 20  ables. Previous 
1a3f0 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a  versions of.  **
1a400 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20   SQLite used to 
1a410 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f  check if the roo
1a420 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72  t-page flags wer
1a430 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70  e sane at this p
1a440 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65  oint.  ** and re
1a450 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f  port database co
1a460 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79  rruption if they
1a470 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74   were not, but t
1a480 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20  his check has.  
1a490 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69  ** since moved i
1a4a0 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61  nto the btree la
1a4b0 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75  yer.  */  .  pCu
1a4c0 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70  r->isTable = pOp
1a4d0 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59  ->p4type!=P4_KEY
1a4e0 49 4e 46 4f 3b 0a 20 20 70 43 75 72 2d 3e 69 73  INFO;.  pCur->is
1a4f0 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e 69  Index = !pCur->i
1a500 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b  sTable;.  break;
1a510 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1a520 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20  penEphemeral P1 
1a530 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  P2 * P4 P5.**.**
1a540 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
1a550 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73  or P1 to a trans
1a560 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  ient table..** T
1a570 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77  he cursor is alw
1a580 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f  ays opened read/
1a590 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a  write even if .*
1a5a0 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
1a5b0 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79  ase is read-only
1a5c0 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c  .  The ephemeral
1a5d0 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c  .** table is del
1a5e0 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  eted automatical
1a5f0 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73  ly when the curs
1a600 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a  or is closed..**
1a610 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75  .** P2 is the nu
1a620 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1a630 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  in the ephemeral
1a640 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
1a650 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20  ursor points to 
1a660 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66  a BTree table if
1a670 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20   P4==0 and to a 
1a680 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69  BTree index.** i
1a690 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20  f P4 is not 0.  
1a6a0 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
1a6b0 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  L, it points to 
1a6c0 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
1a6d0 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69  ure.** that defi
1a6e0 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  nes the format o
1a6f0 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e  f keys in the in
1a700 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  dex..**.** This 
1a710 6f 70 63 6f 64 65 20 77 61 73 20 6f 6e 63 65 20  opcode was once 
1a720 63 61 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e  called OpenTemp.
1a730 20 20 42 75 74 20 74 68 61 74 20 63 72 65 61 74    But that creat
1a740 65 64 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20  ed.** confusion 
1a750 62 65 63 61 75 73 65 20 74 68 65 20 74 65 72 6d  because the term
1a760 20 22 74 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d   "temp table", m
1a770 69 67 68 74 20 72 65 66 65 72 20 65 69 74 68 65  ight refer eithe
1a780 72 0a 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20 74  r.** to a TEMP t
1a790 61 62 6c 65 20 61 74 20 74 68 65 20 53 51 4c 20  able at the SQL 
1a7a0 6c 65 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74  level, or to a t
1a7b0 61 62 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a  able opened by.*
1a7c0 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  * this opcode.  
1a7d0 54 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  Then this opcode
1a7e0 20 77 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69   was call OpenVi
1a7f0 72 74 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74  rtual.  But.** t
1a800 68 61 74 20 63 72 65 61 74 65 64 20 63 6f 6e 66  hat created conf
1a810 75 73 69 6f 6e 20 77 69 74 68 20 74 68 65 20 77  usion with the w
1a820 68 6f 6c 65 20 76 69 72 74 75 61 6c 2d 74 61 62  hole virtual-tab
1a830 6c 65 20 69 64 65 61 2e 0a 2a 2a 0a 2a 2a 20 54  le idea..**.** T
1a840 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20  he P5 parameter 
1a850 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66  can be a mask of
1a860 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61   the BTREE_* fla
1a870 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e  gs defined.** in
1a880 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65   btree.h.  These
1a890 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61   flags control a
1a8a0 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70  spects of the op
1a8b0 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  eration of.** th
1a8c0 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42 54  e btree.  The BT
1a8d0 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
1a8e0 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c   and BTREE_SINGL
1a8f0 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61  E flags are.** a
1a900 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  dded automatical
1a910 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ly..*/./* Opcode
1a920 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20  : OpenAutoindex 
1a930 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
1a940 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1a950 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73  orks the same as
1a960 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1a970 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20  l.  It has a.** 
1a980 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74  different name t
1a990 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74  o distinguish it
1a9a0 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63  s use.  Tables c
1a9b0 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
1a9c0 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  by this opcode w
1a9d0 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
1a9e0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
1a9f0 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a  eated transient.
1aa00 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f  ** indices in jo
1aa10 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ins..*/.case OP_
1aa20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a  OpenAutoindex: .
1aa30 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  case OP_OpenEphe
1aa40 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43  meral: {.  VdbeC
1aa50 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 73 74  ursor *pCx;.  st
1aa60 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76  atic const int v
1aa70 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20  fsFlags = .     
1aa80 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
1aa90 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53  DWRITE |.      S
1aaa0 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54  QLITE_OPEN_CREAT
1aab0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1aac0 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20  _OPEN_EXCLUSIVE 
1aad0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1aae0 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53  PEN_DELETEONCLOS
1aaf0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1ab00 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f  _OPEN_TRANSIENT_
1ab10 44 42 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  DB;..  assert( p
1ab20 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70  Op->p1>=0 );.  p
1ab30 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1ab40 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1ab50 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b  pOp->p2, -1, 1);
1ab60 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1ab70 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1ab80 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1ab90 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1aba0 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66  treeOpen(db->pVf
1abb0 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e  s, 0, db, &pCx->
1abc0 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20  pBt, .          
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54                BT
1abe0 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
1abf0 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20   | BTREE_SINGLE 
1ac00 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c  | pOp->p5, vfsFl
1ac10 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  ags);.  if( rc==
1ac20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1ac30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1ac40 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78  eeBeginTrans(pCx
1ac50 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20  ->pBt, 1);.  }. 
1ac60 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1ac70 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  OK ){.    /* If 
1ac80 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
1ac90 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63  x is required, c
1aca0 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c  reate it by call
1acb0 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74  ing.    ** sqlit
1acc0 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
1acd0 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54  le() with the BT
1ace0 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67  REE_BLOBKEY flag
1acf0 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f   before.    ** o
1ad00 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20  pening it. If a 
1ad10 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20  transient table 
1ad20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73  is required, jus
1ad30 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a  t use the.    **
1ad40 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
1ad50 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74  reated table wit
1ad60 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61  h root-page 1 (a
1ad70 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61  n BLOB_INTKEY ta
1ad80 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ble)..    */.   
1ad90 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65   if( pOp->p4.pKe
1ada0 79 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20 69  yInfo ){.      i
1adb0 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61  nt pgno;.      a
1adc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1add0 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1ade0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1adf0 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
1ae00 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26  able(pCx->pBt, &
1ae10 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42  pgno, BTREE_BLOB
1ae20 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20  KEY | pOp->p5); 
1ae30 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
1ae40 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1ae50 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f      assert( pgno
1ae60 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20  ==MASTER_ROOT+1 
1ae70 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
1ae80 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1ae90 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e  or(pCx->pBt, pgn
1aea0 6f 2c 20 31 2c 20 0a 20 20 20 20 20 20 20 20 20  o, 1, .         
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 20 20 20 20 20 20 20 28 4b 65 79 49 6e 66 6f 2a         (KeyInfo*
1aed0 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 78 2d  )pOp->p4.z, pCx-
1aee0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1aef0 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
1af00 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1af10 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 70 43 78  nfo;.        pCx
1af20 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20  ->pKeyInfo->enc 
1af30 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20  = ENC(p->db);.  
1af40 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d      }.      pCx-
1af50 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20  >isTable = 0;.  
1af60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1af70 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1af80 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c  Cursor(pCx->pBt,
1af90 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c   MASTER_ROOT, 1,
1afa0 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72   0, pCx->pCursor
1afb0 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73  );.      pCx->is
1afc0 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d  Table = 1;.    }
1afd0 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72  .  }.  pCx->isOr
1afe0 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35  dered = (pOp->p5
1aff0 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45  !=BTREE_UNORDERE
1b000 44 29 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64  D);.  pCx->isInd
1b010 65 78 20 3d 20 21 70 43 78 2d 3e 69 73 54 61 62  ex = !pCx->isTab
1b020 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  le;.  break;.}..
1b030 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
1b040 72 4f 70 65 6e 20 50 31 20 50 32 20 2a 20 50 34  rOpen P1 P2 * P4
1b050 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
1b060 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20  code works like 
1b070 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1b080 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
1b090 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73  opens.** a trans
1b0a0 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20  ient index that 
1b0b0 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20  is specifically 
1b0c0 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74  designed to sort
1b0d0 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73   large.** tables
1b0e0 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e   using an extern
1b0f0 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c  al merge-sort al
1b100 67 6f 72 69 74 68 6d 2e 0a 2a 2f 0a 63 61 73 65  gorithm..*/.case
1b110 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20   OP_SorterOpen: 
1b120 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1b130 70 43 78 3b 0a 0a 20 20 70 43 78 20 3d 20 61 6c  pCx;..  pCx = al
1b140 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1b150 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1b160 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20  , -1, 1);.  if( 
1b170 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1b180 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65  _mem;.  pCx->pKe
1b190 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1b1a0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 70 43 78 2d  pKeyInfo;.  pCx-
1b1b0 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d  >pKeyInfo->enc =
1b1c0 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 70   ENC(p->db);.  p
1b1d0 43 78 2d 3e 69 73 53 6f 72 74 65 72 20 3d 20 31  Cx->isSorter = 1
1b1e0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1b1f0 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64  VdbeSorterInit(d
1b200 62 2c 20 70 43 78 29 3b 0a 20 20 62 72 65 61 6b  b, pCx);.  break
1b210 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1b220 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32  OpenPseudo P1 P2
1b230 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 4f   P3 * P5.**.** O
1b240 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
1b250 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
1b260 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61  a fake table tha
1b270 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  t contains a sin
1b280 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61  gle.** row of da
1b290 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  ta.  The content
1b2a0 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77   of that one row
1b2b0 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   in the content 
1b2c0 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67  of memory.** reg
1b2d0 69 73 74 65 72 20 50 32 20 77 68 65 6e 20 50 35  ister P2 when P5
1b2e0 3d 3d 30 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ==0.  In other w
1b2f0 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20  ords, cursor P1 
1b300 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73  becomes an alias
1b310 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d   for the .** MEM
1b320 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f  _Blob content co
1b330 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73  ntained in regis
1b340 74 65 72 20 50 32 2e 20 20 57 68 65 6e 20 50 35  ter P2.  When P5
1b350 3d 3d 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ==1, then the.**
1b360 20 72 6f 77 20 69 73 20 72 65 70 72 65 73 65 6e   row is represen
1b370 74 65 64 20 62 79 20 50 33 20 63 6f 6e 73 65 63  ted by P3 consec
1b380 75 74 69 76 65 20 72 65 67 69 73 74 65 72 73 20  utive registers 
1b390 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
1b3a0 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64  2..**.** A pseud
1b3b0 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20  o-table created 
1b3c0 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
1b3d0 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61  s used to hold a
1b3e0 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f   single.** row o
1b3f0 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73  utput from the s
1b400 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68  orter so that th
1b410 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63  e row can be dec
1b420 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20  omposed into.** 
1b430 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d  individual colum
1b440 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f  ns using the OP_
1b450 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20  Column opcode.  
1b460 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  The OP_Column op
1b470 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f  code.** is the o
1b480 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64  nly cursor opcod
1b490 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74  e that works wit
1b4a0 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  h a pseudo-table
1b4b0 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68  ..**.** P3 is th
1b4c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
1b4d0 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
1b4e0 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73  s that will be s
1b4f0 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  tored by.** the 
1b500 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
1b510 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65  .case OP_OpenPse
1b520 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  udo: {.  VdbeCur
1b530 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73  sor *pCx;..  ass
1b540 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1b550 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1b560 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1b570 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d  ->p1, pOp->p3, -
1b580 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 0);.  if( pCx
1b590 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1b5a0 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1b5b0 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73  w = 1;.  pCx->ps
1b5c0 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70  eudoTableReg = p
1b5d0 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69  Op->p2;.  pCx->i
1b5e0 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43  sTable = 1;.  pC
1b5f0 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a  x->isIndex = 0;.
1b600 20 20 70 43 78 2d 3e 6d 75 6c 74 69 50 73 65 75    pCx->multiPseu
1b610 64 6f 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20  do = pOp->p5;.  
1b620 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1b630 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20  ode: Close P1 * 
1b640 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73  * * *.**.** Clos
1b650 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69  e a cursor previ
1b660 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20  ously opened as 
1b670 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f  P1.  If P1 is no
1b680 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f  t.** currently o
1b690 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75  pen, this instru
1b6a0 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70  ction is a no-op
1b6b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f  ..*/.case OP_Clo
1b6c0 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  se: {.  assert( 
1b6d0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1b6e0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1b6f0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
1b700 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70  eFreeCursor(p, p
1b710 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1b720 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f  );.  p->apCsr[pO
1b730 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72  p->p1] = 0;.  br
1b740 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1b750 65 3a 20 53 65 65 6b 47 65 20 50 31 20 50 32 20  e: SeekGe P1 P2 
1b760 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
1b770 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1b780 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1b790 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1b7a0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1b7b0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1b7c0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1b7d0 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20   P3 as the key. 
1b7e0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1b7f0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1b800 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1b810 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1b820 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1b830 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1b840 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1b850 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1b860 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1b870 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1b880 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1b890 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
1b8a0 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
1b8b0 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
1b8c0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1b8d0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1b8e0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1b8f0 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61  records .** grea
1b900 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1b910 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
1b920 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1b930 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1b940 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1b950 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1b960 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
1b970 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  kLt, SeekGt, See
1b980 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1b990 3a 20 53 65 65 6b 47 74 20 50 31 20 50 32 20 50  : SeekGt P1 P2 P
1b9a0 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  3 P4 *.**.** If 
1b9b0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1b9c0 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1b9d0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1b9e0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1b9f0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1ba00 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1ba10 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
1ba20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1ba30 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1ba40 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1ba50 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1ba60 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1ba70 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1ba80 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1ba90 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1baa0 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1bab0 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1bac0 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
1bad0 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
1bae0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1baf0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
1bb00 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1bb10 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1bb20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20  records greater 
1bb30 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
1bb40 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1bb50 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1bb60 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  o P2..**.** See 
1bb70 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1bb80 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c  Found, Distinct,
1bb90 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c   SeekLt, SeekGe,
1bba0 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1bbb0 63 6f 64 65 3a 20 53 65 65 6b 4c 74 20 50 31 20  code: SeekLt P1 
1bbc0 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a  P2 P3 P4 * .**.*
1bbd0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1bbe0 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1bbf0 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1bc00 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1bc10 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1bc20 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1bc30 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
1bc40 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
1bc50 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1bc60 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1bc70 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1bc80 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1bc90 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1bca0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1bcb0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1bcc0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1bcd0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1bce0 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1bcf0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61  points to the la
1bd00 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  rgest entry that
1bd10 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61   .** is less tha
1bd20 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
1bd30 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1bd40 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68   records less th
1bd50 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
1bd60 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1bd70 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1bd80 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
1bd90 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1bda0 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
1bdb0 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1bdc0 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1bdd0 64 65 3a 20 53 65 65 6b 4c 65 20 50 31 20 50 32  de: SeekLe P1 P2
1bde0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
1bdf0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1be00 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1be10 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1be20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1be30 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1be40 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1be50 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1be60 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1be70 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1be80 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1be90 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1bea0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1beb0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1bec0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1bed0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1bee0 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1bef0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1bf00 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1bf10 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
1bf20 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1bf30 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
1bf40 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1bf50 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1bf60 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1bf70 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f   .** less than o
1bf80 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1bf90 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1bfa0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1bfb0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65   to P2..**.** Se
1bfc0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1bfd0 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63  otFound, Distinc
1bfe0 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  t, SeekGt, SeekG
1bff0 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73  e, SeekLt.*/.cas
1c000 65 20 4f 50 5f 53 65 65 6b 4c 74 3a 20 20 20 20  e OP_SeekLt:    
1c010 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1c020 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1c030 6b 4c 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLe:         /* 
1c040 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1c050 65 20 4f 50 5f 53 65 65 6b 47 65 3a 20 20 20 20  e OP_SeekGe:    
1c060 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1c070 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1c080 6b 47 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kGt: {       /* 
1c090 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1c0a0 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63  nt res;.  int oc
1c0b0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1c0c0 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  pC;.  UnpackedRe
1c0d0 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46  cord r;.  int nF
1c0e0 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79  ield;.  i64 iKey
1c0f0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f  ;      /* The ro
1c100 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65  wid we are to se
1c110 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65  ek to */..  asse
1c120 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1c130 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1c140 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1c150 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a  ( pOp->p2!=0 );.
1c160 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1c170 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1c180 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1c190 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
1c1a0 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
1c1b0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1c1c0 6b 4c 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74  kLe == OP_SeekLt
1c1d0 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
1c1e0 4f 50 5f 53 65 65 6b 47 65 20 3d 3d 20 4f 50 5f  OP_SeekGe == OP_
1c1f0 53 65 65 6b 4c 74 2b 32 20 29 3b 0a 20 20 61 73  SeekLt+2 );.  as
1c200 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 74 20  sert( OP_SeekGt 
1c210 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 33 20 29  == OP_SeekLt+3 )
1c220 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1c230 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 69  isOrdered );.  i
1c240 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43  f( ALWAYS(pC->pC
1c250 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20  ursor!=0) ){.   
1c260 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   oc = pOp->opcod
1c270 65 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  e;.    pC->nullR
1c280 6f 77 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  ow = 0;.    if( 
1c290 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20  pC->isTable ){. 
1c2a0 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75       /* The inpu
1c2b0 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69  t value in P3 mi
1c2c0 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79  ght be of any ty
1c2d0 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61  pe: integer, rea
1c2e0 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 20  l, string,.     
1c2f0 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c   ** blob, or NUL
1c300 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73  L.  But it needs
1c310 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
1c320 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20  r before we can 
1c330 64 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  do.      ** the 
1c340 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20  seek, so covert 
1c350 69 74 2e 20 2a 2f 0a 20 20 20 20 20 20 70 49 6e  it. */.      pIn
1c360 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1c370 33 5d 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e  3];.      applyN
1c380 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
1c390 49 6e 33 29 3b 0a 20 20 20 20 20 20 69 4b 65 79  In3);.      iKey
1c3a0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
1c3b0 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20  tValue(pIn3);.  
1c3c0 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1c3d0 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20 20  alid = 0;..     
1c3e0 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1c3f0 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65  lue could not be
1c400 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
1c410 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f  an integer witho
1c420 75 74 0a 20 20 20 20 20 20 2a 2a 20 6c 6f 73 73  ut.      ** loss
1c430 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c   of information,
1c440 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72   then special pr
1c450 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75  ocessing is requ
1c460 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20  ired... */.     
1c470 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1c480 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
1c490 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
1c4a0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1c4b0 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Real)==0 ){.  
1c4c0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
1c4d0 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f  e P3 value canno
1c4e0 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
1c4f0 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20  nto any kind of 
1c500 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20  a number,.      
1c510 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20      ** then the 
1c520 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73  seek is not poss
1c530 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f  ible, so jump to
1c540 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20   P2 */.         
1c550 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1c560 31 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  1;.          bre
1c570 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
1c580 20 20 20 20 20 20 2f 2a 20 49 66 20 77 65 20 72        /* If we r
1c590 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c  each this point,
1c5a0 20 74 68 65 6e 20 74 68 65 20 50 33 20 76 61 6c   then the P3 val
1c5b0 75 65 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f  ue must be a flo
1c5c0 61 74 69 6e 67 0a 20 20 20 20 20 20 20 20 2a 2a  ating.        **
1c5d0 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 20 2a   point number. *
1c5e0 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
1c5f0 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1c600 20 4d 45 4d 5f 52 65 61 6c 29 21 3d 30 20 29 3b   MEM_Real)!=0 );
1c610 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 4b  ..        if( iK
1c620 65 79 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ey==SMALLEST_INT
1c630 36 34 20 26 26 20 28 70 49 6e 33 2d 3e 72 3c 28  64 && (pIn3->r<(
1c640 64 6f 75 62 6c 65 29 69 4b 65 79 20 7c 7c 20 70  double)iKey || p
1c650 49 6e 33 2d 3e 72 3e 30 29 20 29 7b 0a 20 20 20  In3->r>0) ){.   
1c660 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 33         /* The P3
1c670 20 76 61 6c 75 65 20 69 73 20 74 6f 6f 20 6c 61   value is too la
1c680 72 67 65 20 69 6e 20 6d 61 67 6e 69 74 75 64 65  rge in magnitude
1c690 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 65 64   to be expressed
1c6a0 20 61 73 20 61 6e 0a 20 20 20 20 20 20 20 20 20   as an.         
1c6b0 20 2a 2a 20 69 6e 74 65 67 65 72 2e 20 2a 2f 0a   ** integer. */.
1c6c0 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d 20            res = 
1c6d0 31 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  1;.          if(
1c6e0 20 70 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20 20   pIn3->r<0 ){.  
1c6f0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 63            if( oc
1c700 3e 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20 20  >=OP_SeekGe ){  
1c710 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1c720 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGe || oc==OP_
1c730 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20  SeekGt );.      
1c740 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1c750 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
1c760 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1c770 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
1c780 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1c790 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1c7a0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1c7b0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1c7c0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1c7d0 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 63 3c           if( oc<
1c7e0 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 20 20 61  =OP_SeekLe ){  a
1c7f0 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1c800 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLt || oc==OP_S
1c810 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 20  eekLe );.       
1c820 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1c830 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d  te3BtreeLast(pC-
1c840 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1c850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1c860 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1c870 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1c880 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1c890 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1c8a0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1c8b0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
1c8c0 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
1c8d0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  >p2 - 1;.       
1c8e0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62     }.          b
1c8f0 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65  reak;.        }e
1c900 6c 73 65 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53  lse if( oc==OP_S
1c910 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLt || oc==OP_
1c920 53 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20  SeekGe ){.      
1c930 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 63      /* Use the c
1c940 65 69 6c 69 6e 67 28 29 20 66 75 6e 63 74 69 6f  eiling() functio
1c950 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61  n to convert rea
1c960 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20  l->int */.      
1c970 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20      if( pIn3->r 
1c980 3e 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  > (double)iKey )
1c990 20 69 4b 65 79 2b 2b 3b 0a 20 20 20 20 20 20 20   iKey++;.       
1c9a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1c9b0 20 20 2f 2a 20 55 73 65 20 74 68 65 20 66 6c 6f    /* Use the flo
1c9c0 6f 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f  or() function to
1c9d0 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69   convert real->i
1c9e0 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  nt */.          
1c9f0 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1ca00 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLe || oc==OP_
1ca10 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20  SeekGt );.      
1ca20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20      if( pIn3->r 
1ca30 3c 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  < (double)iKey )
1ca40 20 69 4b 65 79 2d 2d 3b 0a 20 20 20 20 20 20 20   iKey--;.       
1ca50 20 7d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20   }.      } .    
1ca60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1ca70 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1ca80 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
1ca90 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20  , (u64)iKey, 0, 
1caa0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
1cab0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1cac0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
1cad0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1cae0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
1caf0 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
1cb00 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64         pC->rowid
1cb10 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20  IsValid = 1;.   
1cb20 20 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77       pC->lastRow
1cb30 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20  id = iKey;.     
1cb40 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
1cb50 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1cb60 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 61 73  ->p4.i;.      as
1cb70 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1cb80 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
1cb90 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69       assert( nFi
1cba0 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 20 20 72  eld>0 );.      r
1cbb0 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
1cbc0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
1cbd0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
1cbe0 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 20 20 2f  nField;..      /
1cbf0 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20  * The next line 
1cc00 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73  of code computes
1cc10 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c   as follows, onl
1cc20 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20 20 20  y faster:.      
1cc30 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  **   if( oc==OP_
1cc40 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGt || oc==OP
1cc50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20  _SeekLe ){.     
1cc60 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20   **     r.flags 
1cc70 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  = UNPACKED_INCRK
1cc80 45 59 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d  EY;.      **   }
1cc90 65 6c 73 65 7b 0a 20 20 20 20 20 20 2a 2a 20 20  else{.      **  
1cca0 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a     r.flags = 0;.
1ccb0 20 20 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20        **   }.   
1ccc0 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 2e 66 6c     */.      r.fl
1ccd0 61 67 73 20 3d 20 28 75 38 29 28 55 4e 50 41 43  ags = (u8)(UNPAC
1cce0 4b 45 44 5f 49 4e 43 52 4b 45 59 20 2a 20 28 31  KED_INCRKEY * (1
1ccf0 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b   & (oc - OP_Seek
1cd00 4c 74 29 29 29 3b 0a 20 20 20 20 20 20 61 73 73  Lt)));.      ass
1cd10 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1cd20 47 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55  Gt || r.flags==U
1cd30 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
1cd40 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1cd50 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c   oc!=OP_SeekLe |
1cd60 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43  | r.flags==UNPAC
1cd70 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20  KED_INCRKEY );. 
1cd80 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21       assert( oc!
1cd90 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 72 2e  =OP_SeekGe || r.
1cda0 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 20 20 20 20  flags==0 );.    
1cdb0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1cdc0 5f 53 65 65 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61  _SeekLt || r.fla
1cdd0 67 73 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20  gs==0 );..      
1cde0 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
1cdf0 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
1ce00 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
1ce10 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
1ce20 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
1ce30 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
1ce40 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1ce50 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
1ce60 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  .      ExpandBlo
1ce70 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 20  b(r.aMem);.     
1ce80 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1ce90 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1cea0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1ceb0 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1cec0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1ced0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1cee0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1cef0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1cf00 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77   }.      pC->row
1cf10 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1cf20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
1cf30 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1cf40 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1cf50 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1cf60 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  LE;.#ifdef SQLIT
1cf70 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74  E_TEST.    sqlit
1cf80 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
1cf90 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  +;.#endif.    if
1cfa0 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc>=OP_SeekGe 
1cfb0 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1cfc0 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d  OP_SeekGe || oc=
1cfd0 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20  =OP_SeekGt );.  
1cfe0 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c      if( res<0 ||
1cff0 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
1d000 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20 20  OP_SeekGt) ){.  
1d010 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1d020 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e  e3BtreeNext(pC->
1d030 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1d040 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1d050 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1d060 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1d070 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ror;.        pC-
1d080 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1d090 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
1d0a0 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
1d0b0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
1d0c0 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
1d0d0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20  ( oc==OP_SeekLt 
1d0e0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  || oc==OP_SeekLe
1d0f0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65   );.      if( re
1d100 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s>0 || (res==0 &
1d110 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29  & oc==OP_SeekLt)
1d120 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1d130 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
1d140 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f  vious(pC->pCurso
1d150 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1d160 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1d170 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1d180 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1d190 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64         pC->rowid
1d1a0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1d1b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1d1c0 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
1d1d0 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
1d1e0 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
1d1f0 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
1d200 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65 65 20  .        ** see 
1d210 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63  if this is the c
1d220 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ase..        */.
1d230 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 73 71          res = sq
1d240 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43  lite3BtreeEof(pC
1d250 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1d260 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
1d270 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
1d280 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  );.    if( res )
1d290 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1d2a0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
1d2b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
1d2c0 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65  This happens whe
1d2d0 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  n attempting to 
1d2e0 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33  open the sqlite3
1d2f0 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20  _master table.  
1d300 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20 61 63    ** for read ac
1d310 63 65 73 73 20 72 65 74 75 72 6e 73 20 53 51 4c  cess returns SQL
1d320 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68  ITE_EMPTY. In th
1d330 69 73 20 63 61 73 65 20 61 6c 77 61 79 73 0a 20  is case always. 
1d340 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a     ** take the j
1d350 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65 72 65  ump (since there
1d360 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1d370 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e 0a 20  in the table).. 
1d380 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70     */.    pc = p
1d390 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1d3a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1d3b0 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50  pcode: Seek P1 P
1d3c0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31  2 * * *.**.** P1
1d3d0 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c   is an open tabl
1d3e0 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  e cursor and P2 
1d3f0 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67  is a rowid integ
1d400 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20  er.  Arrange.** 
1d410 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73  for P1 to move s
1d420 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1d430 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69   to the rowid gi
1d440 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a  ven by P2..**.**
1d450 20 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c   This is actuall
1d460 79 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  y a deferred see
1d470 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
1d480 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
1d490 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
1d4a0 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
1d4b0 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
1d4c0 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
1d4d0 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
1d4e0 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
1d4f0 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20  appens..*/.case 
1d500 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a  OP_Seek: {    /*
1d510 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
1d520 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
1d530 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1d540 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1d550 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1d560 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1d570 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1d580 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  =0 );.  if( ALWA
1d590 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  YS(pC->pCursor!=
1d5a0 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  0) ){.    assert
1d5b0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1d5c0 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
1d5d0 20 3d 20 30 3b 0a 20 20 20 20 70 49 6e 32 20 3d   = 0;.    pIn2 =
1d5e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
1d5f0 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  .    pC->movetoT
1d600 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56  arget = sqlite3V
1d610 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
1d620 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  );.    pC->rowid
1d630 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1d640 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1d650 65 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62  eto = 1;.  }.  b
1d660 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f  reak;.}.  ../* O
1d670 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
1d680 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1d690 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1d6a0 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1d6b0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1d6c0 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1d6d0 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1d6e0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1d6f0 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1d700 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1d710 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1d720 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1d730 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1d740 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1d750 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1d760 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1d770 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
1d780 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79   a prefix of any
1d790 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1d7a0 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1d7b0 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31   to P2 and.** P1
1d7c0 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
1d7d0 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e  g at the matchin
1d7e0 67 20 65 6e 74 72 79 2e 0a 2a 2f 0a 2f 2a 20 4f  g entry..*/./* O
1d7f0 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20  pcode: NotFound 
1d800 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1d810 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
1d820 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
1d830 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
1d840 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
1d850 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
1d860 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1d870 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1d880 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1d890 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
1d8a0 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
1d8b0 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
1d8c0 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1d8d0 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1d8e0 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1d8f0 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1d900 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65  * is not the pre
1d910 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
1d920 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
1d930 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
1d940 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65  .  If P1 .** doe
1d950 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74  s contain an ent
1d960 72 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20  ry whose prefix 
1d970 6d 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50  matches the P3/P
1d980 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f  4 record then co
1d990 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74  ntrol.** falls t
1d9a0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
1d9b0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
1d9c0 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  nd P1 is left po
1d9d0 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a  inting at the.**
1d9e0 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
1d9f0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1da00 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
1da10 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63  s, IsUnique.*/.c
1da20 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a  ase OP_NotFound:
1da30 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1da40 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  in3 */.case OP_F
1da50 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  ound: {        /
1da60 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1da70 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73   int alreadyExis
1da80 74 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ts;.  VdbeCursor
1da90 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
1daa0 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a  .  char *pFree;.
1dab0 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1dac0 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70   *pIdxKey;.  Unp
1dad0 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20  ackedRecord r;. 
1dae0 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52   char aTempRec[R
1daf0 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70  OUND8(sizeof(Unp
1db00 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20  ackedRecord)) + 
1db10 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33 20 2b 20  sizeof(Mem)*3 + 
1db20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  7];..#ifdef SQLI
1db30 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65  TE_TEST.  sqlite
1db40 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b  3_found_count++;
1db50 0a 23 65 6e 64 69 66 0a 0a 20 20 61 6c 72 65 61  .#endif..  alrea
1db60 64 79 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20  dyExists = 0;.  
1db70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1db80 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1db90 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1dba0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1dbb0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
1dbc0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1dbd0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1dbe0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 49  t( pC!=0 );.  pI
1dbf0 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1dc00 70 33 5d 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  p3];.  if( ALWAY
1dc10 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  S(pC->pCursor!=0
1dc20 29 20 29 7b 0a 0a 20 20 20 20 61 73 73 65 72 74  ) ){..    assert
1dc30 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
1dc40 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   );.    if( pOp-
1dc50 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20  >p4.i>0 ){.     
1dc60 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1dc70 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
1dc80 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
1dc90 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
1dca0 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33     r.aMem = pIn3
1dcb0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1dcc0 44 45 42 55 47 0a 20 20 20 20 20 20 7b 20 69 6e  DEBUG.      { in
1dcd0 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
1dce0 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
1dcf0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1dd00 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
1dd10 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20   }.#endif.      
1dd20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
1dd30 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b  ED_PREFIX_MATCH;
1dd40 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 20 3d  .      pIdxKey =
1dd50 20 26 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   &r;.    }else{.
1dd60 20 20 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20        pIdxKey = 
1dd70 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63  sqlite3VdbeAlloc
1dd80 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a  UnpackedRecord(.
1dd90 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b            pC->pK
1dda0 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63  eyInfo, aTempRec
1ddb0 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65  , sizeof(aTempRe
1ddc0 63 29 2c 20 26 70 46 72 65 65 0a 20 20 20 20 20  c), &pFree.     
1ddd0 20 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 70   ); .      if( p
1dde0 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f  IdxKey==0 ) goto
1ddf0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 61   no_mem;.      a
1de00 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
1de10 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
1de20 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
1de30 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1de40 4d 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f  M_Zero)==0 );  /
1de50 2a 20 7a 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65  * zeroblobs alre
1de60 61 64 79 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a  ady expanded */.
1de70 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
1de80 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43  eRecordUnpack(pC
1de90 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33  ->pKeyInfo, pIn3
1dea0 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49  ->n, pIn3->z, pI
1deb0 64 78 4b 65 79 29 3b 0a 20 20 20 20 20 20 70 49  dxKey);.      pI
1dec0 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c 3d 20  dxKey->flags |= 
1ded0 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
1dee0 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20 20 20  MATCH;.    }.   
1def0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1df00 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1df10 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49  (pC->pCursor, pI
1df20 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65  dxKey, 0, 0, &re
1df30 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  s);.    if( pOp-
1df40 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20  >p4.i==0 ){.    
1df50 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1df60 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 20 20  db, pFree);.    
1df70 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
1df80 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1df90 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
1dfa0 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20    alreadyExists 
1dfb0 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 20 20  = (res==0);.    
1dfc0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1dfd0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
1dfe0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1dff0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
1e000 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1e010 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20  ==OP_Found ){.  
1e020 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69    if( alreadyExi
1e030 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  sts ) pc = pOp->
1e040 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
1e050 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65 61 64  .    if( !alread
1e060 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70  yExists ) pc = p
1e070 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1e080 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1e090 70 63 6f 64 65 3a 20 49 73 55 6e 69 71 75 65 20  pcode: IsUnique 
1e0a0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1e0b0 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1e0c0 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 69 6e 64 65   open on an inde
1e0d0 78 20 62 2d 74 72 65 65 20 2d 20 74 68 61 74 20  x b-tree - that 
1e0e0 69 73 20 74 6f 20 73 61 79 2c 20 61 20 62 74 72  is to say, a btr
1e0f0 65 65 20 77 68 69 63 68 0a 2a 2a 20 6e 6f 20 64  ee which.** no d
1e100 61 74 61 20 61 6e 64 20 77 68 65 72 65 20 74 68  ata and where th
1e110 65 20 6b 65 79 20 61 72 65 20 72 65 63 6f 72 64  e key are record
1e120 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 4f  s generated by O
1e130 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77 69 74  P_MakeRecord wit
1e140 68 0a 2a 2a 20 74 68 65 20 6c 69 73 74 20 66 69  h.** the list fi
1e150 65 6c 64 20 62 65 69 6e 67 20 74 68 65 20 69 6e  eld being the in
1e160 74 65 67 65 72 20 52 4f 57 49 44 20 6f 66 20 74  teger ROWID of t
1e170 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 74 68  he entry that th
1e180 65 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79  e index.** entry
1e190 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a   refers to..**.*
1e1a0 2a 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65  * The P3 registe
1e1b0 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e  r contains an in
1e1c0 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d  teger record num
1e1d0 62 65 72 2e 20 43 61 6c 6c 20 74 68 69 73 20 72  ber. Call this r
1e1e0 65 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d 62 65 72  ecord .** number
1e1f0 20 52 2e 20 52 65 67 69 73 74 65 72 20 50 34 20   R. Register P4 
1e200 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1e210 61 20 73 65 74 20 6f 66 20 4e 20 63 6f 6e 74 69  a set of N conti
1e220 67 75 6f 75 73 20 72 65 67 69 73 74 65 72 73 0a  guous registers.
1e230 2a 2a 20 74 68 61 74 20 6d 61 6b 65 20 75 70 20  ** that make up 
1e240 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1e250 78 20 6b 65 79 20 74 68 61 74 20 63 61 6e 20 62  x key that can b
1e260 65 20 75 73 65 64 20 77 69 74 68 20 63 75 72 73  e used with curs
1e270 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 76 61  or P1..** The va
1e280 6c 75 65 20 6f 66 20 4e 20 63 61 6e 20 62 65 20  lue of N can be 
1e290 69 6e 66 65 72 72 65 64 20 66 72 6f 6d 20 74 68  inferred from th
1e2a0 65 20 63 75 72 73 6f 72 2e 20 4e 20 69 6e 63 6c  e cursor. N incl
1e2b0 75 64 65 73 20 74 68 65 20 72 6f 77 69 64 0a 2a  udes the rowid.*
1e2c0 2a 20 76 61 6c 75 65 20 61 70 70 65 6e 64 65 64  * value appended
1e2d0 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74   to the end of t
1e2e0 68 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64 2e  he index record.
1e2f0 20 54 68 69 73 20 72 6f 77 69 64 20 76 61 6c 75   This rowid valu
1e300 65 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d 61 79 20  e may.** or may 
1e310 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  not be the same 
1e320 61 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  as R..**.** If a
1e330 6e 79 20 6f 66 20 74 68 65 20 4e 20 72 65 67 69  ny of the N regi
1e340 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
1e350 77 69 74 68 20 72 65 67 69 73 74 65 72 20 50 34  with register P4
1e360 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c   contains a NULL
1e370 0a 2a 2a 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20  .** value, jump 
1e380 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1e390 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69  2..**.** Otherwi
1e3a0 73 65 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63  se, this instruc
1e3b0 74 69 6f 6e 20 63 68 65 63 6b 73 20 69 66 20 63  tion checks if c
1e3c0 75 72 73 6f 72 20 50 31 20 63 6f 6e 74 61 69 6e  ursor P1 contain
1e3d0 73 20 61 6e 20 65 6e 74 72 79 0a 2a 2a 20 77 68  s an entry.** wh
1e3e0 65 72 65 20 74 68 65 20 66 69 72 73 74 20 28 4e  ere the first (N
1e3f0 2d 31 29 20 66 69 65 6c 64 73 20 6d 61 74 63 68  -1) fields match
1e400 20 62 75 74 20 74 68 65 20 72 6f 77 69 64 20 76   but the rowid v
1e410 61 6c 75 65 20 61 74 20 74 68 65 20 65 6e 64 0a  alue at the end.
1e420 2a 2a 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ** of the index 
1e430 65 6e 74 72 79 20 69 73 20 6e 6f 74 20 52 2e 20  entry is not R. 
1e440 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
1e450 75 63 68 20 65 6e 74 72 79 2c 20 63 6f 6e 74 72  uch entry, contr
1e460 6f 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74 6f 20 69  ol jumps.** to i
1e470 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f  nstruction P2. O
1e480 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 72 6f  therwise, the ro
1e490 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c  wid of the confl
1e4a0 69 63 74 69 6e 67 20 69 6e 64 65 78 0a 2a 2a 20  icting index.** 
1e4b0 65 6e 74 72 79 20 69 73 20 63 6f 70 69 65 64 20  entry is copied 
1e4c0 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61  to register P3 a
1e4d0 6e 64 20 63 6f 6e 74 72 6f 6c 20 66 61 6c 6c 73  nd control falls
1e4e0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1e4f0 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74  next.** instruct
1e500 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
1e510 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  lso: NotFound, N
1e520 6f 74 45 78 69 73 74 73 2c 20 46 6f 75 6e 64 0a  otExists, Found.
1e530 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 55 6e 69  */.case OP_IsUni
1e540 71 75 65 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  que: {        /*
1e550 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1e560 75 31 36 20 69 69 3b 0a 20 20 56 64 62 65 43 75  u16 ii;.  VdbeCu
1e570 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42 74 43  rsor *pCx;.  BtC
1e580 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1e590 75 31 36 20 6e 46 69 65 6c 64 3b 0a 20 20 4d 65  u16 nField;.  Me
1e5a0 6d 20 2a 61 4d 78 3b 0a 20 20 55 6e 70 61 63 6b  m *aMx;.  Unpack
1e5b0 65 64 52 65 63 6f 72 64 20 72 3b 20 20 20 20 20  edRecord r;     
1e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e5d0 42 2d 54 72 65 65 20 69 6e 64 65 78 20 73 65 61  B-Tree index sea
1e5e0 72 63 68 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34  rch key */.  i64
1e5f0 20 52 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   R;             
1e600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e610 2f 2a 20 52 6f 77 69 64 20 73 74 6f 72 65 64 20  /* Rowid stored 
1e620 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 2a  in register P3 *
1e630 2f 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  /..  pIn3 = &aMe
1e640 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 4d  m[pOp->p3];.  aM
1e650 78 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  x = &aMem[pOp->p
1e660 34 2e 69 5d 3b 0a 20 20 2f 2a 20 41 73 73 65 72  4.i];.  /* Asser
1e670 74 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65  t that the value
1e680 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20  s of parameters 
1e690 50 31 20 61 6e 64 20 50 34 20 61 72 65 20 69 6e  P1 and P4 are in
1e6a0 20 72 61 6e 67 65 2e 20 2a 2f 0a 20 20 61 73 73   range. */.  ass
1e6b0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1e6c0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1e6d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
1e6e0 69 3e 30 20 26 26 20 70 4f 70 2d 3e 70 34 2e 69  i>0 && pOp->p4.i
1e6f0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61  <=p->nMem );.  a
1e700 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1e710 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1e720 6e 43 75 72 73 6f 72 20 29 3b 0a 0a 20 20 2f 2a  nCursor );..  /*
1e730 20 46 69 6e 64 20 74 68 65 20 69 6e 64 65 78 20   Find the index 
1e740 63 75 72 73 6f 72 2e 20 2a 2f 0a 20 20 70 43 78  cursor. */.  pCx
1e750 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1e760 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1e770 70 43 78 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76  pCx->deferredMov
1e780 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 78 2d  eto==0 );.  pCx-
1e790 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b  >seekResult = 0;
1e7a0 0a 20 20 70 43 78 2d 3e 63 61 63 68 65 53 74 61  .  pCx->cacheSta
1e7b0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1e7c0 45 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 78  E;.  pCrsr = pCx
1e7d0 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a  ->pCursor;..  /*
1e7e0 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65 20 76   If any of the v
1e7f0 61 6c 75 65 73 20 61 72 65 20 4e 55 4c 4c 2c 20  alues are NULL, 
1e800 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 2a  take the jump. *
1e810 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 78  /.  nField = pCx
1e820 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  ->pKeyInfo->nFie
1e830 6c 64 3b 0a 20 20 66 6f 72 28 69 69 3d 30 3b 20  ld;.  for(ii=0; 
1e840 69 69 3c 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29  ii<nField; ii++)
1e850 7b 0a 20 20 20 20 69 66 28 20 61 4d 78 5b 69 69  {.    if( aMx[ii
1e860 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
1e870 6c 6c 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ll ){.      pc =
1e880 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1e890 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b 0a 20      pCrsr = 0;. 
1e8a0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1e8b0 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  }.  }.  assert( 
1e8c0 28 61 4d 78 5b 6e 46 69 65 6c 64 5d 2e 66 6c 61  (aMx[nField].fla
1e8d0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
1e8e0 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 72 73  0 );..  if( pCrs
1e8f0 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 50  r!=0 ){.    /* P
1e900 6f 70 75 6c 61 74 65 20 74 68 65 20 69 6e 64 65  opulate the inde
1e910 78 20 73 65 61 72 63 68 20 6b 65 79 2e 20 2a 2f  x search key. */
1e920 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
1e930 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 3b  = pCx->pKeyInfo;
1e940 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
1e950 6e 46 69 65 6c 64 20 2b 20 31 3b 0a 20 20 20 20  nField + 1;.    
1e960 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
1e970 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48  ED_PREFIX_SEARCH
1e980 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 61  ;.    r.aMem = a
1e990 4d 78 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  Mx;.#ifdef SQLIT
1e9a0 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e  E_DEBUG.    { in
1e9b0 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
1e9c0 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
1e9d0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1e9e0 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
1e9f0 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
1ea00 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 76 61  * Extract the va
1ea10 6c 75 65 20 6f 66 20 52 20 66 72 6f 6d 20 72 65  lue of R from re
1ea20 67 69 73 74 65 72 20 50 33 2e 20 2a 2f 0a 20 20  gister P3. */.  
1ea30 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1ea40 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29  Integerify(pIn3)
1ea50 3b 0a 20 20 20 20 52 20 3d 20 70 49 6e 33 2d 3e  ;.    R = pIn3->
1ea60 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61  u.i;..    /* Sea
1ea70 72 63 68 20 74 68 65 20 42 2d 54 72 65 65 20 69  rch the B-Tree i
1ea80 6e 64 65 78 2e 20 49 66 20 6e 6f 20 63 6f 6e 66  ndex. If no conf
1ea90 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20 69  licting record i
1eaa0 73 20 66 6f 75 6e 64 2c 20 6a 75 6d 70 0a 20 20  s found, jump.  
1eab0 20 20 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65    ** to P2. Othe
1eac0 72 77 69 73 65 2c 20 63 6f 70 79 20 74 68 65 20  rwise, copy the 
1ead0 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e  rowid of the con
1eae0 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20  flicting record 
1eaf0 74 6f 0a 20 20 20 20 2a 2a 20 72 65 67 69 73 74  to.    ** regist
1eb00 65 72 20 50 33 20 61 6e 64 20 66 61 6c 6c 20 74  er P3 and fall t
1eb10 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
1eb20 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  xt instruction. 
1eb30 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
1eb40 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1eb50 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
1eb60 72 2c 20 30 2c 20 30 2c 20 26 70 43 78 2d 3e 73  r, 0, 0, &pCx->s
1eb70 65 65 6b 52 65 73 75 6c 74 29 3b 0a 20 20 20 20  eekResult);.    
1eb80 69 66 28 20 28 72 2e 66 6c 61 67 73 20 26 20 55  if( (r.flags & U
1eb90 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53  NPACKED_PREFIX_S
1eba0 45 41 52 43 48 29 20 7c 7c 20 72 2e 72 6f 77 69  EARCH) || r.rowi
1ebb0 64 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20 70 63  d==R ){.      pc
1ebc0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1ebd0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1ebe0 20 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 72 2e 72   pIn3->u.i = r.r
1ebf0 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  owid;.    }.  }.
1ec00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1ec10 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73  pcode: NotExists
1ec20 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1ec30 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f 6e 74  .** Use the cont
1ec40 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
1ec50 50 33 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  P3 as an integer
1ec60 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63 6f   key.  If a reco
1ec70 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61 74  rd .** with that
1ec80 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65 78   key does not ex
1ec90 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66 20  ist in table of 
1eca0 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  P1, then jump to
1ecb0 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P2. .** If the 
1ecc0 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69 73  record does exis
1ecd0 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
1ece0 6f 75 67 68 2e 20 20 54 68 65 20 63 75 72 73 6f  ough.  The curso
1ecf0 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f  r is left .** po
1ed00 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72 65  inting to the re
1ed10 63 6f 72 64 20 69 66 20 69 74 20 65 78 69 73 74  cord if it exist
1ed20 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66  s..**.** The dif
1ed30 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
1ed40 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 61  this operation a
1ed50 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74  nd NotFound is t
1ed60 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hat this.** oper
1ed70 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1ed80 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74 65  e key is an inte
1ed90 67 65 72 20 61 6e 64 20 74 68 61 74 20 50 31 20  ger and that P1 
1eda0 69 73 20 61 20 74 61 62 6c 65 20 77 68 65 72 65  is a table where
1edb0 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61  as.** NotFound a
1edc0 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61 20  ssumes key is a 
1edd0 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1ede0 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64   from MakeRecord
1edf0 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e   and.** P1 is an
1ee00 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65   index..**.** Se
1ee10 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1ee20 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75  otFound, IsUniqu
1ee30 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  e.*/.case OP_Not
1ee40 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20  Exists: {       
1ee50 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1ee60 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ee70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1ee80 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
1ee90 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20  .  u64 iKey;..  
1eea0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
1eeb0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
1eec0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
1eed0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
1eee0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1eef0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1ef00 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1ef10 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1ef20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1ef30 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1ef40 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1ef50 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1ef60 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
1ef70 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
1ef80 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c  Cursor;.  if( AL
1ef90 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29  WAYS(pCrsr!=0) )
1efa0 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20  {.    res = 0;. 
1efb0 20 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e     iKey = pIn3->
1efc0 75 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  u.i;.    rc = sq
1efd0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1efe0 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
1eff0 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  0, iKey, 0, &res
1f000 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74 52  );.    pC->lastR
1f010 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  owid = pIn3->u.i
1f020 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  ;.    pC->rowidI
1f030 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20  sValid = res==0 
1f040 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75  ?1:0;.    pC->nu
1f050 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
1f060 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1f070 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1f080 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1f090 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66  veto = 0;.    if
1f0a0 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20  ( res!=0 ){.    
1f0b0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1f0c0 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   1;.      assert
1f0d0 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
1f0e0 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20  id==0 );.    }. 
1f0f0 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c     pC->seekResul
1f100 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65  t = res;.  }else
1f110 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
1f120 70 70 65 6e 73 20 77 68 65 6e 20 61 6e 20 61 74  ppens when an at
1f130 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61 20  tempt to open a 
1f140 72 65 61 64 20 63 75 72 73 6f 72 20 6f 6e 20 74  read cursor on t
1f150 68 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74  he .    ** sqlit
1f160 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 72  e_master table r
1f170 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d  eturns SQLITE_EM
1f180 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  PTY..    */.    
1f190 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1f1a0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1f1b0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d  ->rowidIsValid==
1f1c0 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65  0 );.    pC->see
1f1d0 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 7d  kResult = 0;.  }
1f1e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1f1f0 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
1f200 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1f210 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74  ** Find the next
1f220 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65   available seque
1f230 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63  nce number for c
1f240 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69  ursor P1..** Wri
1f250 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  te the sequence 
1f260 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69  number into regi
1f270 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ster P2..** The 
1f280 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1f290 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  on the cursor is
1f2a0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74   incremented aft
1f2b0 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72  er this.** instr
1f2c0 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73  uction.  .*/.cas
1f2d0 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b  e OP_Sequence: {
1f2e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1f2f0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1f300 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1f310 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1f320 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f330 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
1f340 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
1f350 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
1f360 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1f370 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20  ->seqCount++;.  
1f380 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
1f390 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
1f3a0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1f3b0 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65  * Get a new inte
1f3c0 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ger record numbe
1f3d0 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22  r (a.k.a "rowid"
1f3e0 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65  ) used as the ke
1f3f0 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  y to a table..**
1f400 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62   The record numb
1f410 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  er is not previo
1f420 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b  usly used as a k
1f430 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ey in the databa
1f440 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74  se.** table that
1f450 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
1f460 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72  s to.  The new r
1f470 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
1f480 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74  written.** writt
1f490 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  en to register P
1f4a0 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30  2..**.** If P3>0
1f4b0 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65   then P3 is a re
1f4c0 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
1f4d0 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
1f4e0 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73   VDBE that holds
1f4f0 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74   .** the largest
1f500 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65   previously gene
1f510 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
1f520 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f  ber. No new reco
1f530 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a  rd numbers are.*
1f540 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20  * allowed to be 
1f550 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76  less than this v
1f560 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20  alue. When this 
1f570 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74  value reaches it
1f580 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61  s maximum, .** a
1f590 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72  n SQLITE_FULL er
1f5a0 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64  ror is generated
1f5b0 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65  . The P3 registe
1f5c0 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  r is updated wit
1f5d0 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72  h the '.** gener
1f5e0 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
1f5f0 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68  er. This P3 mech
1f600 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f  anism is used to
1f610 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20   help implement 
1f620 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45  the.** AUTOINCRE
1f630 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f  MENT feature..*/
1f640 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69  .case OP_NewRowi
1f650 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
1f660 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
1f670 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20  e */.  i64 v;   
1f680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f690 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   The new rowid *
1f6a0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1f6b0 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75  pC;        /* Cu
1f6c0 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f  rsor of table to
1f6d0 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77   get the new row
1f6e0 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  id */.  int res;
1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f700 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73  * Result of an s
1f710 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
1f720 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20  ) */.  int cnt; 
1f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f740 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69   Counter to limi
1f750 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
1f760 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65  searches */.  Me
1f770 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
1f780 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1f790 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74   holding largest
1f7a0 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49   rowid for AUTOI
1f7b0 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64  NCREMENT */.  Vd
1f7c0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
1f7d0 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61       /* Root fra
1f7e0 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20  me of VDBE */.. 
1f7f0 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20   v = 0;.  res = 
1f800 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
1f810 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1f820 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1f830 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1f840 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1f850 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1f860 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43  if( NEVER(pC->pC
1f870 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20  ursor==0) ){.   
1f880 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69   /* The zero ini
1f890 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76  tialization abov
1f8a0 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73  e is all that is
1f8b0 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c   needed */.  }el
1f8c0 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e  se{.    /* The n
1f8d0 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63  ext rowid or rec
1f8e0 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66  ord number (diff
1f8f0 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20  erent terms for 
1f900 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20  the same.    ** 
1f910 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e  thing) is obtain
1f920 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70  ed in a two-step
1f930 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20   algorithm..    
1f940 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20  **.    ** First 
1f950 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  we attempt to fi
1f960 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  nd the largest e
1f970 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e  xisting rowid an
1f980 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a  d add one.    **
1f990 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69   to that.  But i
1f9a0 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  f the largest ex
1f9b0 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20  isting rowid is 
1f9c0 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69  already the maxi
1f9d0 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74  mum.    ** posit
1f9e0 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20  ive integer, we 
1f9f0 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72  have to fall thr
1fa00 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f  ough to the seco
1fa10 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62  nd.    ** probab
1fa20 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68  ilistic algorith
1fa30 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  m.    **.    ** 
1fa40 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72  The second algor
1fa50 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63  ithm is to selec
1fa60 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e  t a rowid at ran
1fa70 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20  dom and see if. 
1fa80 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79     ** it already
1fa90 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74   exists in the t
1faa0 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65  able.  If it doe
1fab0 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20  s not exist, we 
1fac0 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63  have.    ** succ
1fad0 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72  eeded.  If the r
1fae0 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73  andom rowid does
1faf0 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63   exist, we selec
1fb00 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20  t a new one.    
1fb10 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e  ** and try again
1fb20 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65  , up to 100 time
1fb30 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  s..    */.    as
1fb40 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1fb50 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  e );..#ifdef SQL
1fb60 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a  ITE_32BIT_ROWID.
1fb70 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
1fb80 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a  OWID 0x7fffffff.
1fb90 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d  #else.    /* Som
1fba0 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70  e compilers comp
1fbb0 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74  lain about const
1fbc0 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ants of the form
1fbd0 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
1fbe0 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65  fff..    ** Othe
1fbf0 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
1fc00 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  t 0x7fffffffffff
1fc10 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f  fffffLL.  The fo
1fc20 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65  llowing macro se
1fc30 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72  ems.    ** to pr
1fc40 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61  ovide the consta
1fc50 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20  nt while making 
1fc60 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61  all compilers ha
1fc70 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20  ppy..    */.#   
1fc80 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
1fc90 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29    (i64)( (((u64)
1fca0 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
1fcb0 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66   | (u64)0xffffff
1fcc0 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ff ).#endif..   
1fcd0 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e   if( !pC->useRan
1fce0 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
1fcf0 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72    v = sqlite3Btr
1fd00 65 65 47 65 74 43 61 63 68 65 64 52 6f 77 69 64  eeGetCachedRowid
1fd10 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
1fd20 20 20 20 20 20 69 66 28 20 76 3d 3d 30 20 29 7b       if( v==0 ){
1fd30 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1fd40 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
1fd50 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1fd60 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
1fd70 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1fd80 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
1fd90 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1fda0 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
1fdb0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
1fdc0 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b            v = 1;
1fdd0 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39     /* IMP: R-619
1fde0 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20  14-48074 */.    
1fdf0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1fe00 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
1fe10 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
1fe20 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72 73  sValid(pC->pCurs
1fe30 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 20  or) );.         
1fe40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1fe50 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43  eeKeySize(pC->pC
1fe60 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20  ursor, &v);.    
1fe70 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
1fe80 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
1fe90 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20   /* Cannot fail 
1fea0 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c  following BtreeL
1feb0 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20  ast() */.       
1fec0 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f     if( v>=MAX_RO
1fed0 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20  WID ){.         
1fee0 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d     pC->useRandom
1fef0 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Rowid = 1;.     
1ff00 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1ff10 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f          v++;   /
1ff20 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33  * IMP: R-29538-3
1ff30 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20  4987 */.        
1ff40 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
1ff50 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53      }..#ifndef S
1ff60 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
1ff70 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 20 20 69  NCREMENT.      i
1ff80 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
1ff90 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
1ffa0 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
1ffb0 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
1ffc0 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
1ffd0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
1ffe0 20 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70          if( p->p
1fff0 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  Frame ){.       
20000 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
20010 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d  >pFrame; pFrame-
20020 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65  >pParent; pFrame
20030 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
20040 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  );.          /* 
20050 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
20060 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
20070 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
20080 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20090 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65  >p3<=pFrame->nMe
200a0 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  m );.          p
200b0 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  Mem = &pFrame->a
200c0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
200d0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
200e0 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
200f0 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
20100 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
20110 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73   */.          as
20120 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
20130 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
20140 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d      pMem = &aMem
20150 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
20160 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
20170 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a  hange(p, pMem);.
20180 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
20190 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
201a0 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20  alid(pMem) );.. 
201b0 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
201c0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
201d0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Mem);.        sq
201e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
201f0 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20  gerify(pMem);.  
20200 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
20210 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
20220 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20  _Int)!=0 );  /* 
20230 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e  mem(P3) holds an
20240 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20   integer */.    
20250 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e      if( pMem->u.
20260 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
20270 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
20280 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  id ){.          
20290 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
202a0 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32  ;   /* IMP: R-12
202b0 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20  275-61338 */.   
202c0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
202d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
202e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
202f0 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e    if( v<pMem->u.
20300 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20  i+1 ){.         
20310 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b   v = pMem->u.i +
20320 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   1;.        }.  
20330 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20        pMem->u.i 
20340 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = v;.      }.#en
20350 64 69 66 0a 0a 20 20 20 20 20 20 73 71 6c 69 74  dif..      sqlit
20360 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64  e3BtreeSetCached
20370 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
20380 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49 44 20 3f  r, v<MAX_ROWID ?
20390 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20 20 20 7d   v+1 : 0);.    }
203a0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
203b0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
203c0 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e       /* IMPLEMEN
203d0 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36  TATION-OF: R-076
203e0 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20  77-41881 If the 
203f0 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73  largest ROWID is
20400 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20   equal to the.  
20410 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70      ** largest p
20420 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20  ossible integer 
20430 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  (922337203685477
20440 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64  5807) then the d
20450 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a  atabase.      **
20460 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70   engine starts p
20470 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20  icking positive 
20480 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73  candidate ROWIDs
20490 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c   at random until
204a0 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e  .      ** it fin
204b0 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e  ds one that is n
204c0 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
204d0 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ed. */.      ass
204e0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
204f0 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
20500 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
20510 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
20520 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
20530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20540 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
20550 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
20560 20 20 20 20 20 2f 2a 20 6f 6e 20 74 68 65 20 66       /* on the f
20570 69 72 73 74 20 61 74 74 65 6d 70 74 2c 20 73 69  irst attempt, si
20580 6d 70 6c 79 20 64 6f 20 6f 6e 65 20 6d 6f 72 65  mply do one more
20590 20 74 68 61 6e 20 70 72 65 76 69 6f 75 73 20 2a   than previous *
205a0 2f 0a 20 20 20 20 20 20 76 20 3d 20 6c 61 73 74  /.      v = last
205b0 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 76 20 26  Rowid;.      v &
205c0 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29  = (MAX_ROWID>>1)
205d0 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f 65 73  ; /* ensure does
205e0 6e 27 74 20 67 6f 20 6e 65 67 61 74 69 76 65 20  n't go negative 
205f0 2a 2f 0a 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a  */.      v++; /*
20600 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f   ensure non-zero
20610 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20   */.      cnt = 
20620 30 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  0;.      while( 
20630 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33    ((rc = sqlite3
20640 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
20650 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
20660 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20   0, (u64)v,.    
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20690 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
206a0 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f  &res))==SQLITE_O
206b0 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  K).            &
206c0 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20  & (res==0).     
206d0 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74         && (++cnt
206e0 3c 31 30 30 29 29 7b 0a 20 20 20 20 20 20 20 20  <100)){.        
206f0 2f 2a 20 63 6f 6c 6c 69 73 69 6f 6e 20 2d 20 74  /* collision - t
20700 72 79 20 61 6e 6f 74 68 65 72 20 72 61 6e 64 6f  ry another rando
20710 6d 20 72 6f 77 69 64 20 2a 2f 0a 20 20 20 20 20  m rowid */.     
20720 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f     sqlite3_rando
20730 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c  mness(sizeof(v),
20740 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66   &v);.        if
20750 28 20 63 6e 74 3c 35 20 29 7b 0a 20 20 20 20 20  ( cnt<5 ){.     
20760 20 20 20 20 20 2f 2a 20 74 72 79 20 22 73 6d 61       /* try "sma
20770 6c 6c 22 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  ll" random rowid
20780 73 20 66 6f 72 20 74 68 65 20 69 6e 69 74 69 61  s for the initia
20790 6c 20 61 74 74 65 6d 70 74 73 20 2a 2f 0a 20 20  l attempts */.  
207a0 20 20 20 20 20 20 20 20 76 20 26 3d 20 30 78 66          v &= 0xf
207b0 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20 20 7d  fffff;.        }
207c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
207d0 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e  v &= (MAX_ROWID>
207e0 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64  >1); /* ensure d
207f0 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74 69  oesn't go negati
20800 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  ve */.        }.
20810 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20          v++; /* 
20820 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20  ensure non-zero 
20830 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  */.      }.     
20840 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
20850 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
20860 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
20870 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
20880 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30  MP: R-38219-5300
20890 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  2 */.        got
208a0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
208b0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
208c0 20 20 20 20 61 73 73 65 72 74 28 20 76 3e 30 20      assert( v>0 
208d0 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38  );  /* EV: R-408
208e0 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20  12-03570 */.    
208f0 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  }.    pC->rowidI
20900 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
20910 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
20920 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
20930 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
20940 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
20950 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
20960 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
20970 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31  pcode: Insert P1
20980 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
20990 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72  ** Write an entr
209a0 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65  y into the table
209b0 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20   of cursor P1.  
209c0 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a  A new entry is.*
209d0 2a 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20  * created if it 
209e0 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20  doesn't already 
209f0 65 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74  exist or the dat
20a00 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e  a for an existin
20a10 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76  g.** entry is ov
20a20 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20  erwritten.  The 
20a30 64 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75  data is the valu
20a40 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65  e MEM_Blob store
20a50 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a  d in register.**
20a60 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20   number P2. The 
20a70 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e  key is stored in
20a80 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54 68   register P3. Th
20a90 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65  e key must.** be
20aa0 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a   a MEM_Int..**.*
20ab0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
20ac0 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
20ad0 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P5 is set, then 
20ae0 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63  the row change c
20af0 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65  ount is.** incre
20b00 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
20b10 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20  e not).  If the 
20b20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
20b30 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
20b40 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69  et,.** then rowi
20b50 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20  d is stored for 
20b60 73 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72  subsequent retur
20b70 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69  n by the.** sqli
20b80 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
20b90 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  rowid() function
20ba0 20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69   (otherwise it i
20bb0 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a  s unmodified)..*
20bc0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
20bd0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
20be0 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
20bf0 65 74 20 61 6e 64 20 69 66 20 74 68 65 20 72 65  et and if the re
20c00 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c  sult of.** the l
20c10 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69  ast seek operati
20c20 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73  on (OP_NotExists
20c30 29 20 77 61 73 20 61 20 73 75 63 63 65 73 73 2c  ) was a success,
20c40 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70   then this.** op
20c50 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74  eration will not
20c60 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64   attempt to find
20c70 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
20c80 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e   row before doin
20c90 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20  g.** the insert 
20ca0 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64  but will instead
20cb0 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20 72   overwrite the r
20cc0 6f 77 20 74 68 61 74 20 74 68 65 20 63 75 72 73  ow that the curs
20cd0 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74  or is.** current
20ce0 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20  ly pointing to. 
20cf0 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65   Presumably, the
20d00 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69   prior OP_NotExi
20d10 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61  sts opcode.** ha
20d20 73 20 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69  s already positi
20d30 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20  oned the cursor 
20d40 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73  correctly.  This
20d50 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74   is an optimizat
20d60 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73  ion.** that boos
20d70 74 73 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62  ts performance b
20d80 79 20 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e  y avoiding redun
20d90 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a  dant seeks..**.*
20da0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
20db0 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73  ISUPDATE flag is
20dc0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20   set, then this 
20dd0 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f  opcode is part o
20de0 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f  f an.** UPDATE o
20df0 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72  peration.  Other
20e00 77 69 73 65 20 28 69 66 20 74 68 65 20 66 6c 61  wise (if the fla
20e10 67 20 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e  g is clear) then
20e20 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20   this opcode.** 
20e30 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e  is part of an IN
20e40 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20  SERT operation. 
20e50 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
20e60 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e  is only importan
20e70 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61  t to.** the upda
20e80 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50  te hook..**.** P
20e90 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20  arameter P4 may 
20ea0 70 6f 69 6e 74 20 74 6f 20 61 20 54 61 62 6c 65  point to a Table
20eb0 20 73 74 72 75 63 74 75 72 65 2c 20 6f 72 20 6d   structure, or m
20ec0 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69  ay be NULL. If i
20ed0 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c  t is .** not NUL
20ee0 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61  L, then the upda
20ef0 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33  te-hook (sqlite3
20f00 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  .xUpdateCallback
20f10 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a  ) is invoked .**
20f20 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63   following a suc
20f30 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a  cessful insert..
20f40 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54  **.** (WARNING/T
20f50 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20  ODO: If P1 is a 
20f60 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e  pseudo-cursor an
20f70 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61  d P2 is dynamica
20f80 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  lly.** allocated
20f90 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70  , then ownership
20fa0 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73 66   of P2 is transf
20fb0 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73 65  erred to the pse
20fc0 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e  udo-cursor.** an
20fd0 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62 65  d register P2 be
20fe0 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e  comes ephemeral.
20ff0 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20    If the cursor 
21000 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a  is changed, the.
21010 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  ** value of regi
21020 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65  ster P2 will the
21030 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20  n change.  Make 
21040 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e  sure this does n
21050 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20  ot.** cause any 
21060 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a  problems.).**.**
21070 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
21080 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20  n only works on 
21090 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75  tables.  The equ
210a0 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
210b0 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63  ion.** for indic
210c0 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65  es is OP_IdxInse
210d0 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rt..*/./* Opcode
210e0 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50  : InsertInt P1 P
210f0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
21100 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63   This works exac
21110 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65  tly like OP_Inse
21120 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74  rt except that t
21130 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a  he key is the.**
21140 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
21150 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65  3, not the value
21160 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20   of the integer 
21170 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
21180 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
21190 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20  P_Insert: .case 
211a0 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a  OP_InsertInt: {.
211b0 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20    Mem *pData;   
211c0 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
211d0 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72  holding data for
211e0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
211f0 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
21200 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20  Mem *pKey;      
21210 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
21220 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74  lding key  for t
21230 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
21240 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20  64 iKey;        
21250 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20   /* The integer 
21260 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72  ROWID or key for
21270 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
21280 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
21290 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
212a0 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74    /* Cursor to t
212b0 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20  able into which 
212c0 69 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65  insert is writte
212d0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f  n */.  int nZero
212e0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
212f0 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73  er of zero-bytes
21300 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20   to append */.  
21310 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20  int seekResult; 
21320 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70    /* Result of p
21330 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69  rior seek or 0 i
21340 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55  f no USESEEKRESU
21350 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e  LT flag */.  con
21360 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f  st char *zDb;  /
21370 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  * database name 
21380 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70  - used by the up
21390 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54  date hook */.  T
213a0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
213b0 20 2f 2a 20 54 61 62 6c 65 20 73 74 72 75 63 74   /* Table struct
213c0 75 72 65 20 2d 20 75 73 65 64 20 62 79 20 75 70  ure - used by up
213d0 64 61 74 65 20 61 6e 64 20 70 72 65 2d 75 70 64  date and pre-upd
213e0 61 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 69  ate hooks */.  i
213f0 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  nt op;          
21400 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75   /* Opcode for u
21410 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49  pdate hook: SQLI
21420 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c  TE_UPDATE or SQL
21430 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20  ITE_INSERT */.. 
21440 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70   pData = &aMem[p
21450 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
21460 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
21470 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
21480 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
21490 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74   memIsValid(pDat
214a0 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  a) );.  pC = p->
214b0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
214c0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
214d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
214e0 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
214f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
21500 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
21510 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21520 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
21530 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
21540 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70 4f  ==P4_TABLE || pO
21550 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4e 4f  p->p4type==P4_NO
21560 54 55 53 45 44 20 29 3b 0a 20 20 52 45 47 49 53  TUSED );.  REGIS
21570 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
21580 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66  2, pData);..  if
21590 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
215a0 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  P_Insert ){.    
215b0 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pKey = &aMem[pOp
215c0 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
215d0 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
215e0 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
215f0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
21600 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20  id(pKey) );.    
21610 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
21620 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20  Op->p3, pKey);. 
21630 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e     iKey = pKey->
21640 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  u.i;.  }else{.  
21650 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
21660 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
21670 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20  Int );.    iKey 
21680 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a  = pOp->p3;.  }..
21690 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
216a0 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48  e==P4_TABLE && H
216b0 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64  AS_UPDATE_HOOK(d
216c0 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b) ){.    assert
216d0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
216e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
216f0 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a  >iDb>=0 );.    z
21700 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
21710 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
21720 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e   pTab = pOp->p4.
21730 70 54 61 62 3b 0a 20 20 20 20 6f 70 20 3d 20 28  pTab;.    op = (
21740 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
21750 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51  G_ISUPDATE) ? SQ
21760 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51  LITE_UPDATE : SQ
21770 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20  LITE_INSERT);.  
21780 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
21790 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
217a0 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f  E_HOOK.  /* Invo
217b0 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74  ke the pre-updat
217c0 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a  e hook, if any *
217d0 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65  /.  if( db->xPre
217e0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 0a  UpdateCallback .
217f0 20 20 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70     && pOp->p4typ
21800 65 3d 3d 50 34 5f 54 41 42 4c 45 0a 20 20 20 26  e==P4_TABLE.   &
21810 26 20 28 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f  & (!(pOp->p5 & O
21820 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
21830 7c 7c 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  || pC->rowidIsVa
21840 6c 69 64 3d 3d 30 29 0a 20 20 29 7b 0a 20 20 20  lid==0).  ){.   
21850 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55   sqlite3VdbePreU
21860 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c  pdateHook(p, pC,
21870 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20   SQLITE_INSERT, 
21880 7a 44 62 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c  zDb, pTab, iKey,
21890 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 7d 0a 23   pOp->p2);.  }.#
218a0 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 4f 70  endif..  if( pOp
218b0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
218c0 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
218d0 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ge++;.  if( pOp-
218e0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53  >p5 & OPFLAG_LAS
218f0 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73  TROWID ) db->las
21900 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
21910 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28  id = iKey;.  if(
21920 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
21930 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
21940 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20  pData->z = 0;.  
21950 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a    pData->n = 0;.
21960 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
21970 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67  ert( pData->flag
21980 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
21990 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20  M_Str) );.  }.  
219a0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70  seekResult = ((p
219b0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
219c0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
219d0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
219e0 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74  : 0);.  if( pDat
219f0 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  a->flags & MEM_Z
21a00 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f  ero ){.    nZero
21a10 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72   = pData->u.nZer
21a20 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  o;.  }else{.    
21a30 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20  nZero = 0;.  }. 
21a40 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
21a50 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e  CachedRowid(pC->
21a60 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72  pCursor, 0);.  r
21a70 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21a80 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73  Insert(pC->pCurs
21a90 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20  or, 0, iKey,.   
21aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ab0 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c         pData->z,
21ac0 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f   pData->n, nZero
21ad0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
21ae0 20 20 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d              pOp-
21af0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50  >p5 & OPFLAG_APP
21b00 45 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a  END, seekResult.
21b10 20 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64    );.  pC->rowid
21b20 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
21b30 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
21b40 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
21b50 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
21b60 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
21b70 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
21b80 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
21b90 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53  . */.  if( rc==S
21ba0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
21bb0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
21bc0 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
21bd0 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
21be0 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
21bf0 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c  ateArg, op, zDb,
21c00 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 69 4b   pTab->zName, iK
21c10 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ey);.  }.  break
21c20 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21c30 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
21c40 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  P4 *.**.** Delet
21c50 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
21c60 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
21c70 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
21c80 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
21c90 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   The cursor will
21ca0 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
21cb0 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20  g at either the 
21cc0 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
21cd0 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
21ce0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
21cf0 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
21d00 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
21d10 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
21d20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
21d30 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
21d40 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63  e a no-op.  Henc
21d50 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65  e it is OK to de
21d60 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64  lete.** a record
21d70 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
21d80 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a  Next loop..**.**
21d90 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
21da0 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
21db0 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  2 is set, then t
21dc0 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
21dd0 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
21de0 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
21df0 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20   not)..**.** P1 
21e00 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75  must not be pseu
21e10 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61  do-table.  It ha
21e20 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74  s to be a real t
21e30 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c  able with.** mul
21e40 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a  tiple rows..**.*
21e50 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
21e60 55 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f 69 6e  ULL then it poin
21e70 74 73 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74  ts to a Table st
21e80 72 75 74 75 72 65 2e 20 49 6e 20 74 68 69 73 20  ruture. In this 
21e90 63 61 73 65 20 65 69 74 68 65 72 20 0a 2a 2a 20  case either .** 
21ea0 74 68 65 20 75 70 64 61 74 65 20 6f 72 20 70 72  the update or pr
21eb0 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f  e-update hook, o
21ec0 72 20 62 6f 74 68 2c 20 6d 61 79 20 62 65 20 69  r both, may be i
21ed0 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50 31 20 63  nvoked. The P1 c
21ee0 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61  ursor must.** ha
21ef0 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e  ve been position
21f00 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46  ed using OP_NotF
21f10 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e  ound prior to in
21f20 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  voking this opco
21f30 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63  de in .** this c
21f40 61 73 65 2e 20 53 70 65 63 69 66 69 63 61 6c 6c  ase. Specificall
21f50 79 2c 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e  y, if one is con
21f60 66 69 67 75 72 65 64 2c 20 74 68 65 20 70 72 65  figured, the pre
21f70 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20  -update hook is 
21f80 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20 50  .** invoked if P
21f90 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54  4 is not NULL. T
21fa0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
21fb0 73 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65  s invoked if one
21fc0 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20   is configured, 
21fd0 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e 55  .** P4 is not NU
21fe0 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50 46 4c  LL, and the OPFL
21ff0 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
22000 69 73 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a  is set in P2..**
22010 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
22020 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20  G_ISUPDATE flag 
22030 69 73 20 73 65 74 20 69 6e 20 50 32 2c 20 74 68  is set in P2, th
22040 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  en P3 contains t
22050 68 65 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66  he address.** of
22060 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
22070 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
22080 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  he value that th
22090 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72  e rowid of the r
220a0 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65  ow will.** be se
220b0 74 20 74 6f 20 62 79 20 74 68 65 20 75 70 64 61  t to by the upda
220c0 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  te..*/.case OP_D
220d0 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69  elete: {.  i64 i
220e0 4b 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  Key;.  VdbeCurso
220f0 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63  r *pC;.  const c
22100 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c  har *zDb;.  Tabl
22110 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f  e *pTab;.  int o
22120 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61  pflags;..  opfla
22130 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  gs = pOp->p2;.  
22140 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61 73 73 65  iKey = 0;.  asse
22150 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22160 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22170 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
22180 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22190 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
221a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
221b0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
221c0 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20    /* Only valid 
221d0 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c  for real tables,
221e0 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73   no pseudotables
221f0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
22200 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
22210 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  BLE || pOp->p4ty
22220 70 65 3d 3d 50 34 5f 4e 4f 54 55 53 45 44 20 29  pe==P4_NOTUSED )
22230 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44  ;..  /* The OP_D
22240 65 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77  elete opcode alw
22250 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f  ays follows an O
22260 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f  P_NotExists or O
22270 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f  P_Last or.  ** O
22280 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20  P_Column on the 
22290 73 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f  same table witho
222a0 75 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69  ut any interveni
222b0 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68  ng operations th
222c0 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f  at.  ** might mo
222d0 76 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65  ve or invalidate
222e0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65   the cursor.  He
222f0 6e 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73  nce cursor pC is
22300 20 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67   always pointing
22310 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77  .  ** to the row
22320 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61   to be deleted a
22330 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64  nd the sqlite3Vd
22340 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
22350 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20   operation.  ** 
22360 62 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20  below is always 
22370 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e  a no-op and cann
22380 6f 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c  ot fail.  We wil
22390 6c 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c  l run it anyhow,
223a0 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f   though,.  ** to
223b0 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66   guard against f
223c0 75 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f  uture changes to
223d0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
223e0 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73  tor..  **/.  ass
223f0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
22400 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
22410 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
22420 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
22430 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
22440 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
22450 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
22460 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66  _error;..  /* If
22470 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
22480 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65 2d 68   or pre-update-h
22490 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f  ook will be invo
224a0 6b 65 64 2c 20 73 65 74 20 69 4b 65 79 20 74 6f  ked, set iKey to
224b0 20 0a 20 20 2a 2a 20 74 68 65 20 72 6f 77 69 64   .  ** the rowid
224c0 20 6f 66 20 74 68 65 20 72 6f 77 20 62 65 69 6e   of the row bein
224d0 67 20 64 65 6c 65 74 65 64 2e 20 53 65 74 20 7a  g deleted. Set z
224e0 44 62 20 61 6e 64 20 7a 54 61 62 20 61 73 20 77  Db and zTab as w
224f0 65 6c 6c 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ell..  */.  if( 
22500 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 48 41 53  pOp->p4.z && HAS
22510 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29  _UPDATE_HOOK(db)
22520 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
22530 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
22540 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
22550 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73  Table );.    ass
22560 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
22570 56 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73  Valid );  /* las
22580 74 52 6f 77 69 64 20 73 65 74 20 62 79 20 70 72  tRowid set by pr
22590 65 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75  evious OP_NotFou
225a0 6e 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d  nd */.    iKey =
225b0 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   pC->lastRowid;.
225c0 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44      zDb = db->aD
225d0 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
225e0 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70  ;.    pTab = pOp
225f0 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 7d 0a 0a  ->p4.pTab;.  }..
22600 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
22610 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
22620 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  OOK.  /* Invoke 
22630 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68  the pre-update-h
22640 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
22650 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
22660 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
22670 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
22680 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28 6f  .    assert( !(o
22690 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
226a0 49 53 55 50 44 41 54 45 29 20 7c 7c 20 28 61 4d  ISUPDATE) || (aM
226b0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67  em[pOp->p3].flag
226c0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20 29 3b 0a  s & MEM_Int) );.
226d0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
226e0 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20  reUpdateHook(p, 
226f0 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70 66  pC,.        (opf
22700 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53  lags & OPFLAG_IS
22710 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
22720 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
22730 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20 20  _DELETE, .      
22740 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 69 4b 65    zDb, pTab, iKe
22750 79 2c 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e  y,.        pOp->
22760 70 33 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 23 65  p3.    );.  }.#e
22770 6e 64 69 66 0a 0a 20 20 69 66 28 20 6f 70 66 6c  ndif..  if( opfl
22780 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e  ags & OPFLAG_ISN
22790 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 0a 20 20  OOP ) break;..  
227a0 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
227b0 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
227c0 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63  Cursor, 0);.  rc
227d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
227e0 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f  elete(pC->pCurso
227f0 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  r);.  pC->cacheS
22800 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
22810 41 4c 45 3b 0a 0a 20 20 2f 2a 20 55 70 64 61 74  ALE;..  /* Updat
22820 65 20 74 68 65 20 63 68 61 6e 67 65 2d 63 6f 75  e the change-cou
22830 6e 74 65 72 20 61 6e 64 20 69 6e 76 6f 6b 65 20  nter and invoke 
22840 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
22850 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
22860 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20    if( opflags & 
22870 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
22880 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
22890 2b 2b 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ++;.    assert( 
228a0 70 4f 70 2d 3e 70 34 2e 7a 20 29 3b 0a 20 20 20  pOp->p4.z );.   
228b0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
228c0 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74  OK && db->xUpdat
228d0 65 43 61 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20  eCallback ){.   
228e0 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
228f0 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
22900 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45  teArg, SQLITE_DE
22910 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62 2d  LETE, zDb, pTab-
22920 3e 7a 4e 61 6d 65 2c 69 4b 65 79 29 3b 0a 20 20  >zName,iKey);.  
22930 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
22940 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  .}./* Opcode: Re
22950 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a  setCount * * * *
22960 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c   *.**.** The val
22970 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65  ue of the change
22980 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69   counter is copi
22990 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
229a0 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61  se handle.** cha
229b0 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74  nge counter (ret
229c0 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75  urned by subsequ
229d0 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c  ent calls to sql
229e0 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e  ite3_changes()).
229f0 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73  .** Then the VMs
22a00 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
22a10 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20   counter resets 
22a20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73  to 0..** This is
22a30 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
22a40 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61   programs..*/.ca
22a50 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74  se OP_ResetCount
22a60 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
22a70 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
22a80 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70  p->nChange);.  p
22a90 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
22aa0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
22ab0 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70  code: SorterComp
22ac0 61 72 65 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a  are P1 P2 P3.**.
22ad0 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
22ae0 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69  r cursor. This i
22af0 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61  nstruction compa
22b00 72 65 73 20 74 68 65 20 72 65 63 6f 72 64 20 62  res the record b
22b10 6c 6f 62 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73  lob in .** regis
22b20 74 65 72 20 50 33 20 77 69 74 68 20 74 68 65 20  ter P3 with the 
22b30 65 6e 74 72 79 20 74 68 61 74 20 74 68 65 20 73  entry that the s
22b40 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72  orter cursor cur
22b50 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f  rently points to
22b60 2e 0a 2a 2a 20 49 66 2c 20 65 78 63 6c 75 64 69  ..** If, excludi
22b70 6e 67 20 74 68 65 20 72 6f 77 69 64 20 66 69 65  ng the rowid fie
22b80 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2c 20  lds at the end, 
22b90 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20  the two records 
22ba0 61 72 65 20 61 20 6d 61 74 63 68 2c 0a 2a 2a 20  are a match,.** 
22bb0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
22bc0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
22bd0 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c  tion. Otherwise,
22be0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
22bf0 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  tion P2..*/.case
22c00 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72   OP_SorterCompar
22c10 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
22c20 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
22c30 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ;..  pC = p->apC
22c40 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
22c50 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
22c60 70 43 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  pC) );.  pIn3 = 
22c70 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
22c80 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
22c90 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28  beSorterCompare(
22ca0 70 43 2c 20 70 49 6e 33 2c 20 26 72 65 73 29 3b  pC, pIn3, &res);
22cb0 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
22cc0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
22cd0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
22ce0 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  ;../* Opcode: So
22cf0 72 74 65 72 44 61 74 61 20 50 31 20 50 32 20 2a  rterData P1 P2 *
22d00 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
22d10 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
22d20 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f  2 the current so
22d30 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f  rter data for so
22d40 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a  rter cursor P1..
22d50 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
22d60 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  rData: {.  VdbeC
22d70 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f  ursor *pC;..  pO
22d80 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
22d90 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  p2];.  pC = p->a
22da0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22db0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53   assert( pC->isS
22dc0 6f 72 74 65 72 20 29 3b 0a 20 20 72 63 20 3d 20  orter );.  rc = 
22dd0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
22de0 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74  rRowkey(pC, pOut
22df0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
22e00 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74  * Opcode: RowDat
22e10 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
22e20 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
22e30 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
22e40 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61  omplete row data
22e50 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
22e60 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
22e70 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
22e80 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
22e90 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65  It is just copie
22ea0 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
22eb0 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
22ec0 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
22ed0 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
22ee0 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
22ef0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
22f00 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
22f10 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
22f20 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
22f30 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
22f40 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
22f50 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  -table..*/./* Op
22f60 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20  code: RowKey P1 
22f70 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
22f80 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
22f90 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
22fa0 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63  te row key for c
22fb0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
22fc0 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
22fd0 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
22fe0 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65  ata.  .** The ke
22ff0 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f  y is copied onto
23000 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72   the P3 register
23010 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
23020 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
23030 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
23040 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
23050 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
23060 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
23070 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
23080 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
23090 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
230a0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
230b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
230c0 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77  Key:.case OP_Row
230d0 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
230e0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
230f0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75  rsor *pCrsr;.  u
23100 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b  32 n;.  i64 n64;
23110 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
23120 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
23130 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
23140 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f   pOut);..  /* No
23150 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61  te that RowKey a
23160 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72  nd RowData are r
23170 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68  eally exactly th
23180 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69  e same instructi
23190 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  on */.  assert( 
231a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
231b0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
231c0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
231d0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
231e0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f  assert( pC->isSo
231f0 72 74 65 72 3d 3d 30 20 29 3b 0a 20 20 61 73 73  rter==0 );.  ass
23200 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
23210 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
23220 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
23230 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49   assert( pC->isI
23240 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ndex || pOp->opc
23250 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
23260 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
23270 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
23280 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
23290 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
232a0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
232b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
232c0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
232d0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
232e0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
232f0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
23300 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
23310 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  r) );..  /* The 
23320 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50  OP_RowKey and OP
23330 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73  _RowData opcodes
23340 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f   always follow O
23350 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20  P_NotExists or. 
23360 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70   ** OP_Rewind/Op
23370 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e  _Next with no in
23380 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75  tervening instru
23390 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ctions that migh
233a0 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a  t invalidate.  *
233b0 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48  * the cursor.  H
233c0 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ence the followi
233d0 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  ng sqlite3VdbeCu
233e0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
233f0 6c 20 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a  l is always.  **
23400 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e   a no-op and can
23410 20 6e 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75   never fail.  Bu
23420 74 20 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e  t we leave it in
23430 20 70 6c 61 63 65 20 61 73 20 61 20 73 61 66 65   place as a safe
23440 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  ty..  */.  asser
23450 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
23460 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63  oveto==0 );.  rc
23470 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
23480 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
23490 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
234a0 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74  SQLITE_OK) ) got
234b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
234c0 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d  rror;..  if( pC-
234d0 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
234e0 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54  assert( !pC->isT
234f0 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f  able );.    VVA_
23500 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
23510 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
23520 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20  Crsr, &n64);.   
23530 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
23540 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20  ITE_OK );    /* 
23550 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
23560 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
23570 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
23580 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69   if( n64>db->aLi
23590 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
235a0 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
235b0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
235c0 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75      }.    n = (u
235d0 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b  32)n64;.  }else{
235e0 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63  .    VVA_ONLY(rc
235f0 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
23600 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
23610 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  &n);.    assert(
23620 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
23630 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65  ;    /* DataSize
23640 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a  () cannot fail *
23650 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32  /.    if( n>(u32
23660 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
23670 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
23680 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
23690 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
236a0 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  }.  if( sqlite3V
236b0 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
236c0 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f   n, 0) ){.    go
236d0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
236e0 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20   pOut->n = n;.  
236f0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
23700 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a  Out, MEM_Blob);.
23710 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65    if( pC->isInde
23720 78 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  x ){.    rc = sq
23730 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28 70 43  lite3BtreeKey(pC
23740 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
23750 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >z);.  }else{.  
23760 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
23770 72 65 65 44 61 74 61 28 70 43 72 73 72 2c 20 30  reeData(pCrsr, 0
23780 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20  , n, pOut->z);. 
23790 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d   }.  pOut->enc =
237a0 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f   SQLITE_UTF8;  /
237b0 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c  * In case the bl
237c0 6f 62 20 69 73 20 65 76 65 72 20 63 61 73 74 20  ob is ever cast 
237d0 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55 50 44  to text */.  UPD
237e0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
237f0 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
23800 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
23810 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
23820 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20  .**.** Store in 
23830 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
23840 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
23850 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74  the key of the t
23860 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a  able entry that.
23870 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  ** P1 is current
23880 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a  ly point to..**.
23890 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74  ** P1 can be eit
238a0 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  her an ordinary 
238b0 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75  table or a virtu
238c0 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65  al table.  There
238d0 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61   used to.** be a
238e0 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f   separate OP_VRo
238f0 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75  wid opcode for u
23900 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20  se with virtual 
23910 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73  tables, but this
23920 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e  .** one opcode n
23930 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74  ow works for bot
23940 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a  h table types..*
23950 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a  /.case OP_Rowid:
23960 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
23970 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
23980 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43  lease */.  VdbeC
23990 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34  ursor *pC;.  i64
239a0 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   v;.  sqlite3_vt
239b0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
239c0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
239d0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61  e *pModule;..  a
239e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
239f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
23a00 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
23a10 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23a20 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
23a30 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
23a40 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
23a50 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e  eReg==0 || pC->n
23a60 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20  ullRow );.  if( 
23a70 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
23a80 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
23a90 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62   MEM_Null;.    b
23aa0 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66  reak;.  }else if
23ab0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
23ac0 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20  veto ){.    v = 
23ad0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
23ae0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
23af0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
23b00 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  LE.  }else if( p
23b10 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  C->pVtabCursor )
23b20 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43  {.    pVtab = pC
23b30 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
23b40 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c  Vtab;.    pModul
23b50 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
23b60 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  le;.    assert( 
23b70 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20  pModule->xRowid 
23b80 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  );.    rc = pMod
23b90 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e  ule->xRowid(pC->
23ba0 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29  pVtabCursor, &v)
23bb0 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62  ;.    importVtab
23bc0 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29  ErrMsg(p, pVtab)
23bd0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
23be0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
23bf0 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  ABLE */.  }else{
23c00 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
23c10 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
23c20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
23c30 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
23c40 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  pC);.    if( rc 
23c50 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
23c60 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69  _to_error;.    i
23c70 66 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  f( pC->rowidIsVa
23c80 6c 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  lid ){.      v =
23c90 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   pC->lastRowid;.
23ca0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
23cb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
23cc0 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43  eeKeySize(pC->pC
23cd0 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20  ursor, &v);.    
23ce0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
23cf0 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41  LITE_OK );  /* A
23d00 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75 73 65  lways so because
23d10 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f   of CursorMoveto
23d20 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20  () above */.    
23d30 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  }.  }.  pOut->u.
23d40 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
23d50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
23d60 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a  llRow P1 * * * *
23d70 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
23d80 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e  cursor P1 to a n
23d90 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50  ull row.  Any OP
23da0 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f  _Column operatio
23db0 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72  ns.** that occur
23dc0 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f   while the curso
23dd0 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c  r is on the null
23de0 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73   row will always
23df0 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c  .** write a NULL
23e00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
23e10 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75  lRow: {.  VdbeCu
23e20 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
23e30 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
23e40 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
23e50 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
23e60 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
23e70 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
23e80 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  =0 );.  pC->null
23e90 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 72  Row = 1;.  pC->r
23ea0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
23eb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
23ec0 43 75 72 73 6f 72 20 7c 7c 20 70 43 2d 3e 70 56  Cursor || pC->pV
23ed0 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  tabCursor );.  i
23ee0 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29  f( pC->pCursor )
23ef0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  {.    sqlite3Btr
23f00 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43  eeClearCursor(pC
23f10 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  ->pCursor);.  }.
23f20 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
23f30 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50  pcode: Last P1 P
23f40 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
23f50 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68  e next use of th
23f60 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d  e Rowid or Colum
23f70 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75  n or Next instru
23f80 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a  ction for P1 .**
23f90 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74   will refer to t
23fa0 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e  he last entry in
23fb0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
23fc0 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
23fd0 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
23fe0 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
23ff0 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a  and P2>0, then j
24000 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
24010 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20  to P2..** If P2 
24020 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74  is 0 or if the t
24030 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
24040 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
24050 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
24060 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
24070 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
24080 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20  e OP_Last: {    
24090 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
240a0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
240b0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
240c0 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
240d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
240e0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
240f0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
24100 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
24110 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
24120 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
24130 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
24140 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69  ;.  res = 0;.  i
24150 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21  f( ALWAYS(pCrsr!
24160 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  =0) ){.    rc = 
24170 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
24180 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
24190 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   }.  pC->nullRow
241a0 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43   = (u8)res;.  pC
241b0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
241c0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69   = 0;.  pC->rowi
241d0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
241e0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
241f0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
24200 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26   if( pOp->p2>0 &
24210 26 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  & res ){.    pc 
24220 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
24230 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a   }.  break;.}...
24240 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20  /* Opcode: Sort 
24250 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
24260 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f  * This opcode do
24270 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  es exactly the s
24280 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f  ame thing as OP_
24290 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68  Rewind except th
242a0 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65  at.** it increme
242b0 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e  nts an undocumen
242c0 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  ted global varia
242d0 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73  ble used for tes
242e0 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74  ting..**.** Sort
242f0 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73  ing is accomplis
24300 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72  hed by writing r
24310 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f  ecords into a so
24320 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20  rting index,.** 
24330 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74  then rewinding t
24340 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c  hat index and pl
24350 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72  aying it back fr
24360 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a  om beginning to.
24370 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20  ** end.  We use 
24380 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f  the OP_Sort opco
24390 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50  de instead of OP
243a0 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68  _Rewind to do th
243b0 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73  e.** rewinding s
243c0 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61  o that the globa
243d0 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20  l variable will 
243e0 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61  be incremented a
243f0 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e  nd.** regression
24400 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72   tests can deter
24410 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
24420 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  not the optimize
24430 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c  r is.** correctl
24440 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74  y optimizing out
24450 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20   sorts..*/.case 
24460 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20  OP_SorterSort:  
24470 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
24480 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20  e OP_Sort: {    
24490 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23      /* jump */.#
244a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
244b0 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  T.  sqlite3_sort
244c0 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69  _count++;.  sqli
244d0 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
244e0 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e  --;.#endif.  p->
244f0 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
24500 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 2d  STMTSTATUS_SORT-
24510 31 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  1]++;.  /* Fall 
24520 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
24530 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f  Rewind */.}./* O
24540 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31  pcode: Rewind P1
24550 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
24560 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
24570 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
24580 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74  umn or Next inst
24590 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
245a0 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
245b0 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79   the first entry
245c0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
245d0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
245e0 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
245f0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
24600 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65  ty and P2>0, the
24610 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
24620 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
24630 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68  P2 is 0 or if th
24640 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
24650 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
24660 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
24670 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
24680 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
24690 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20  case OP_Rewind: 
246a0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
246b0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
246c0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
246d0 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
246e0 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
246f0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24700 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
24710 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
24720 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
24730 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
24740 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
24750 53 6f 72 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70  Sorter==(pOp->op
24760 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53  code==OP_SorterS
24770 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20  ort) );.  res = 
24780 31 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65  1;.  if( isSorte
24790 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63 20  r(pC) ){.    rc 
247a0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
247b0 74 65 72 52 65 77 69 6e 64 28 64 62 2c 20 70 43  terRewind(db, pC
247c0 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65  , &res);.  }else
247d0 7b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43  {.    pCrsr = pC
247e0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61  ->pCursor;.    a
247f0 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
24800 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
24810 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72  BtreeFirst(pCrsr
24820 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d  , &res);.    pC-
24830 3e 61 74 46 69 72 73 74 20 3d 20 72 65 73 3d 3d  >atFirst = res==
24840 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e  0 ?1:0;.    pC->
24850 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
24860 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
24870 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
24880 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72  STALE;.    pC->r
24890 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
248a0 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  .  }.  pC->nullR
248b0 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
248c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
248d0 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
248e0 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72 65 73  nOp );.  if( res
248f0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
24900 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
24910 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
24920 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20  ode: Next P1 P2 
24930 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64  * P4 P5.**.** Ad
24940 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20  vance cursor P1 
24950 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
24960 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65  s to the next ke
24970 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69  y/data pair in i
24980 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69  ts.** table or i
24990 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20  ndex.  If there 
249a0 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f  are no more key/
249b0 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
249c0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
249d0 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
249e0 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
249f0 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
24a00 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75  r advance was su
24a10 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d  ccessful,.** jum
24a20 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
24a30 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50   P2..**.** The P
24a40 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
24a50 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
24a60 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
24a70 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  table..**.** P4 
24a80 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70  is always of typ
24a90 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68  e P4_ADVANCE. Th
24aa0 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  e function point
24ab0 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20  er points to.** 
24ac0 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
24ad0 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
24ae0 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
24af0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
24b00 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
24b10 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
24b20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
24b30 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
24b40 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
24b50 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50  *.** See also: P
24b60 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rev.*/./* Opcode
24b70 3a 20 50 72 65 76 20 50 31 20 50 32 20 2a 20 2a  : Prev P1 P2 * *
24b80 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75   P5.**.** Back u
24b90 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  p cursor P1 so t
24ba0 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
24bb0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65   the previous ke
24bc0 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69  y/data pair in i
24bd0 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69  ts.** table or i
24be0 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20  ndex.  If there 
24bf0 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b  is no previous k
24c00 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74  ey/value pairs t
24c10 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
24c20 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
24c30 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
24c40 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75  .  But if the cu
24c50 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20  rsor backup was 
24c60 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a  successful,.** j
24c70 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
24c80 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  to P2..**.** The
24c90 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
24ca0 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
24cb0 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
24cc0 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50  o-table..**.** P
24cd0 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
24ce0 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
24cf0 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
24d00 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
24d10 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  * sqlite3BtreePr
24d20 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20  evious()..**.** 
24d30 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
24d40 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
24d50 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
24d60 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
24d70 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
24d80 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
24d90 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
24da0 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ted..*/.case OP_
24db0 53 6f 72 74 65 72 4e 65 78 74 3a 20 20 20 20 2f  SorterNext:    /
24dc0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
24dd0 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20  P_Prev:         
24de0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
24df0 20 4f 50 5f 4e 65 78 74 3a 20 7b 20 20 20 20 20   OP_Next: {     
24e00 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
24e10 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
24e20 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 43 48    int res;..  CH
24e30 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
24e40 54 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  T;.  assert( pOp
24e50 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
24e60 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
24e70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24e80 70 35 3c 3d 41 72 72 61 79 53 69 7a 65 28 70 2d  p5<=ArraySize(p-
24e90 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20  >aCounter) );.  
24ea0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
24eb0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43  p->p1];.  if( pC
24ec0 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  ==0 ){.    break
24ed0 3b 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74  ;  /* See ticket
24ee0 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20   #2273 */.  }.  
24ef0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f  assert( pC->isSo
24f00 72 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  rter==(pOp->opco
24f10 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 4e 65 78  de==OP_SorterNex
24f20 74 29 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f  t) );.  if( isSo
24f30 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
24f40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
24f50 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 4e 65  ode==OP_SorterNe
24f60 78 74 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  xt );.    rc = s
24f70 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
24f80 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65  Next(db, pC, &re
24f90 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  s);.  }else{.   
24fa0 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 61 73   res = 1;.    as
24fb0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
24fc0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
24fd0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70     assert( pC->p
24fe0 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 61 73  Cursor );.    as
24ff0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
25000 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
25010 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
25020 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
25030 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
25040 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
25050 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Prev || pOp->p4.
25060 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
25070 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20 29  3BtreePrevious )
25080 3b 0a 20 20 20 20 72 63 20 3d 20 70 4f 70 2d 3e  ;.    rc = pOp->
25090 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e  p4.xAdvance(pC->
250a0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
250b0 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f    }.  pC->nullRo
250c0 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
250d0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
250e0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
250f0 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
25100 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
25110 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   1;.    if( pOp-
25120 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65  >p5 ) p->aCounte
25130 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a  r[pOp->p5-1]++;.
25140 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
25150 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
25160 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
25170 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e  endif.  }.  pC->
25180 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
25190 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
251a0 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
251b0 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  rt P1 P2 P3 * P5
251c0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
251d0 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20  P2 holds an SQL 
251e0 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
251f0 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
25200 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
25210 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
25220 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
25230 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e  y.** into the in
25240 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f  dex P1.  Data fo
25250 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
25260 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  il..**.** P3 is 
25270 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76  a flag that prov
25280 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74  ides a hint to t
25290 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  he b-tree layer 
252a0 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73  that this.** ins
252b0 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  ert is likely to
252c0 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a   be an append..*
252d0 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
252e0 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
252f0 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54   for indices.  T
25300 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
25310 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
25320 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e   tables is OP_In
25330 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sert..*/.case OP
25340 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20  _SorterInsert:  
25350 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63       /* in2 */.c
25360 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74  ase OP_IdxInsert
25370 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
25380 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
25390 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
253a0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
253b0 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68  nKey;.  const ch
253c0 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73  ar *zKey;..  ass
253d0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
253e0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
253f0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
25400 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
25410 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
25420 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
25430 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70  pC->isSorter==(p
25440 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
25450 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a  orterInsert) );.
25460 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
25470 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
25480 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  t( pIn2->flags &
25490 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70   MEM_Blob );.  p
254a0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
254b0 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53  or;.  if( ALWAYS
254c0 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20  (pCrsr!=0) ){.  
254d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
254e0 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20  Table==0 );.    
254f0 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
25500 70 49 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 72  pIn2);.    if( r
25510 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
25520 20 20 20 20 20 20 69 66 28 20 69 73 53 6f 72 74        if( isSort
25530 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 20 20  er(pC) ){.      
25540 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
25550 62 65 53 6f 72 74 65 72 57 72 69 74 65 28 64 62  beSorterWrite(db
25560 2c 20 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20  , pC, pIn2);.   
25570 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
25580 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e    nKey = pIn2->n
25590 3b 0a 20 20 20 20 20 20 20 20 7a 4b 65 79 20 3d  ;.        zKey =
255a0 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20   pIn2->z;.      
255b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
255c0 72 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c  reeInsert(pCrsr,
255d0 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c   zKey, nKey, "",
255e0 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20   0, 0, pOp->p3, 
255f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 28 70  .            ((p
25600 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
25610 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
25620 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
25630 3a 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20  : 0).           
25640 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
25650 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
25660 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
25670 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74       pC->cacheSt
25680 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
25690 4c 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  LE;.      }.    
256a0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
256b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
256c0 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
256d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  * *.**.** The co
256e0 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69  ntent of P3 regi
256f0 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 61  sters starting a
25700 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66 6f  t register P2 fo
25710 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65  rm.** an unpacke
25720 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69  d index key. Thi
25730 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73  s opcode removes
25740 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d   that entry from
25750 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f   the .** index o
25760 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
25770 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P1..*/.case OP_I
25780 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64  dxDelete: {.  Vd
25790 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
257a0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
257b0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e  .  int res;.  Un
257c0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
257d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
257e0 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p3>0 );.  assert
257f0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
25800 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d  Op->p2+pOp->p3<=
25810 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 61  p->nMem+1 );.  a
25820 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
25830 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
25840 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
25850 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
25860 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
25870 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
25880 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
25890 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73   if( ALWAYS(pCrs
258a0 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 2e 70  r!=0) ){.    r.p
258b0 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
258c0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
258d0 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
258e0 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73  >p3;.    r.flags
258f0 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d 65 6d   = 0;.    r.aMem
25900 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
25910 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
25920 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74  _DEBUG.    { int
25930 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
25940 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
25950 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
25960 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
25970 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20  }.#endif.    rc 
25980 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
25990 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
259a0 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  sr, &r, 0, 0, &r
259b0 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  es);.    if( rc=
259c0 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65  =SQLITE_OK && re
259d0 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  s==0 ){.      rc
259e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
259f0 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20  elete(pCrsr);.  
25a00 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
25a10 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
25a20 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d  to==0 );.    pC-
25a30 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
25a40 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
25a50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
25a60 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
25a70 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
25a80 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
25a90 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
25aa0 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
25ab0 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
25ac0 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20  he record at.** 
25ad0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
25ae0 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64  ndex key pointed
25af0 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31   to by cursor P1
25b00 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20  .  This integer 
25b10 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65  should be.** the
25b20 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
25b30 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69  ble entry to whi
25b40 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e  ch this index en
25b50 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a  try points..**.*
25b60 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69  * See also: Rowi
25b70 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a  d, MakeRecord..*
25b80 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77  /.case OP_IdxRow
25b90 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
25ba0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
25bb0 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72  lease */.  BtCur
25bc0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64  sor *pCrsr;.  Vd
25bd0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
25be0 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73  i64 rowid;..  as
25bf0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
25c00 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
25c10 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
25c20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25c30 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
25c40 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
25c50 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
25c60 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
25c70 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 41 4c  M_Null;.  if( AL
25c80 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29  WAYS(pCrsr!=0) )
25c90 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
25ca0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
25cb0 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
25cc0 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f  NEVER(rc) ) goto
25cd0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
25ce0 72 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ror;.    assert(
25cf0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
25d00 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73  eto==0 );.    as
25d10 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
25d20 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20  e==0 );.    if( 
25d30 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  !pC->nullRow ){.
25d40 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
25d50 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64  e3VdbeIdxRowid(d
25d60 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64  b, pCrsr, &rowid
25d70 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
25d80 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
25d90 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
25da0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
25db0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4f 75       }.      pOu
25dc0 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a  t->u.i = rowid;.
25dd0 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
25de0 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
25df0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
25e00 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
25e10 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xGE P1 P2 P3 P4 
25e20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  P5.**.** The P4 
25e30 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
25e40 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
25e50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
25e60 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
25e70 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
25e80 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
25e90 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
25ea0 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
25eb0 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
25ec0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
25ed0 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
25ee0 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  the ROWID on the
25ef0 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
25f00 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
25f10 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
25f20 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
25f30 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
25f40 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
25f50 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
25f60 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
25f70 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
25f80 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
25f90 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68  5 is non-zero th
25fa0 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  en the key value
25fb0 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79   is increased by
25fc0 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20   an epsilon .** 
25fd0 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d  prior to the com
25fe0 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d  parison.  This m
25ff0 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65 20 77  ake the opcode w
26000 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54 20 65  ork like IdxGT e
26010 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 66  xcept.** that if
26020 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20 72 65   the key from re
26030 67 69 73 74 65 72 20 50 33 20 69 73 20 61 20 70  gister P3 is a p
26040 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79  refix of the key
26050 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72 2c 0a   in the cursor,.
26060 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ** the result is
26070 20 66 61 6c 73 65 20 77 68 65 72 65 61 73 20 69   false whereas i
26080 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75 65 20  t would be true 
26090 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f  with IdxGT..*/./
260a0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20  * Opcode: IdxLT 
260b0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
260c0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
260d0 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
260e0 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
260f0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
26100 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
26110 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49  t omits the ROWI
26120 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
26130 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
26140 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
26150 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
26160 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
26170 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
26180 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
26190 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
261a0 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
261b0 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ry is less than 
261c0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
261d0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
261e0 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  * Otherwise fall
261f0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
26200 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
26210 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
26220 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74   non-zero then t
26230 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20  he key value is 
26240 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20  increased by an 
26250 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a  epsilon prior .*
26260 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  * to the compari
26270 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73  son.  This makes
26280 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b   the opcode work
26290 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a   like IdxLE..*/.
262a0 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20  case OP_IdxLT:  
262b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
262c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
262d0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
262e0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
262f0 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
26300 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
26310 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
26320 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
26330 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
26340 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
26350 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
26360 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
26370 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
26380 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
26390 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70  if( ALWAYS(pC->p
263a0 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20  Cursor!=0) ){.  
263b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
263c0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
263d0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
263e0 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
263f0 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61  ->p5==1 );.    a
26400 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
26410 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
26420 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
26430 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
26440 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
26450 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
26460 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
26470 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  .      r.flags =
26480 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45   UNPACKED_INCRKE
26490 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  Y | UNPACKED_PRE
264a0 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d  FIX_MATCH;.    }
264b0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e 66 6c  else{.      r.fl
264c0 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50  ags = UNPACKED_P
264d0 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20  REFIX_MATCH;.   
264e0 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20   }.    r.aMem = 
264f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
26500 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
26510 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b  BUG.    { int i;
26520 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
26530 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
26540 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
26550 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
26560 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73  endif.    rc = s
26570 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79  qlite3VdbeIdxKey
26580 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20  Compare(pC, &r, 
26590 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70  &res);.    if( p
265a0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
265b0 64 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65  dxLT ){.      re
265c0 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65  s = -res;.    }e
265d0 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
265e0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
265f0 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20  OP_IdxGE );.    
26600 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20    res++;.    }. 
26610 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a     if( res>0 ){.
26620 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
26630 70 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20  p2 - 1 ;.    }. 
26640 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
26650 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f  * Opcode: Destro
26660 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
26670 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65  *.** Delete an e
26680 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74  ntire database t
26690 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
266a0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ose root page in
266b0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
266c0 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
266d0 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  y P1..**.** The 
266e0 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74  table being dest
266f0 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20  royed is in the 
26700 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
26710 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66  le if P3==0.  If
26720 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74  .** P3==1 then t
26730 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
26740 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
26750 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
26760 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
26770 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
26780 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
26790 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
267a0 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
267b0 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
267c0 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20  is enabled then 
267d0 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
267e0 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74  hat another root
267f0 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62   page.** might b
26800 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
26810 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72   newly deleted r
26820 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65  oot page in orde
26830 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a  r to keep all.**
26840 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74   root pages cont
26850 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65  iguous at the be
26860 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64  ginning of the d
26870 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f  atabase.  The fo
26880 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66  rmer.** value of
26890 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74   the root page t
268a0 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20  hat moved - its 
268b0 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65  value before the
268c0 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d   move occurred -
268d0 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
268e0 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
268f0 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f  f no page .** mo
26900 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69  vement was requi
26910 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65  red (because the
26920 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f   table being dro
26930 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79  pped was already
26940 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e   .** the last on
26950 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
26960 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69  e) then a zero i
26970 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
26980 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41  ster P2..** If A
26990 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73  UTOVACUUM is dis
269a0 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72  abled then a zer
269b0 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
269c0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
269d0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61  * See also: Clea
269e0 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73  r.*/.case OP_Des
269f0 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f  troy: {     /* o
26a00 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
26a10 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a  /.  int iMoved;.
26a20 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64    int iCnt;.  Vd
26a30 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74  be *pVdbe;.  int
26a40 20 69 44 62 3b 0a 0a 23 69 66 6e 64 65 66 20 53   iDb;..#ifndef S
26a50 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
26a60 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d  ALTABLE.  iCnt =
26a70 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d   0;.  for(pVdbe=
26a80 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65  db->pVdbe; pVdbe
26a90 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d  ; pVdbe = pVdbe-
26aa0 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28  >pNext){.    if(
26ab0 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56   pVdbe->magic==V
26ac0 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26  DBE_MAGIC_RUN &&
26ad0 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65   pVdbe->inVtabMe
26ae0 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d  thod<2 && pVdbe-
26af0 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  >pc>=0 ){.      
26b00 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  iCnt++;.    }.  
26b10 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d  }.#else.  iCnt =
26b20 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
26b30 6e 74 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75  nt;.#endif.  pOu
26b40 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
26b50 75 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e  ull;.  if( iCnt>
26b60 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  1 ){.    rc = SQ
26b70 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
26b80 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
26b90 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65  = OE_Abort;.  }e
26ba0 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70  lse{.    iDb = p
26bb0 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65  Op->p3;.    asse
26bc0 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20  rt( iCnt==1 );. 
26bd0 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62     assert( (p->b
26be0 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
26bf0 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21  bMask)1)<<iDb))!
26c00 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =0 );.    rc = s
26c10 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
26c20 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
26c30 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
26c40 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f  &iMoved);.    pO
26c50 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
26c60 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
26c70 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66  .i = iMoved;.#if
26c80 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26c90 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20  _AUTOVACUUM.    
26ca0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
26cb0 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29  K && iMoved!=0 )
26cc0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
26cd0 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c  ootPageMoved(db,
26ce0 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f   iDb, iMoved, pO
26cf0 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a  p->p1);.      /*
26d00 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20   All OP_Destroy 
26d10 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72  operations occur
26d20 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72   on the same btr
26d30 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  ee */.      asse
26d40 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  rt( resetSchemaO
26d50 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73  nFault==0 || res
26d60 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
26d70 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20  =iDb+1 );.      
26d80 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
26d90 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20  lt = iDb+1;.    
26da0 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
26db0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
26dc0 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20  de: Clear P1 P2 
26dd0 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  P3.**.** Delete 
26de0 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  all contents of 
26df0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
26e00 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
26e10 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69  e root page.** i
26e20 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
26e30 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
26e40 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65  P1.  But, unlike
26e50 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74   Destroy, do not
26e60 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74  .** remove the t
26e70 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72  able or index fr
26e80 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
26e90 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  file..**.** The 
26ea0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
26eb0 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  r is in the main
26ec0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
26ed0 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P2==0.  If.** 
26ee0 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P2==1 then the t
26ef0 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
26f00 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
26f10 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
26f20 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
26f30 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
26f40 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
26f50 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
26f60 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
26f70 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   the P3 value is
26f80 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
26f90 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72  the table referr
26fa0 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e  ed to must be an
26fb0 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65  .** intkey table
26fc0 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20   (an SQL table, 
26fd0 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49  not an index). I
26fe0 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
26ff0 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63  row change .** c
27000 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
27010 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
27020 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
27030 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
27040 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20  ared. .** If P3 
27050 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
27060 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76  zero, then the v
27070 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72  alue stored in r
27080 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a  egister P3 is.**
27090 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65   also incremente
270a0 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
270b0 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
270c0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
270d0 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
270e0 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63  so: Destroy.*/.c
270f0 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a  ase OP_Clear: {.
27100 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20    int nChange;. 
27110 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  .  nChange = 0;.
27120 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
27130 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
27140 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 32  Mask)1)<<pOp->p2
27150 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ))!=0 );.  rc = 
27160 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
27170 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62  rTable(.      db
27180 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70  ->aDb[pOp->p2].p
27190 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f  Bt, pOp->p1, (pO
271a0 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65  p->p3 ? &nChange
271b0 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28   : 0).  );.  if(
271c0 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
271d0 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43  p->nChange += nC
271e0 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70  hange;.    if( p
271f0 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
27200 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
27210 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
27220 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  p3]) );.      me
27230 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
27240 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
27250 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f  );.      aMem[pO
27260 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43  p->p3].u.i += nC
27270 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  hange;.    }.  }
27280 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
27290 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61  Opcode: CreateTa
272a0 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ble P1 P2 * * *.
272b0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
272c0 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68   new table in th
272d0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
272e0 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
272f0 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
27300 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
27310 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
27320 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
27330 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
27340 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
27350 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
27360 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
27370 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
27380 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69   P2.**.** The di
27390 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
273a0 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20   a table and an 
273b0 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20  index is this:  
273c0 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20  A table must.** 
273d0 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e  have a 4-byte in
273e0 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61  teger key and ca
273f0 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79  n have arbitrary
27400 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78   data.  An index
27410 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74  .** has an arbit
27420 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20  rary key but no 
27430 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  data..**.** See 
27440 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65  also: CreateInde
27450 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  x.*/./* Opcode: 
27460 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50  CreateIndex P1 P
27470 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c  2 * * *.**.** Al
27480 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64  locate a new ind
27490 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ex in the main d
274a0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
274b0 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
274c0 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
274d0 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
274e0 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
274f0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
27500 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74  f.** P1>1.  Writ
27510 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  e the root page 
27520 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
27530 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20  w table into.** 
27540 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
27550 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  ** See documenta
27560 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74  tion on OP_Creat
27570 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74  eTable for addit
27580 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
27590 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  n..*/.case OP_Cr
275a0 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20  eateIndex:      
275b0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
275c0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65  erelease */.case
275d0 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a   OP_CreateTable:
275e0 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
275f0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
27600 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20  /.  int pgno;.  
27610 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20  int flags;.  Db 
27620 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20  *pDb;..  pgno = 
27630 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
27640 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27650 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
27660 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
27670 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
27680 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29  sk)1)<<pOp->p1))
27690 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
276a0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
276b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
276c0 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28  >pBt!=0 );.  if(
276d0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
276e0 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a  _CreateTable ){.
276f0 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42      /* flags = B
27700 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a  TREE_INTKEY; */.
27710 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45      flags = BTRE
27720 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73  E_INTKEY;.  }els
27730 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  e{.    flags = B
27740 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20  TREE_BLOBKEY;.  
27750 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
27760 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
27770 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f  (pDb->pBt, &pgno
27780 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74  , flags);.  pOut
27790 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20  ->u.i = pgno;.  
277a0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
277b0 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61  ode: ParseSchema
277c0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
277d0 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73  ** Read and pars
277e0 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72  e all entries fr
277f0 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41  om the SQLITE_MA
27800 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61  STER table of da
27810 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61  tabase P1.** tha
27820 74 20 6d 61 74 63 68 20 74 68 65 20 57 48 45 52  t match the WHER
27830 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a  E clause P4. .**
27840 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
27850 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73  invokes the pars
27860 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  er to create a n
27870 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
27880 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73  ne,.** then runs
27890 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
278a0 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73   machine.  It is
278b0 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61   thus a re-entra
278c0 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  nt opcode..*/.ca
278d0 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  se OP_ParseSchem
278e0 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  a: {.  int iDb;.
278f0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
27900 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a  aster;.  char *z
27910 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20  Sql;.  InitData 
27920 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20  initData;..  /* 
27930 41 6e 79 20 70 72 65 70 61 72 65 64 20 73 74 61  Any prepared sta
27940 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f  tement that invo
27950 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20  kes this opcode 
27960 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65  will hold mutexe
27970 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20  s.  ** on every 
27980 62 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20  btree.  This is 
27990 61 20 70 72 65 72 65 71 75 69 73 69 74 65 20 66  a prerequisite f
279a0 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a  or invoking .  *
279b0 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  * sqlite3InitCal
279c0 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69  lback()..  */.#i
279d0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
279e0 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69  G.  for(iDb=0; i
279f0 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b  Db<db->nDb; iDb+
27a00 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
27a10 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65  iDb==1 || sqlite
27a20 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78  3BtreeHoldsMutex
27a30 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
27a40 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t) );.  }.#endif
27a50 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ..  iDb = pOp->p
27a60 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  1;.  assert( iDb
27a70 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
27a80 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
27a90 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62  DbHasProperty(db
27aa0 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61  , iDb, DB_Schema
27ab0 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20  Loaded) );.  /* 
27ac0 55 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e  Used to be a con
27ad0 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20  ditional */ {.  
27ae0 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45    zMaster = SCHE
27af0 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20  MA_TABLE(iDb);. 
27b00 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d     initData.db =
27b10 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74   db;.    initDat
27b20 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b  a.iDb = pOp->p1;
27b30 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a  .    initData.pz
27b40 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72  ErrMsg = &p->zEr
27b50 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d  rMsg;.    zSql =
27b60 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
27b70 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  db,.       "SELE
27b80 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67  CT name, rootpag
27b90 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27  e, sql FROM '%q'
27ba0 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44  .%s WHERE %s ORD
27bb0 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20  ER BY rowid",.  
27bc0 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62       db->aDb[iDb
27bd0 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72  ].zName, zMaster
27be0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
27bf0 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
27c00 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
27c10 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65  TE_NOMEM;.    }e
27c20 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
27c30 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  t( db->init.busy
27c40 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ==0 );.      db-
27c50 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a  >init.busy = 1;.
27c60 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72        initData.r
27c70 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
27c80 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62       assert( !db
27c90 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
27ca0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
27cb0 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53  ite3_exec(db, zS
27cc0 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43  ql, sqlite3InitC
27cd0 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61  allback, &initDa
27ce0 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  ta, 0);.      if
27cf0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
27d00 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e  ) rc = initData.
27d10 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  rc;.      sqlite
27d20 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c  3DbFree(db, zSql
27d30 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
27d40 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20  t.busy = 0;.    
27d50 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
27d60 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
27d70 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
27d80 69 6f 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72  ion(db);.  if( r
27d90 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
27da0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
27db0 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  em;.  }.  break;
27dc0 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e    .}..#if !defin
27dd0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
27de0 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64  NALYZE)./* Opcod
27df0 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20  e: LoadAnalysis 
27e00 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
27e10 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65   Read the sqlite
27e20 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72  _stat1 table for
27e30 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
27e40 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e   load the conten
27e50 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  t.** of that tab
27e60 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65  le into the inte
27e70 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20  rnal index hash 
27e80 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c  table.  This wil
27e90 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61  l cause.** the a
27ea0 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73  nalysis to be us
27eb0 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e  ed when preparin
27ec0 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  g all subsequent
27ed0 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73   queries..*/.cas
27ee0 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69  e OP_LoadAnalysi
27ef0 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  s: {.  assert( p
27f00 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
27f10 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
27f20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e    rc = sqlite3An
27f30 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70  alysisLoad(db, p
27f40 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b  Op->p1);.  break
27f50 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;  .}.#endif /* 
27f60 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
27f70 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f  OMIT_ANALYZE) */
27f80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
27f90 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34  pTable P1 * * P4
27fa0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
27fb0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
27fc0 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
27fd0 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
27fe0 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61  scribe.** the ta
27ff0 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ble named P4 in 
28000 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
28010 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
28020 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73  er a table.** is
28030 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
28040 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
28050 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
28060 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
28070 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
28080 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
28090 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
280a0 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a  OP_DropTable: {.
280b0 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
280c0 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62  ndDeleteTable(db
280d0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
280e0 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
280f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
28100 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50  opIndex P1 * * P
28110 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
28120 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
28130 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
28140 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
28150 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69  escribe.** the i
28160 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e  ndex named P4 in
28170 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
28180 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
28190 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20  ter an index.** 
281a0 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72  is dropped in or
281b0 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
281c0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
281d0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
281e0 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
281f0 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
28200 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
28210 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20  e OP_DropIndex: 
28220 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
28230 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
28240 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
28250 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
28260 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28270 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a  DropTrigger P1 *
28280 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
28290 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
282a0 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
282b0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
282c0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
282d0 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64  he trigger named
282e0 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
282f0 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
28300 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67  led after a trig
28310 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ger.** is droppe
28320 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
28330 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
28340 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
28350 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
28360 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
28370 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
28380 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
28390 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c  Trigger: {.  sql
283a0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
283b0 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70  eteTrigger(db, p
283c0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
283d0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
283e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
283f0 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
28400 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  HECK./* Opcode: 
28410 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50  IntegrityCk P1 P
28420 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
28430 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f  Do an analysis o
28440 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  f the currently 
28450 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20  open database.  
28460 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69  Store in.** regi
28470 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74  ster P1 the text
28480 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   of an error mes
28490 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20  sage describing 
284a0 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a  any problems..**
284b0 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20   If no problems 
284c0 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65  are found, store
284d0 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73   a NULL in regis
284e0 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P1..**.** Th
284f0 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f  e register P3 co
28500 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d  ntains the maxim
28510 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c  um number of all
28520 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20  owed errors..** 
28530 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20  At most reg(P3) 
28540 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72  errors will be r
28550 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f  eported..** In o
28560 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
28570 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61  analysis stops a
28580 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31  s soon as reg(P1
28590 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a  ) errors are .**
285a0 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20   seen.  Reg(P1) 
285b0 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
285c0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72  the number of er
285d0 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a  rors remaining..
285e0 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70  **.** The root p
285f0 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  age numbers of a
28600 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65  ll tables in the
28610 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e   database are in
28620 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20  teger.** stored 
28630 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28  in reg(P1), reg(
28640 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29  P1+1), reg(P1+2)
28650 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72  , ....  There ar
28660 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74  e P2 tables.** t
28670 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  otal..**.** If P
28680 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  5 is not zero, t
28690 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65  he check is done
286a0 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   on the auxiliar
286b0 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  y database.** fi
286c0 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e  le, not the main
286d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
286e0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
286f0 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  e is used to imp
28700 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67  lement the integ
28710 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d  rity_check pragm
28720 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  a..*/.case OP_In
28730 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69  tegrityCk: {.  i
28740 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f  nt nRoot;      /
28750 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
28760 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e  es to check.  (N
28770 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61  umber of root pa
28780 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a  ges.) */.  int *
28790 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72  aRoot;     /* Ar
287a0 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20  ray of rootpage 
287b0 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c  numbers for tabl
287c0 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64  es to be checked
287d0 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
287e0 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
287f0 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  unter */.  int n
28800 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Err;       /* Nu
28810 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
28820 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61  eported */.  cha
28830 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20  r *z;        /* 
28840 54 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f  Text of the erro
28850 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65  r report */.  Me
28860 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a  m *pnErr;     /*
28870 20 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e   Register keepin
28880 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72  g track of error
28890 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20  s remaining */. 
288a0 20 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d   .  nRoot = pOp-
288b0 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
288c0 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f  Root>0 );.  aRoo
288d0 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  t = sqlite3DbMal
288e0 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f  locRaw(db, sizeo
288f0 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29  f(int)*(nRoot+1)
28900 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d   );.  if( aRoot=
28910 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
28920 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28930 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
28940 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
28950 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  nErr = &aMem[pOp
28960 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
28970 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
28980 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
28990 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
289a0 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
289b0 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
289c0 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
289d0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66  em[pOp->p1];.  f
289e0 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b  or(j=0; j<nRoot;
289f0 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74   j++){.    aRoot
28a00 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74  [j] = (int)sqlit
28a10 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26  e3VdbeIntValue(&
28a20 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20  pIn1[j]);.  }.  
28a30 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20  aRoot[j] = 0;.  
28a40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
28a50 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
28a60 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
28a70 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
28a80 31 29 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30  1)<<pOp->p5))!=0
28a90 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65   );.  z = sqlite
28aa0 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43  3BtreeIntegrityC
28ab0 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70  heck(db->aDb[pOp
28ac0 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74  ->p5].pBt, aRoot
28ad0 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20  , nRoot,.       
28ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28af0 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70            (int)p
28b00 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72  nErr->u.i, &nErr
28b10 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
28b20 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20  ee(db, aRoot);. 
28b30 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e   pnErr->u.i -= n
28b40 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Err;.  sqlite3Vd
28b50 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
28b60 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d  1);.  if( nErr==
28b70 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
28b80 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65   z==0 );.  }else
28b90 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20   if( z==0 ){.   
28ba0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
28bb0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
28bc0 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
28bd0 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c  pIn1, z, -1, SQL
28be0 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65  ITE_UTF8, sqlite
28bf0 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55  3_free);.  }.  U
28c00 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
28c10 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ZE(pIn1);.  sqli
28c20 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
28c30 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f  oding(pIn1, enco
28c40 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
28c50 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
28c60 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
28c70 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f  Y_CHECK */../* O
28c80 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64  pcode: RowSetAdd
28c90 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
28ca0 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
28cb0 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
28cc0 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
28cd0 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69  into a boolean i
28ce0 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ndex.** held in 
28cf0 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
28d00 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
28d10 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
28d20 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
28d30 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
28d40 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
28d50 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49  in1, in2 */.  pI
28d60 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
28d70 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
28d80 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
28d90 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
28da0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
28db0 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  =0 );.  if( (pIn
28dc0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
28dd0 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
28de0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
28df0 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
28e00 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
28e10 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
28e20 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
28e30 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  mem;.  }.  sqlit
28e40 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
28e50 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
28e60 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn2->u.i);.  br
28e70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28e80 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31  e: RowSetRead P1
28e90 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
28ea0 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61   Extract the sma
28eb0 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d  llest value from
28ec0 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
28ed0 31 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76  1 and put that v
28ee0 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  alue into.** reg
28ef0 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69  ister P3.  Or, i
28f00 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  f boolean index 
28f10 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  P1 is initially 
28f20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a  empty, leave P3.
28f30 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  ** unchanged and
28f40 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
28f50 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  tion P2..*/.case
28f60 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20   OP_RowSetRead: 
28f70 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
28f80 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in1, out3 */.  
28f90 69 36 34 20 76 61 6c 3b 0a 20 20 43 48 45 43 4b  i64 val;.  CHECK
28fa0 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a  _FOR_INTERRUPT;.
28fb0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
28fc0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
28fd0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
28fe0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20  M_RowSet)==0 .  
28ff0 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65   || sqlite3RowSe
29000 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52  tNext(pIn1->u.pR
29010 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a  owSet, &val)==0.
29020 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20    ){.    /* The 
29030 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73  boolean index is
29040 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71   empty */.    sq
29050 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
29060 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 70  ull(pIn1);.    p
29070 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
29080 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
29090 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c   A value was pul
290a0 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64  led from the ind
290b0 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ex */.    sqlite
290c0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
290d0 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c  (&aMem[pOp->p3],
290e0 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65   val);.  }.  bre
290f0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
29100 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20  : RowSetTest P1 
29110 50 32 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52  P2 P3 P4.**.** R
29120 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73  egister P3 is as
29130 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20  sumed to hold a 
29140 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
29150 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65  alue. If registe
29160 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  r P1.** contains
29170 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74   a RowSet object
29180 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74   and that RowSet
29190 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73   object contains
291a0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65  .** the value he
291b0 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74  ld in P3, jump t
291c0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f  o register P2. O
291d0 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74  therwise, insert
291e0 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
291f0 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52  in P3 into the R
29200 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e  owSet and contin
29210 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20  ue on to the.** 
29220 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  next opcode..**.
29230 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62  ** The RowSet ob
29240 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65  ject is optimize
29250 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77  d for the case w
29260 68 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20  here successive 
29270 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  sets.** of integ
29280 65 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20  ers, where each 
29290 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  set contains no 
292a0 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68  duplicates. Each
292b0 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65   set.** of value
292c0 73 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  s is identified 
292d0 62 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76  by a unique P4 v
292e0 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20  alue. The first 
292f0 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65  set.** must have
29300 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61   P4==0, the fina
29310 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34  l set P4=-1.  P4
29320 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20   must be either 
29330 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67  -1 or.** non-neg
29340 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d  ative.  For non-
29350 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
29360 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c  of P4 only the l
29370 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61  ower 4.** bits a
29380 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a  re significant..
29390 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77  **.** This allow
293a0 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a  s optimizations:
293b0 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20   (a) when P4==0 
293c0 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
293d0 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20   to test.** the 
293e0 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f  rowset object fo
293f0 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67  r P3, as it is g
29400 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f  uaranteed not to
29410 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20   contain it,.** 
29420 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20  (b) when P4==-1 
29430 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
29440 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76   to insert the v
29450 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c  alue, as it will
29460 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73  .** never be tes
29470 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29  ted for, and (c)
29480 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68   when a value th
29490 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65  at is part of se
294a0 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74  t X is.** insert
294b0 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ed, there is no 
294c0 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74  need to search t
294d0 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d  o see if the sam
294e0 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70  e value was.** p
294f0 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74  reviously insert
29500 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65  ed as part of se
29510 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20  t X (only if it 
29520 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a  was previously.*
29530 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  * inserted as pa
29540 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72  rt of some other
29550 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f   set)..*/.case O
29560 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20  P_RowSetTest: { 
29570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29580 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
29590 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69  , in3 */.  int i
295a0 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74  Set;.  int exist
295b0 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  s;..  pIn1 = &aM
295c0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
295d0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
295e0 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70  >p3];.  iSet = p
295f0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65  Op->p4.i;.  asse
29600 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26  rt( pIn3->flags&
29610 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a  MEM_Int );..  /*
29620 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79   If there is any
29630 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e  thing other than
29640 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74   a rowset object
29650 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
29660 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20  P1,.  ** delete 
29670 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69  it now and initi
29680 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e  alize P1 with an
29690 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20   empty rowset.  
296a0 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  */.  if( (pIn1->
296b0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
296c0 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
296d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
296e0 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
296f0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
29700 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
29710 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
29720 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
29730 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
29740 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65  _INT32 );.  asse
29750 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20  rt( iSet==-1 || 
29760 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28  iSet>=0 );.  if(
29770 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69   iSet ){.    exi
29780 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77  sts = sqlite3Row
29790 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e  SetTest(pIn1->u.
297a0 70 52 6f 77 53 65 74 2c 20 0a 20 20 20 20 20 20  pRowSet, .      
297b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297c0 20 20 20 20 20 20 20 20 20 28 75 38 29 28 69 53           (u8)(iS
297d0 65 74 3e 3d 30 20 3f 20 69 53 65 74 20 26 20 30  et>=0 ? iSet & 0
297e0 78 66 20 3a 20 30 78 66 66 29 2c 0a 20 20 20 20  xf : 0xff),.    
297f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29800 20 20 20 20 20 20 20 20 20 20 20 70 49 6e 33 2d             pIn3-
29810 3e 75 2e 69 29 3b 0a 20 20 20 20 69 66 28 20 65  >u.i);.    if( e
29820 78 69 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70  xists ){.      p
29830 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
29840 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
29850 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53    }.  }.  if( iS
29860 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  et>=0 ){.    sql
29870 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
29880 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
29890 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
298a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  }.  break;.}...#
298b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
298c0 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f  IT_TRIGGER../* O
298d0 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50  pcode: Program P
298e0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
298f0 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74  ** Execute the t
29900 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70  rigger program p
29910 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70  assed as P4 (typ
29920 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29  e P4_SUBPROGRAM)
29930 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74  . .**.** P1 cont
29940 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
29950 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   of the memory c
29960 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ell that contain
29970 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f  s the first memo
29980 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61  ry .** cell in a
29990 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65  n array of value
299a0 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65  s used as argume
299b0 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70  nts to the sub-p
299c0 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63  rogram. P2 .** c
299d0 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
299e0 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69  ess to jump to i
299f0 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  f the sub-progra
29a00 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f  m throws an IGNO
29a10 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e  RE .** exception
29a20 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45   using the RAISE
29a30 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67  () function. Reg
29a40 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e  ister P3 contain
29a50 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a  s the address .*
29a60 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65  * of a memory ce
29a70 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20  ll in this (the 
29a80 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20  parent) VM that 
29a90 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63  is used to alloc
29aa0 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f  ate the .** memo
29ab0 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ry required by t
29ac0 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72  he sub-vdbe at r
29ad0 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34  untime..**.** P4
29ae0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
29af0 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69   the VM containi
29b00 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ng the trigger p
29b10 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20  rogram..*/.case 
29b20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20  OP_Program: {   
29b30 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
29b40 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
29b50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
29b60 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65  ber of memory re
29b70 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d  gisters for sub-
29b80 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74  program */.  int
29b90 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
29ba0 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
29bb0 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72   runtime space r
29bc0 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d  equired for sub-
29bd0 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d  program */.  Mem
29be0 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20   *pRt;          
29bf0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
29c00 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e   to allocate run
29c10 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  time space */.  
29c20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
29c30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
29c40 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75  to iterate throu
29c50 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  gh memory cells 
29c60 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20  */.  Mem *pEnd; 
29c70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29c80 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  Last memory cell
29c90 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f   in new array */
29ca0 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
29cb0 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65  rame;      /* Ne
29cc0 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20  w vdbe frame to 
29cd0 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20  execute in */.  
29ce0 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
29cf0 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70  gram;   /* Sub-p
29d00 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
29d10 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20  e */.  void *t; 
29d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29d30 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79  * Token identify
29d40 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a  ing trigger */..
29d50 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70    pProgram = pOp
29d60 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20  ->p4.pProgram;. 
29d70 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70   pRt = &aMem[pOp
29d80 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
29d90 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30   pProgram->nOp>0
29da0 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74   );.  .  /* If t
29db0 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c  he p5 flag is cl
29dc0 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73  ear, then recurs
29dd0 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
29de0 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20  f triggers is . 
29df0 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72   ** disabled for
29e00 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61   backwards compa
29e10 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20  tibility (p5 is 
29e20 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d  set if this sub-
29e30 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20  program.  ** is 
29e40 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72  really a trigger
29e50 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20  , not a foreign 
29e60 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20  key action, and 
29e70 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a  the flag set.  *
29e80 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79  * and cleared by
29e90 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63   the "PRAGMA rec
29ea0 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22  ursive_triggers"
29eb0 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61   command is clea
29ec0 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49  r)..  ** .  ** I
29ed0 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69  t is recursive i
29ee0 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
29ef0 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51  ggers, at the SQ
29f00 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73  L level, that is
29f10 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e   .  ** disabled.
29f20 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61   In some cases a
29f30 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
29f40 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72  may generate mor
29f50 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a  e than one .  **
29f60 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20   SubProgram (if 
29f70 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  the trigger may 
29f80 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68  be executed with
29f90 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64   more than one d
29fa0 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f  ifferent .  ** O
29fb0 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
29fc0 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61  ithm). SubProgra
29fd0 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73  m structures ass
29fe0 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20  ociated with a. 
29ff0 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67   ** single trigg
2a000 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20  er all have the 
2a010 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74  same value for t
2a020 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f  he SubProgram.to
2a030 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62  ken .  ** variab
2a040 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f  le.  */.  if( pO
2a050 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d  p->p5 ){.    t =
2a060 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
2a070 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  ;.    for(pFrame
2a080 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
2a090 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f  me && pFrame->to
2a0a0 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70  ken!=t; pFrame=p
2a0b0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
2a0c0 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20  .    if( pFrame 
2a0d0 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20  ) break;.  }..  
2a0e0 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64  if( p->nFrame>=d
2a0f0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
2a100 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44  _LIMIT_TRIGGER_D
2a110 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20  EPTH] ){.    rc 
2a120 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
2a130 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2a140 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2a150 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20  , db, "too many 
2a160 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65  levels of trigge
2a170 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20  r recursion");. 
2a180 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
2a190 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74   /* Register pRt
2a1a0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2a1b0 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71  e the memory req
2a1c0 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68  uired to save th
2a1d0 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20  e state.  ** of 
2a1e0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67  the current prog
2a1f0 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d  ram, and the mem
2a200 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20  ory required at 
2a210 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75  runtime to execu
2a220 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67  te.  ** the trig
2a230 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20  ger program. If 
2a240 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73  this trigger has
2a250 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f   been fired befo
2a260 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20  re, then pRt .  
2a270 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c  ** is already al
2a280 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69  located. Otherwi
2a290 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69  se, it must be i
2a2a0 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a  nitialized.  */.
2a2b0 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67    if( (pRt->flag
2a2c0 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20  s&MEM_Frame)==0 
2a2d0 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f  ){.    /* SubPro
2a2e0 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74  gram.nMem is set
2a2f0 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
2a300 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
2a310 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20  sed by the .    
2a320 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65  ** program store
2a330 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e  d in SubProgram.
2a340 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20  aOp. As well as 
2a350 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72  these, one memor
2a360 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73  y.    ** cell is
2a370 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61   required for ea
2a380 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62  ch cursor used b
2a390 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53  y the program. S
2a3a0 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20  et local.    ** 
2a3b0 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61  variable nMem (a
2a3c0 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72  nd later, VdbeFr
2a3d0 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74  ame.nChildMem) t
2a3e0 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20  o this value..  
2a3f0 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20    */.    nMem = 
2a400 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b  pProgram->nMem +
2a410 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
2a420 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55  .    nByte = ROU
2a430 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46  ND8(sizeof(VdbeF
2a440 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20  rame)).         
2a450 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69       + nMem * si
2a460 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20  zeof(Mem).      
2a470 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72          + pProgr
2a480 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f  am->nCsr * sizeo
2a490 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29 0a  f(VdbeCursor *).
2a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
2a4b0 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20  pProgram->nOnce 
2a4c0 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20  * sizeof(u8);.  
2a4d0 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74    pFrame = sqlit
2a4e0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64  e3DbMallocZero(d
2a4f0 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69  b, nByte);.    i
2a500 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20  f( !pFrame ){.  
2a510 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
2a520 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
2a530 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
2a540 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e  (pRt);.    pRt->
2a550 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d  flags = MEM_Fram
2a560 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46  e;.    pRt->u.pF
2a570 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a  rame = pFrame;..
2a580 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20      pFrame->v = 
2a590 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
2a5a0 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b  ChildMem = nMem;
2a5b0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
2a5c0 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61  ildCsr = pProgra
2a5d0 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72  m->nCsr;.    pFr
2a5e0 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20  ame->pc = pc;.  
2a5f0 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d    pFrame->aMem =
2a600 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46   p->aMem;.    pF
2a610 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e  rame->nMem = p->
2a620 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
2a630 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43  ->apCsr = p->apC
2a640 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  sr;.    pFrame->
2a650 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75  nCursor = p->nCu
2a660 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  rsor;.    pFrame
2a670 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a  ->aOp = p->aOp;.
2a680 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20      pFrame->nOp 
2a690 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46  = p->nOp;.    pF
2a6a0 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50  rame->token = pP
2a6b0 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20  rogram->token;. 
2a6c0 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65     pFrame->aOnce
2a6d0 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46  Flag = p->aOnceF
2a6e0 6c 61 67 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  lag;.    pFrame-
2a6f0 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e  >nOnceFlag = p->
2a700 6e 4f 6e 63 65 46 6c 61 67 3b 0a 0a 20 20 20 20  nOnceFlag;..    
2a710 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d  pEnd = &VdbeFram
2a720 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72  eMem(pFrame)[pFr
2a730 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b  ame->nChildMem];
2a740 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64  .    for(pMem=Vd
2a750 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2a760 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20  e); pMem!=pEnd; 
2a770 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70  pMem++){.      p
2a780 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Mem->flags = MEM
2a790 5f 49 6e 76 61 6c 69 64 3b 0a 20 20 20 20 20 20  _Invalid;.      
2a7a0 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20  pMem->db = db;. 
2a7b0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
2a7c0 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e    pFrame = pRt->
2a7d0 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73  u.pFrame;.    as
2a7e0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2a7f0 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e  nMem+pProgram->n
2a800 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
2a810 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73  ildMem );.    as
2a820 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2a830 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
2a840 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61  hildCsr );.    a
2a850 73 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d  ssert( pc==pFram
2a860 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20  e->pc );.  }..  
2a870 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70  p->nFrame++;.  p
2a880 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d  Frame->pParent =
2a890 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46   p->pFrame;.  pF
2a8a0 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20  rame->lastRowid 
2a8b0 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70  = lastRowid;.  p
2a8c0 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d  Frame->nChange =
2a8d0 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70   p->nChange;.  p
2a8e0 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
2a8f0 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72   p->pFrame = pFr
2a900 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d  ame;.  p->aMem =
2a910 20 61 4d 65 6d 20 3d 20 26 56 64 62 65 46 72 61   aMem = &VdbeFra
2a920 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31  meMem(pFrame)[-1
2a930 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70  ];.  p->nMem = p
2a940 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2a950 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d  ;.  p->nCursor =
2a960 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43   (u16)pFrame->nC
2a970 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70  hildCsr;.  p->ap
2a980 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f  Csr = (VdbeCurso
2a990 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  r **)&aMem[p->nM
2a9a0 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20  em+1];.  p->aOp 
2a9b0 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  = aOp = pProgram
2a9c0 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20  ->aOp;.  p->nOp 
2a9d0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b  = pProgram->nOp;
2a9e0 0a 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 20  .  p->aOnceFlag 
2a9f0 3d 20 28 75 38 20 2a 29 26 70 2d 3e 61 70 43 73  = (u8 *)&p->apCs
2aa00 72 5b 70 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20  r[p->nCursor];. 
2aa10 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20   p->nOnceFlag = 
2aa20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b  pProgram->nOnce;
2aa30 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 20 20 6d 65  .  pc = -1;.  me
2aa40 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61  mset(p->aOnceFla
2aa50 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c  g, 0, p->nOnceFl
2aa60 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  ag);..  break;.}
2aa70 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
2aa80 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  am P1 P2 * * *.*
2aa90 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2aaa0 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72   is only ever pr
2aab0 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f  esent in sub-pro
2aac0 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61  grams called via
2aad0 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67   the .** OP_Prog
2aae0 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
2aaf0 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75   Copy a value cu
2ab00 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69  rrently stored i
2ab10 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  n a memory .** c
2ab20 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69  ell of the calli
2ab30 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d  ng (parent) fram
2ab40 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20  e to cell P2 in 
2ab50 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
2ab60 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73  es .** address s
2ab70 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73  pace. This is us
2ab80 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
2ab90 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73  ograms to access
2aba0 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61   the new.* .** a
2abb0 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e  nd old.* values.
2abc0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65  .**.** The addre
2abd0 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69  ss of the cell i
2abe0 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  n the parent fra
2abf0 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  me is determined
2ac00 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68   by adding.** th
2ac10 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
2ac20 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
2ac30 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
2ac40 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
2ac50 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f  e.** calling OP_
2ac60 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
2ac70 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
2ac80 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  Param: {        
2ac90 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
2aca0 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 46  lease */.  VdbeF
2acb0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
2acc0 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61  Mem *pIn;.  pFra
2acd0 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
2ace0 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d    pIn = &pFrame-
2acf0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20  >aMem[pOp->p1 + 
2ad00 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61  pFrame->aOp[pFra
2ad10 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a  me->pc].p1];   .
2ad20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2ad30 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
2ad40 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d  , pIn, MEM_Ephem
2ad50 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
2ad60 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
2ad70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
2ad80 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GGER */..#ifndef
2ad90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
2ada0 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f  EIGN_KEY./* Opco
2adb0 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31  de: FkCounter P1
2adc0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2add0 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e  Increment a "con
2ade0 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22  straint counter"
2adf0 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62   by P2 (P2 may b
2ae00 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f  e negative or po
2ae10 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50  sitive)..** If P
2ae20 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
2ae30 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
2ae40 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69  traint counter i
2ae50 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a  s incremented .*
2ae60 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65  * (deferred fore
2ae70 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2ae80 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c  nts). Otherwise,
2ae90 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20   if P1 is zero, 
2aea0 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  the .** statemen
2aeb0 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
2aec0 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69  remented (immedi
2aed0 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
2aee0 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f  constraints)..*/
2aef0 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74  .case OP_FkCount
2af00 65 72 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d  er: {.  if( pOp-
2af10 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  >p1 ){.    db->n
2af20 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20  DeferredCons += 
2af30 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
2af40 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73  {.    p->nFkCons
2af50 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70  traint += pOp->p
2af60 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
2af70 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  }../* Opcode: Fk
2af80 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
2af90 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
2afa0 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20  code tests if a 
2afb0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2afc0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
2afd0 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
2afe0 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70  ..** If so, jump
2aff0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
2b000 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
2b010 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
2b020 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74  he next .** inst
2b030 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
2b040 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
2b050 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20  , then the jump 
2b060 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
2b070 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
2b080 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69  int-counter.** i
2b090 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20  s zero (the one 
2b0a0 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65  that counts defe
2b0b0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20  rred constraint 
2b0c0 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20  violations). If 
2b0d0 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74  P1 is.** zero, t
2b0e0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
2b0f0 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   if the statemen
2b100 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  t constraint-cou
2b110 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20  nter is zero.** 
2b120 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
2b130 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2b140 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a  t violations)..*
2b150 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65  /.case OP_FkIfZe
2b160 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  ro: {         /*
2b170 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
2b180 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 69 66  Op->p1 ){.    if
2b190 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  ( db->nDeferredC
2b1a0 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f  ons==0 ) pc = pO
2b1b0 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65  p->p2-1;.  }else
2b1c0 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b  {.    if( p->nFk
2b1d0 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 29 20  Constraint==0 ) 
2b1e0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
2b1f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2b200 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
2b210 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
2b220 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66  EIGN_KEY */..#if
2b230 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2b240 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f  _AUTOINCREMENT./
2b250 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78  * Opcode: MemMax
2b260 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2b270 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73  ** P1 is a regis
2b280 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
2b290 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d  frame of this VM
2b2a0 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65   (the root frame
2b2b0 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74   is.** different
2b2c0 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
2b2d0 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20  t frame if this 
2b2e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
2b2f0 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a  eing executed.**
2b300 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72   within a sub-pr
2b310 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20  ogram). Set the 
2b320 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
2b330 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
2b340 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63  mum of .** its c
2b350 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64  urrent value and
2b360 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
2b370 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
2b380 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
2b390 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  n throws an erro
2b3a0 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  r if the memory 
2b3b0 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74  cell is not init
2b3c0 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65  ially.** an inte
2b3d0 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
2b3e0 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20  MemMax: {       
2b3f0 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d   /* in2 */.  Mem
2b400 20 2a 70 49 6e 31 3b 0a 20 20 56 64 62 65 46 72   *pIn1;.  VdbeFr
2b410 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
2b420 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
2b430 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
2b440 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
2b450 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
2b460 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
2b470 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  t);.    pIn1 = &
2b480 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
2b490 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->p1];.  }else{.
2b4a0 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d      pIn1 = &aMem
2b4b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20  [pOp->p1];.  }. 
2b4c0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2b4d0 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73  lid(pIn1) );.  s
2b4e0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
2b4f0 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
2b500 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
2b510 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
2b520 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
2b530 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  fy(pIn2);.  if( 
2b540 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e  pIn1->u.i<pIn2->
2b550 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  u.i){.    pIn1->
2b560 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b  u.i = pIn2->u.i;
2b570 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2b580 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2b590 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
2b5a0 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ENT */../* Opcod
2b5b0 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a  e: IfPos P1 P2 *
2b5c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   * *.**.** If th
2b5d0 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
2b5e0 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67  ter P1 is 1 or g
2b5f0 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20  reater, jump to 
2b600 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20  P2..**.** It is 
2b610 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74  illegal to use t
2b620 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2b630 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68  on a register th
2b640 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63  at does.** not c
2b650 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
2b660 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  r.  An assertion
2b670 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75   fault will resu
2b680 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a  lt if you try..*
2b690 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a  /.case OP_IfPos:
2b6a0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2b6b0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
2b6c0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2b6d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
2b6e0 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
2b6f0 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   );.  if( pIn1->
2b700 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63  u.i>0 ){.     pc
2b710 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2b720 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2b730 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67  /* Opcode: IfNeg
2b740 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2b750 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
2b760 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2b770 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f  s less than zero
2b780 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  , jump to P2. .*
2b790 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
2b7a0 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
2b7b0 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
2b7c0 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
2b7d0 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
2b7e0 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
2b7f0 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
2b800 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
2b810 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
2b820 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20  e OP_IfNeg: {   
2b830 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2b840 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2b850 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2b860 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2b870 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2b880 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30   if( pIn1->u.i<0
2b890 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
2b8a0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
2b8b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2b8c0 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20  code: IfZero P1 
2b8d0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2b8e0 54 68 65 20 72 65 67 69 73 74 65 72 20 50 31 20  The register P1 
2b8f0 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
2b900 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69  integer.  Add li
2b910 74 65 72 61 6c 20 50 33 20 74 6f 20 74 68 65 0a  teral P3 to the.
2b920 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
2b930 73 74 65 72 20 50 31 2e 20 20 49 66 20 74 68 65  ster P1.  If the
2b940 20 72 65 73 75 6c 74 20 69 73 20 65 78 61 63 74   result is exact
2b950 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32  ly 0, jump to P2
2b960 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  . .**.** It is i
2b970 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
2b980 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
2b990 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
2b9a0 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
2b9b0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
2b9c0 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
2b9d0 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
2b9e0 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
2b9f0 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a  .case OP_IfZero:
2ba00 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2ba10 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
2ba20 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2ba30 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
2ba40 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
2ba50 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20   );.  pIn1->u.i 
2ba60 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66  += pOp->p3;.  if
2ba70 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29  ( pIn1->u.i==0 )
2ba80 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
2ba90 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2baa0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2bab0 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32  de: AggStep * P2
2bac0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
2bad0 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70  Execute the step
2bae0 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
2baf0 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65   aggregate.  The
2bb00 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  .** function has
2bb10 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   P5 arguments.  
2bb20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
2bb30 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a   to the FuncDef.
2bb40 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ** structure tha
2bb50 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
2bb60 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20 72  function.  Use r
2bb70 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20 61 73  egister.** P3 as
2bb80 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
2bb90 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61  ..**.** The P5 a
2bba0 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b  rguments are tak
2bbb0 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
2bbc0 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73   P2 and its.** s
2bbd0 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61  uccessors..*/.ca
2bbe0 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b  se OP_AggStep: {
2bbf0 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
2bc00 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a  i;.  Mem *pMem;.
2bc10 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73    Mem *pRec;.  s
2bc20 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
2bc30 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
2bc40 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20  lue **apVal;..  
2bc50 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61  n = pOp->p5;.  a
2bc60 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20  ssert( n>=0 );. 
2bc70 20 70 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f   pRec = &aMem[pO
2bc80 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20  p->p2];.  apVal 
2bc90 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73  = p->apArg;.  as
2bca0 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e  sert( apVal || n
2bcb0 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30  ==0 );.  for(i=0
2bcc0 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63  ; i<n; i++, pRec
2bcd0 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
2bce0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
2bcf0 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ) );.    apVal[i
2bd00 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d 65  ] = pRec;.    me
2bd10 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
2bd20 2c 20 70 52 65 63 29 3b 0a 20 20 20 20 73 71 6c  , pRec);.    sql
2bd30 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
2bd40 54 79 70 65 28 70 52 65 63 29 3b 0a 20 20 7d 0a  Type(pRec);.  }.
2bd50 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
2bd60 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61  p->p4.pFunc;.  a
2bd70 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2bd80 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
2bd90 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d  nMem );.  ctx.pM
2bda0 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65  em = pMem = &aMe
2bdb0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d  m[pOp->p3];.  pM
2bdc0 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73  em->n++;.  ctx.s
2bdd0 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
2bde0 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30  l;.  ctx.s.z = 0
2bdf0 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f  ;.  ctx.s.zMallo
2be00 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78  c = 0;.  ctx.s.x
2be10 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73  Del = 0;.  ctx.s
2be20 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e  .db = db;.  ctx.
2be30 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63  isError = 0;.  c
2be40 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20  tx.pColl = 0;.  
2be50 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30  ctx.skipFlag = 0
2be60 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e  ;.  if( ctx.pFun
2be70 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  c->flags & SQLIT
2be80 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
2be90 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2bea0 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20  Op>p->aOp );.   
2beb0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
2bec0 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  .p4type==P4_COLL
2bed0 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72  SEQ );.    asser
2bee0 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
2bef0 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b  e==OP_CollSeq );
2bf00 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d  .    ctx.pColl =
2bf10 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c   pOp[-1].p4.pCol
2bf20 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70 46  l;.  }.  (ctx.pF
2bf30 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78  unc->xStep)(&ctx
2bf40 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20  , n, apVal); /* 
2bf50 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
2bf60 33 30 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e  30 */.  if( ctx.
2bf70 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73  isError ){.    s
2bf80 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2bf90 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2bfa0 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
2bfb0 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73  alue_text(&ctx.s
2bfc0 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78  ));.    rc = ctx
2bfd0 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  .isError;.  }.  
2bfe0 69 66 28 20 63 74 78 2e 73 6b 69 70 46 6c 61 67  if( ctx.skipFlag
2bff0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2c000 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
2c010 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
2c020 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31    i = pOp[-1].p1
2c030 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73 71  ;.    if( i ) sq
2c040 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
2c050 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31  nt64(&aMem[i], 1
2c060 29 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65  );.  }..  sqlite
2c070 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
2c080 26 63 74 78 2e 73 29 3b 0a 0a 20 20 62 72 65 61  &ctx.s);..  brea
2c090 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2c0a0 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20   AggFinal P1 P2 
2c0b0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65  * P4 *.**.** Exe
2c0c0 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a  cute the finaliz
2c0d0 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
2c0e0 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50  an aggregate.  P
2c0f0 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  1 is.** the memo
2c100 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
2c110 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   is the accumula
2c120 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72  tor for the aggr
2c130 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  egate..**.** P2 
2c140 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
2c150 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
2c160 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2c170 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
2c180 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2c190 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
2c1a0 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
2c1b0 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
2c1c0 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
2c1d0 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
2c1e0 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
2c1f0 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
2c200 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
2c210 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
2c220 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
2c230 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
2c240 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
2c250 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
2c260 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74  or the degenerat
2c270 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20  e case where.** 
2c280 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2c290 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  n was not previo
2c2a0 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  usly called..*/.
2c2b0 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
2c2c0 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
2c2d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2c2e0 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
2c2f0 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d  =p->nMem );.  pM
2c300 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2c310 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
2c320 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28  pMem->flags & ~(
2c330 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67  MEM_Null|MEM_Agg
2c340 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ))==0 );.  rc = 
2c350 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69  sqlite3VdbeMemFi
2c360 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70  nalize(pMem, pOp
2c370 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69  ->p4.pFunc);.  i
2c380 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c  f( rc ){.    sql
2c390 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2c3a0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2c3b0 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
2c3c0 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a  ue_text(pMem));.
2c3d0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
2c3e0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2c3f0 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pMem, encoding);
2c400 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
2c410 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20  OBSIZE(pMem);.  
2c420 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
2c430 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29  emTooBig(pMem) )
2c440 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
2c450 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ig;.  }.  break;
2c460 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
2c470 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f  TE_OMIT_WAL./* O
2c480 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e  pcode: Checkpoin
2c490 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
2c4a0 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20  *.** Checkpoint 
2c4b0 64 61 74 61 62 61 73 65 20 50 31 2e 20 54 68 69  database P1. Thi
2c4c0 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20  s is a no-op if 
2c4d0 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  P1 is not curren
2c4e0 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f  tly in.** WAL mo
2c4f0 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32  de. Parameter P2
2c500 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54   is one of SQLIT
2c510 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
2c520 53 49 56 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72  SIVE, FULL.** or
2c530 20 52 45 53 54 41 52 54 2e 20 20 57 72 69 74 65   RESTART.  Write
2c540 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d   1 or 0 into mem
2c550 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68 65 63  [P3] if the chec
2c560 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a  kpoint returns.*
2c570 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f 72  * SQLITE_BUSY or
2c580 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76 65   not, respective
2c590 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65 20 6e  ly.  Write the n
2c5a0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
2c5b0 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74  n the.** WAL aft
2c5c0 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  er the checkpoin
2c5d0 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d  t into mem[P3+1]
2c5e0 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20   and the number 
2c5f0 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74  of pages.** in t
2c600 68 65 20 57 41 4c 20 74 68 61 74 20 68 61 76 65  he WAL that have
2c610 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74   been checkpoint
2c620 65 64 20 61 66 74 65 72 20 74 68 65 20 63 68 65  ed after the che
2c630 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c  ckpoint.** compl
2c640 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  etes into mem[P3
2c650 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e  +2].  However on
2c660 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50   an error, mem[P
2c670 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b  3+1] and.** mem[
2c680 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69 61  P3+2] are initia
2c690 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a  lized to -1..*/.
2c6a0 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69  case OP_Checkpoi
2c6b0 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20  nt: {.  int i;  
2c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6d0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
2c6e0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
2c6f0 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20 20   aRes[3];       
2c700 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2c710 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d  Results */.  Mem
2c720 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
2c730 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2c740 57 72 69 74 65 20 72 65 73 75 6c 74 73 20 68 65  Write results he
2c750 72 65 20 2a 2f 0a 0a 20 20 61 52 65 73 5b 30 5d  re */..  aRes[0]
2c760 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20   = 0;.  aRes[1] 
2c770 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a  = aRes[2] = -1;.
2c780 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c790 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
2c7a0 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20  OINT_PASSIVE.   
2c7b0 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
2c7c0 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2c7d0 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c  T_FULL.       ||
2c7e0 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
2c7f0 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54  _CHECKPOINT_REST
2c800 41 52 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20  ART.  );.  rc = 
2c810 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
2c820 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  t(db, pOp->p1, p
2c830 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d  Op->p2, &aRes[1]
2c840 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69  , &aRes[2]);.  i
2c850 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
2c860 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  SY ){.    rc = S
2c870 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52  QLITE_OK;.    aR
2c880 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20  es[0] = 1;.  }. 
2c890 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d   for(i=0, pMem =
2c8a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2c8b0 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b   i<3; i++, pMem+
2c8c0 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +){.    sqlite3V
2c8d0 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
2c8e0 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69  Mem, (i64)aRes[i
2c8f0 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72  ]);.  }    .  br
2c900 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66  eak;.};  .#endif
2c910 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2c920 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20  _OMIT_PRAGMA./* 
2c930 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d  Opcode: JournalM
2c940 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 50  ode P1 P2 P3 * P
2c950 35 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  5.**.** Change t
2c960 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  he journal mode 
2c970 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74  of database P1 t
2c980 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65  o P3. P3 must be
2c990 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50   one of the.** P
2c9a0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2c9b0 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20  _XXX values. If 
2c9c0 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e  changing between
2c9d0 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c   the various rol
2c9e0 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28  lback.** modes (
2c9f0 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65  delete, truncate
2ca00 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61  , persist, off a
2ca10 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73  nd memory), this
2ca20 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20   is a simple.** 
2ca30 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f  operation. No IO
2ca40 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
2ca50 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20  .** If changing 
2ca60 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57  into or out of W
2ca70 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63  AL mode the proc
2ca80 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f  edure is more co
2ca90 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  mplicated..**.**
2caa0 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20   Write a string 
2cab0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66  containing the f
2cac0 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64  inal journal-mod
2cad0 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  e to register P2
2cae0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75  ..*/.case OP_Jou
2caf0 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f  rnalMode: {    /
2cb00 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
2cb10 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  e */.  Btree *pB
2cb20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2cb30 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20         /* Btree 
2cb40 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61  to change journa
2cb50 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50  l mode of */.  P
2cb60 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20  ager *pPager;   
2cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2cb80 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74  * Pager associat
2cb90 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20  ed with pBt */. 
2cba0 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20   int eNew;      
2cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbc0 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20   /* New journal 
2cbd0 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f  mode */.  int eO
2cbe0 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ld;             
2cbf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2cc00 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   old journal mod
2cc10 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e */.#ifndef SQL
2cc20 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63  ITE_OMIT_WAL.  c
2cc30 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
2cc40 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  name;          /
2cc50 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
2cc60 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67  se file for pPag
2cc70 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20  er */.#endif..  
2cc80 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  eNew = pOp->p3;.
2cc90 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d    assert( eNew==
2cca0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2ccb0 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20  E_DELETE .      
2ccc0 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2ccd0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e  JOURNALMODE_TRUN
2cce0 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  CATE .       || 
2ccf0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2cd00 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20  NALMODE_PERSIST 
2cd10 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2cd20 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2cd30 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c  DE_OFF.       ||
2cd40 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2cd50 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a  RNALMODE_MEMORY.
2cd60 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2cd70 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2cd80 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20  E_WAL.       || 
2cd90 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2cda0 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20  NALMODE_QUERY.  
2cdb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2cdc0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2cdd0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a 20  p1<db->nDb );.. 
2cde0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
2cdf0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70  Op->p1].pBt;.  p
2ce00 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
2ce10 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a  treePager(pBt);.
2ce20 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33    eOld = sqlite3
2ce30 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d  PagerGetJournalM
2ce40 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69  ode(pPager);.  i
2ce50 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  f( eNew==PAGER_J
2ce60 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
2ce70 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
2ce80 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50 61    if( !sqlite3Pa
2ce90 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75  gerOkToChangeJou
2cea0 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
2ceb0 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
2cec0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2ced0 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65  OMIT_WAL.  zFile
2cee0 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61  name = sqlite3Pa
2cef0 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67  gerFilename(pPag
2cf00 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f  er, 1);..  /* Do
2cf10 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61   not allow a tra
2cf20 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e  nsition to journ
2cf30 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20  al_mode=WAL for 
2cf40 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  a database.  ** 
2cf50 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f  in temporary sto
2cf60 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20 56  rage or if the V
2cf70 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70  FS does not supp
2cf80 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72  ort shared memor
2cf90 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e  y .  */.  if( eN
2cfa0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2cfb0 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20  LMODE_WAL.   && 
2cfc0 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30  (sqlite3Strlen30
2cfd0 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20  (zFilename)==0  
2cfe0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70           /* Temp
2cff0 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20   file */.       
2d000 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65 72  || !sqlite3Pager
2d010 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61  WalSupported(pPa
2d020 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68  ger))   /* No sh
2d030 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70  ared-memory supp
2d040 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20  ort */.  ){.    
2d050 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d  eNew = eOld;.  }
2d060 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65  ..  if( (eNew!=e
2d070 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64  Old).   && (eOld
2d080 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2d090 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d  ODE_WAL || eNew=
2d0a0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2d0b0 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20  DE_WAL).  ){.   
2d0c0 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
2d0d0 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 61 63 74 69  mmit || db->acti
2d0e0 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20  veVdbeCnt>1 ){. 
2d0f0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
2d100 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71  _ERROR;.      sq
2d110 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2d120 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2d130 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e  .          "cann
2d140 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c  ot change %s wal
2d150 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69   mode from withi
2d160 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
2d170 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65  ,.          (eNe
2d180 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2d190 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f  MODE_WAL ? "into
2d1a0 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20  " : "out of").  
2d1b0 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65      );.      bre
2d1c0 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ak;.    }else{. 
2d1d0 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d  .      if( eOld=
2d1e0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2d1f0 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20  DE_WAL ){.      
2d200 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20    /* If leaving 
2d210 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20  WAL mode, close 
2d220 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66  the log file. If
2d230 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
2d240 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a   call.        **
2d250 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61   to PagerCloseWa
2d260 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20  l() checkpoints 
2d270 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20  and deletes the 
2d280 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20  write-ahead-log 
2d290 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65  .        ** file
2d2a0 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  . An EXCLUSIVE l
2d2b0 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ock may still be
2d2c0 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74   held on the dat
2d2d0 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20  abase file .    
2d2e0 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73      ** after a s
2d2f0 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e  uccessful return
2d300 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  . .        */.  
2d310 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2d320 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  e3PagerCloseWal(
2d330 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20  pPager);.       
2d340 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2d350 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
2d360 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2d370 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2d380 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20  r, eNew);.      
2d390 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20    }.      }else 
2d3a0 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  if( eOld==PAGER_
2d3b0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f  JOURNALMODE_MEMO
2d3c0 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  RY ){.        /*
2d3d0 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69   Cannot transiti
2d3e0 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d  on directly from
2d3f0 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20   MEMORY to WAL. 
2d400 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20   Use mode OFF.  
2d410 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69        ** as an i
2d420 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20  ntermediate */. 
2d430 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
2d440 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
2d450 65 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f  e(pPager, PAGER_
2d460 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29  JOURNALMODE_OFF)
2d470 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
2d480 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61     /* Open a tra
2d490 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20  nsaction on the 
2d4a0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52  database file. R
2d4b0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
2d4c0 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a   journal.      *
2d4d0 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61  * mode, this tra
2d4e0 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20  nsaction always 
2d4f0 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  uses a rollback 
2d500 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a  journal..      *
2d510 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
2d520 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
2d530 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b  Trans(pBt)==0 );
2d540 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
2d550 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2d560 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2d570 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28  BtreeSetVersion(
2d580 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45  pBt, (eNew==PAGE
2d590 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2d5a0 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20  L ? 2 : 1));.   
2d5b0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23     }.    }.  }.#
2d5c0 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20  endif /* ifndef 
2d5d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20  SQLITE_OMIT_WAL 
2d5e0 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  */..  if( rc ){.
2d5f0 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2d600 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71  .  }.  eNew = sq
2d610 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
2d620 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
2d630 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20   eNew);..  pOut 
2d640 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2d650 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
2d660 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74  = MEM_Str|MEM_St
2d670 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
2d680 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72   pOut->z = (char
2d690 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61   *)sqlite3Journa
2d6a0 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b  lModename(eNew);
2d6b0 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c  .  pOut->n = sql
2d6c0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75  ite3Strlen30(pOu
2d6d0 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65  t->z);.  pOut->e
2d6e0 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
2d6f0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
2d700 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
2d710 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ut, encoding);. 
2d720 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69   break;.};.#endi
2d730 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2d740 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20  _PRAGMA */..#if 
2d750 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2d760 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20  OMIT_VACUUM) && 
2d770 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2d780 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20  OMIT_ATTACH)./* 
2d790 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a  Opcode: Vacuum *
2d7a0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56   * * * *.**.** V
2d7b0 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65  acuum the entire
2d7c0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73   database.  This
2d7d0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75   opcode will cau
2d7e0 73 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c  se other virtual
2d7f0 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20  .** machines to 
2d800 62 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72  be created and r
2d810 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20  un.  It may not 
2d820 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  be called from w
2d830 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73  ithin.** a trans
2d840 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  action..*/.case 
2d850 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 72  OP_Vacuum: {.  r
2d860 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61  c = sqlite3RunVa
2d870 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67  cuum(&p->zErrMsg
2d880 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  , db);.  break;.
2d890 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64  }.#endif..#if !d
2d8a0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2d8b0 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f  IT_AUTOVACUUM)./
2d8c0 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61  * Opcode: IncrVa
2d8d0 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  cuum P1 P2 * * *
2d8e0 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61  .**.** Perform a
2d8f0 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20   single step of 
2d900 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  the incremental 
2d910 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65  vacuum procedure
2d920 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61   on.** the P1 da
2d930 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76  tabase. If the v
2d940 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68  acuum has finish
2d950 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  ed, jump to inst
2d960 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f  ruction.** P2. O
2d970 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
2d980 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2d990 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2d9a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56  */.case OP_IncrV
2d9b0 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20  acuum: {        
2d9c0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72  /* jump */.  Btr
2d9d0 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
2d9e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2d9f0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2da00 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
2da10 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
2da20 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
2da30 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
2da40 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
2da50 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63  p->p1].pBt;.  rc
2da60 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
2da70 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a  ncrVacuum(pBt);.
2da80 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2da90 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20  _DONE ){.    pc 
2daa0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2dab0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
2dac0 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  K;.  }.  break;.
2dad0 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
2dae0 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a  ode: Expire P1 *
2daf0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75   * * *.**.** Cau
2db00 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73  se precompiled s
2db10 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63  tatements to bec
2db20 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20  ome expired. An 
2db30 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e  expired statemen
2db40 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20  t.** fails with 
2db50 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  an error code of
2db60 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69   SQLITE_SCHEMA i
2db70 66 20 69 74 20 69 73 20 65 76 65 72 20 65 78 65  f it is ever exe
2db80 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73  cuted .** (via s
2db90 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a  qlite3_step())..
2dba0 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  ** .** If P1 is 
2dbb0 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20  0, then all SQL 
2dbc0 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d  statements becom
2dbd0 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31  e expired. If P1
2dbe0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a   is non-zero,.**
2dbf0 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63   then only the c
2dc00 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
2dc10 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ng statement is 
2dc20 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61  affected. .*/.ca
2dc30 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
2dc40 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29    if( !pOp->p1 )
2dc50 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  {.    sqlite3Exp
2dc60 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
2dc70 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c  ments(db);.  }el
2dc80 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  se{.    p->expir
2dc90 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  ed = 1;.  }.  br
2dca0 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
2dcb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
2dcc0 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f  ED_CACHE./* Opco
2dcd0 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31  de: TableLock P1
2dce0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
2dcf0 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20  * Obtain a lock 
2dd00 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  on a particular 
2dd10 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74  table. This inst
2dd20 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ruction is only 
2dd30 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65  used when.** the
2dd40 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65   shared-cache fe
2dd50 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
2dd60 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  . .**.** P1 is t
2dd70 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
2dd80 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69  database in sqli
2dd90 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65  te3.aDb[] of the
2dda0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20   database.** on 
2ddb0 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69  which the lock i
2ddc0 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72  s acquired.  A r
2ddd0 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69  eadlock is obtai
2dde0 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a  ned if P3==0 or.
2ddf0 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20  ** a write lock 
2de00 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20  if P3==1..**.** 
2de10 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P2 contains the 
2de20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
2de30 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a   table to lock..
2de40 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e  **.** P4 contain
2de50 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2de60 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
2de70 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65  able being locke
2de80 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a  d. This is only.
2de90 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  ** used to gener
2dea0 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  ate an error mes
2deb0 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b  sage if the lock
2dec0 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69   cannot be obtai
2ded0 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ned..*/.case OP_
2dee0 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75  TableLock: {.  u
2def0 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20  8 isWriteLock = 
2df00 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69  (u8)pOp->p3;.  i
2df10 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c  f( isWriteLock |
2df20 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26  | 0==(db->flags&
2df30 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
2df40 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69  mitted) ){.    i
2df50 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  nt p1 = pOp->p1;
2df60 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31   .    assert( p1
2df70 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44  >=0 && p1<db->nD
2df80 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
2df90 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
2dfa0 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
2dfb0 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 61  p1))!=0 );.    a
2dfc0 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f  ssert( isWriteLo
2dfd0 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65  ck==0 || isWrite
2dfe0 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72  Lock==1 );.    r
2dff0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2e000 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44  LockTable(db->aD
2e010 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  b[p1].pBt, pOp->
2e020 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29  p2, isWriteLock)
2e030 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78  ;.    if( (rc&0x
2e040 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b  FF)==SQLITE_LOCK
2e050 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  ED ){.      cons
2e060 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d  t char *z = pOp-
2e070 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c  >p4.z;.      sql
2e080 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2e090 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2e0a0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
2e0b0 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a  s locked: %s", z
2e0c0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
2e0d0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2e0e0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  * SQLITE_OMIT_SH
2e0f0 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23  ARED_CACHE */..#
2e100 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e110 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2e120 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69  /* Opcode: VBegi
2e130 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
2e140 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70  ** P4 may be a p
2e150 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
2e160 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
2e170 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c  ure. If so, call
2e180 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20   the .** xBegin 
2e190 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20  method for that 
2e1a0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73  table..**.** Als
2e1b0 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  o, whether or no
2e1c0 74 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65  t P4 is set, che
2e1d0 63 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ck that this is 
2e1e0 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64  not being called
2e1f0 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20   from.** within 
2e200 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20  a callback to a 
2e210 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53  virtual table xS
2e220 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66  ync() method. If
2e230 20 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f   it is, the erro
2e240 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62  r.** code will b
2e250 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f  e set to SQLITE_
2e260 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20  LOCKED..*/.case 
2e270 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56  OP_VBegin: {.  V
2e280 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20  Table *pVTab;.  
2e290 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVTab = pOp->p4.
2e2a0 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71  pVtab;.  rc = sq
2e2b0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64  lite3VtabBegin(d
2e2c0 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28  b, pVTab);.  if(
2e2d0 20 70 56 54 61 62 20 29 20 69 6d 70 6f 72 74 56   pVTab ) importV
2e2e0 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 54  tabErrMsg(p, pVT
2e2f0 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72  ab->pVtab);.  br
2e300 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2e310 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2e320 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2e330 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e340 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2e350 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74  * Opcode: VCreat
2e360 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
2e370 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
2e380 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
2e390 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
2e3a0 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78  e P1. Call the x
2e3b0 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a  Create method.**
2e3c0 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
2e3d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65  .*/.case OP_VCre
2e3e0 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71  ate: {.  rc = sq
2e3f0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
2e400 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ate(db, pOp->p1,
2e410 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e   pOp->p4.z, &p->
2e420 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61  zErrMsg);.  brea
2e430 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2e440 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2e450 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2e460 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2e470 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2e480 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79  Opcode: VDestroy
2e490 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2e4a0 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
2e4b0 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
2e4c0 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
2e4d0 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78   P1.  Call the x
2e4e0 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a  Destroy method.*
2e4f0 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e  * of that table.
2e500 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73  .*/.case OP_VDes
2e510 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56  troy: {.  p->inV
2e520 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20  tabMethod = 2;. 
2e530 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
2e540 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c  bCallDestroy(db,
2e550 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2e560 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  4.z);.  p->inVta
2e570 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62  bMethod = 0;.  b
2e580 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2e590 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2e5a0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2e5b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e5c0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2e5d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e  /* Opcode: VOpen
2e5e0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2e5f0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2e600 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2e610 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2e620 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2e630 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69  ructure..** P1 i
2e640 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  s a cursor numbe
2e650 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  r.  This opcode 
2e660 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74  opens a cursor t
2e670 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  o the virtual.**
2e680 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65   table and store
2e690 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e  s that cursor in
2e6a0 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
2e6b0 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  VOpen: {.  VdbeC
2e6c0 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73  ursor *pCur;.  s
2e6d0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2e6e0 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
2e6f0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2e700 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65  *pVtab;.  sqlite
2e710 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
2e720 65 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a  e;..  pCur = 0;.
2e730 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20    pVtabCursor = 
2e740 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  0;.  pVtab = pOp
2e750 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
2e760 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28  b;.  pModule = (
2e770 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2e780 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  )pVtab->pModule;
2e790 0a 20 20 61 73 73 65 72 74 28 70 56 74 61 62 20  .  assert(pVtab 
2e7a0 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72  && pModule);.  r
2e7b0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70  c = pModule->xOp
2e7c0 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61 62  en(pVtab, &pVtab
2e7d0 43 75 72 73 6f 72 29 3b 0a 20 20 69 6d 70 6f 72  Cursor);.  impor
2e7e0 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
2e7f0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51 4c  Vtab);.  if( SQL
2e800 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20  ITE_OK==rc ){.  
2e810 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
2e820 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
2e830 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a  sor base class *
2e840 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f  /.    pVtabCurso
2e850 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62  r->pVtab = pVtab
2e860 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
2e870 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f 72  lize vdbe cursor
2e880 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70   object */.    p
2e890 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
2e8a0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
2e8b0 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20   0, -1, 0);.    
2e8c0 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20  if( pCur ){.    
2e8d0 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72    pCur->pVtabCur
2e8e0 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f  sor = pVtabCurso
2e8f0 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70  r;.      pCur->p
2e900 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 43 75  Module = pVtabCu
2e910 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f  rsor->pVtab->pMo
2e920 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  dule;.    }else{
2e930 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f  .      db->mallo
2e940 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20  cFailed = 1;.   
2e950 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f     pModule->xClo
2e960 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  se(pVtabCursor);
2e970 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
2e980 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2e990 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2e9a0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2e9b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e9c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2e9d0 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72   Opcode: VFilter
2e9e0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
2e9f0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  *.** P1 is a cur
2ea00 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67  sor opened using
2ea10 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61   VOpen.  P2 is a
2ea20 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d  n address to jum
2ea30 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66  p to if.** the f
2ea40 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73  iltered result s
2ea50 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a  et is empty..**.
2ea60 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20  ** P4 is either 
2ea70 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67  NULL or a string
2ea80 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61   that was genera
2ea90 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74  ted by the xBest
2eaa0 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20  Index.** method 
2eab0 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20  of the module.  
2eac0 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  The interpretati
2ead0 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72  on of the P4 str
2eae0 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74  ing is left.** t
2eaf0 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70  o the module imp
2eb00 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  lementation..**.
2eb10 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2eb20 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74  nvokes the xFilt
2eb30 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65  er method on the
2eb40 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
2eb50 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50  pecified.** by P
2eb60 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20  1.  The integer 
2eb70 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d  query plan param
2eb80 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20  eter to xFilter 
2eb90 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2eba0 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67  ister.** P3. Reg
2ebb0 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65  ister P3+1 store
2ebc0 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d  s the argc param
2ebd0 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65  eter to be passe
2ebe0 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c  d to the.** xFil
2ebf0 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69  ter method. Regi
2ec00 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31  sters P3+2..P3+1
2ec10 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72  +argc are the ar
2ec20 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  gc.** additional
2ec30 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63   parameters whic
2ec40 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a  h are passed to.
2ec50 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72  ** xFilter as ar
2ec60 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  gv. Register P3+
2ec70 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30  2 becomes argv[0
2ec80 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f  ] when passed to
2ec90 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20   xFilter..**.** 
2eca0 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  A jump is made t
2ecb0 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75  o P2 if the resu
2ecc0 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c  lt set after fil
2ecd0 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20  tering would be 
2ece0 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  empty..*/.case O
2ecf0 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f  P_VFilter: {   /
2ed00 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
2ed10 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65  nArg;.  int iQue
2ed20 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ry;.  const sqli
2ed30 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2ed40 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65  ule;.  Mem *pQue
2ed50 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63  ry;.  Mem *pArgc
2ed60 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
2ed70 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
2ed80 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  rsor;.  sqlite3_
2ed90 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56  vtab *pVtab;.  V
2eda0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
2edb0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
2edc0 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  t i;.  Mem **apA
2edd0 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20  rg;..  pQuery = 
2ede0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2edf0 20 20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72    pArgc = &pQuer
2ee00 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70  y[1];.  pCur = p
2ee10 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2ee20 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
2ee30 73 56 61 6c 69 64 28 70 51 75 65 72 79 29 20 29  sValid(pQuery) )
2ee40 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
2ee50 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65  CE(pOp->p3, pQue
2ee60 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ry);.  assert( p
2ee70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2ee80 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f   );.  pVtabCurso
2ee90 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  r = pCur->pVtabC
2eea0 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d  ursor;.  pVtab =
2eeb0 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
2eec0 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2eed0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
2eee0 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20  ..  /* Grab the 
2eef0 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64  index number and
2ef00 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73   argc parameters
2ef10 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
2ef20 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d  Query->flags&MEM
2ef30 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67  _Int)!=0 && pArg
2ef40 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  c->flags==MEM_In
2ef50 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69  t );.  nArg = (i
2ef60 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20  nt)pArgc->u.i;. 
2ef70 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70   iQuery = (int)p
2ef80 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f  Query->u.i;..  /
2ef90 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69  * Invoke the xFi
2efa0 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  lter method */. 
2efb0 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a   {.    res = 0;.
2efc0 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61      apArg = p->a
2efd0 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28 69 20  pArg;.    for(i 
2efe0 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  = 0; i<nArg; i++
2eff0 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  ){.      apArg[i
2f000 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b  ] = &pArgc[i+1];
2f010 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
2f020 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 61  beMemStoreType(a
2f030 70 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a  pArg[i]);.    }.
2f040 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  .    p->inVtabMe
2f050 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  thod = 1;.    rc
2f060 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c   = pModule->xFil
2f070 74 65 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c  ter(pVtabCursor,
2f080 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34   iQuery, pOp->p4
2f090 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29  .z, nArg, apArg)
2f0a0 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d  ;.    p->inVtabM
2f0b0 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 69  ethod = 0;.    i
2f0c0 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2f0d0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69  p, pVtab);.    i
2f0e0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2f0f0 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
2f100 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56  pModule->xEof(pV
2f110 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  tabCursor);.    
2f120 7d 0a 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  }..    if( res )
2f130 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
2f140 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
2f150 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c    }.  pCur->null
2f160 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61  Row = 0;..  brea
2f170 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2f180 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2f190 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2f1a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f1b0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2f1c0 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20  Opcode: VColumn 
2f1d0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2f1e0 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c  ** Store the val
2f1f0 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20  ue of the P2-th 
2f200 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65  column of.** the
2f210 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74   row of the virt
2f220 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74  ual-table that t
2f230 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72  he .** P1 cursor
2f240 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   is pointing to 
2f250 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
2f260 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f  ..*/.case OP_VCo
2f270 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65  lumn: {.  sqlite
2f280 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2f290 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2f2a0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2f2b0 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20    Mem *pDest;.  
2f2c0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2f2d0 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62  sContext;..  Vdb
2f2e0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20  eCursor *pCur = 
2f2f0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2f300 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
2f310 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
2f320 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2f330 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
2f340 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
2f350 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Dest = &aMem[pOp
2f360 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
2f370 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65  tToChange(p, pDe
2f380 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  st);.  if( pCur-
2f390 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
2f3a0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2f3b0 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
2f3c0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
2f3d0 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74  Vtab = pCur->pVt
2f3e0 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
2f3f0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
2f400 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
2f410 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
2f420 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d  xColumn );.  mem
2f430 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30  set(&sContext, 0
2f440 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78  , sizeof(sContex
2f450 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f  t));..  /* The o
2f460 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61  utput cell may a
2f470 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75  lready have a bu
2f480 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20  ffer allocated. 
2f490 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 63 75  Move.  ** the cu
2f4a0 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74  rrent contents t
2f4b0 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20  o sContext.s so 
2f4c0 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72  in case the user
2f4d0 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20  -function .  ** 
2f4e0 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c 72 65  can use the alre
2f4f0 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75  ady allocated bu
2f500 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20  ffer instead of 
2f510 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a 20 20  allocating a .  
2f520 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f  ** new one..  */
2f530 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2f540 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78 74 2e  mMove(&sContext.
2f550 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d  s, pDest);.  Mem
2f560 53 65 74 54 79 70 65 46 6c 61 67 28 26 73 43 6f  SetTypeFlag(&sCo
2f570 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c  ntext.s, MEM_Nul
2f580 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4d 6f 64  l);..  rc = pMod
2f590 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75  ule->xColumn(pCu
2f5a0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  r->pVtabCursor, 
2f5b0 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e  &sContext, pOp->
2f5c0 70 32 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61  p2);.  importVta
2f5d0 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62  bErrMsg(p, pVtab
2f5e0 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78  );.  if( sContex
2f5f0 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  t.isError ){.   
2f600 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69   rc = sContext.i
2f610 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  sError;.  }..  /
2f620 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
2f630 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
2f640 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65 67 69  n to the P3 regi
2f650 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f  ster. We.  ** do
2f660 20 74 68 69 73 20 72 65 67 61 72 64 6c 65 73 73   this regardless
2f670 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
2f680 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  ot an error occu
2f690 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20 61  rred to ensure a
2f6a0 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20  ny.  ** dynamic 
2f6b0 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43  allocation in sC
2f6c0 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d 20  ontext.s (a Mem 
2f6d0 73 74 72 75 63 74 29 20 69 73 20 20 72 65 6c 65  struct) is  rele
2f6e0 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  ased..  */.  sql
2f6f0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2f700 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78 74  coding(&sContext
2f710 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  .s, encoding);. 
2f720 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
2f730 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43 6f 6e  ove(pDest, &sCon
2f740 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47 49 53  text.s);.  REGIS
2f750 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
2f760 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44  3, pDest);.  UPD
2f770 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2f780 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20  (pDest);..  if( 
2f790 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2f7a0 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
2f7b0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2f7c0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2f7d0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2f7e0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2f7f0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2f800 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2f810 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2f820 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
2f830 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
2f840 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
2f850 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
2f860 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
2f870 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
2f880 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2f890 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
2f8a0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
2f8b0 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
2f8c0 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
2f8d0 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
2f8e0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2f8f0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2f900 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
2f910 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
2f920 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
2f930 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
2f940 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2f950 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
2f960 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75  nt res;.  VdbeCu
2f970 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72  rsor *pCur;..  r
2f980 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d  es = 0;.  pCur =
2f990 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2f9a0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2f9b0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
2f9c0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
2f9d0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72  ullRow ){.    br
2f9e0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
2f9f0 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
2fa00 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
2fa10 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
2fa20 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
2fa30 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78  t( pModule->xNex
2fa40 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  t );..  /* Invok
2fa50 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65  e the xNext() me
2fa60 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
2fa70 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20  le. There is no 
2fa80 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  way for the.  **
2fa90 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c   underlying impl
2faa0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65  ementation to re
2fab0 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66  turn an error if
2fac0 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69   one occurs duri
2fad0 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e  ng.  ** xNext().
2fae0 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20   Instead, if an 
2faf0 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72  error occurs, tr
2fb00 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28  ue is returned (
2fb10 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
2fb20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76  .  ** data is av
2fb30 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65  ailable) and the
2fb40 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75   error code retu
2fb50 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d  rned when xColum
2fb60 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f  n or.  ** some o
2fb70 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e  ther method is n
2fb80 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74  ext invoked on t
2fb90 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20  he save virtual 
2fba0 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20  table cursor..  
2fbb0 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  */.  p->inVtabMe
2fbc0 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  thod = 1;.  rc =
2fbd0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28   pModule->xNext(
2fbe0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2fbf0 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  r);.  p->inVtabM
2fc00 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 69 6d 70  ethod = 0;.  imp
2fc10 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2fc20 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72   pVtab);.  if( r
2fc30 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2fc40 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
2fc50 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56  e->xEof(pCur->pV
2fc60 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  tabCursor);.  }.
2fc70 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20  .  if( !res ){. 
2fc80 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
2fc90 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20  s data, jump to 
2fca0 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70  P2 */.    pc = p
2fcb0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2fcc0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2fcd0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2fce0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2fcf0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2fd00 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2fd10 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52  LE./* Opcode: VR
2fd20 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20  ename P1 * * P4 
2fd30 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
2fd40 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
2fd50 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
2fd60 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
2fd70 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
2fd80 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
2fd90 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70  okes the corresp
2fda0 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d  onding xRename m
2fdb0 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65  ethod. The value
2fdc0 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20  .** in register 
2fdd0 50 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20  P1 is passed as 
2fde0 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65  the zName argume
2fdf0 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d  nt to the xRenam
2fe00 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73  e method..*/.cas
2fe10 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a  e OP_VRename: {.
2fe20 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2fe30 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e  pVtab;.  Mem *pN
2fe40 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20  ame;..  pVtab = 
2fe50 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
2fe60 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20  Vtab;.  pName = 
2fe70 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2fe80 20 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d    assert( pVtab-
2fe90 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
2fea0 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  e );.  assert( m
2feb0 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29  emIsValid(pName)
2fec0 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
2fed0 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e  RACE(pOp->p1, pN
2fee0 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ame);.  assert( 
2fef0 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d  pName->flags & M
2ff00 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74  EM_Str );.  test
2ff10 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
2ff20 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b  ==SQLITE_UTF8 );
2ff30 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
2ff40 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
2ff50 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73  UTF16BE );.  tes
2ff60 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
2ff70 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  c==SQLITE_UTF16L
2ff80 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  E );.  rc = sqli
2ff90 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2ffa0 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c  oding(pName, SQL
2ffb0 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28  ITE_UTF8);.  if(
2ffc0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2ffd0 7b 0a 20 20 20 20 72 63 20 3d 20 70 56 74 61 62  {.    rc = pVtab
2ffe0 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61  ->pModule->xRena
2fff0 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d  me(pVtab, pName-
30000 3e 7a 29 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56  >z);.    importV
30010 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74  tabErrMsg(p, pVt
30020 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  ab);.    p->expi
30030 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  red = 0;.  }.  b
30040 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
30050 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30060 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
30070 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64  ./* Opcode: VUpd
30080 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ate P1 P2 P3 P4 
30090 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
300a0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
300b0 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
300c0 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
300d0 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
300e0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
300f0 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70  okes the corresp
30100 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d  onding xUpdate m
30110 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73  ethod. P2 values
30120 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f  .** are contiguo
30130 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  us memory cells 
30140 73 74 61 72 74 69 6e 67 20 61 74 20 50 33 20 74  starting at P3 t
30150 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78 55  o pass to the xU
30160 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61  pdate .** invoca
30170 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20  tion. The value 
30180 69 6e 20 72 65 67 69 73 74 65 72 20 28 50 33 2b  in register (P3+
30190 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64  P2-1) correspond
301a0 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74  s to the .** p2t
301b0 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  h element of the
301c0 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73 73   argv array pass
301d0 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a  ed to xUpdate..*
301e0 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65  *.** The xUpdate
301f0 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20   method will do 
30200 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49  a DELETE or an I
30210 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a  NSERT or both..*
30220 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c  * The argv[0] el
30230 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72  ement (which cor
30240 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f  responds to memo
30250 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69  ry cell P3).** i
30260 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61  s the rowid of a
30270 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20   row to delete. 
30280 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e   If argv[0] is N
30290 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20  ULL then no .** 
302a0 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e  deletion occurs.
302b0 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c    The argv[1] el
302c0 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77  ement is the row
302d0 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a  id of the new .*
302e0 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e  * row.  This can
302f0 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65   be NULL to have
30300 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
30310 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65  le select the ne
30320 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20  w .** rowid for 
30330 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62  itself.  The sub
30340 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73  sequent elements
30350 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 61 72   in the array ar
30360 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  e .** the values
30370 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
30380 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a  he new row..**.*
30390 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20  * If P2==1 then 
303a0 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65 72  no insert is per
303b0 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d  formed.  argv[0]
303c0 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
303d0 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c  .** a row to del
303e0 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ete..**.** P1 is
303f0 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e   a boolean flag.
30400 20 49 66 20 69 74 20 69 73 20 73 65 74 20 74 6f   If it is set to
30410 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 78 55   true and the xU
30420 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73  pdate call.** is
30430 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
30440 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75  n the value retu
30450 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
30460 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
30470 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74  d() .** is set t
30480 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
30490 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65  he rowid for the
304a0 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74   row just insert
304b0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
304c0 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69  Update: {.  sqli
304d0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
304e0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  .  sqlite3_modul
304f0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
30500 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b  t nArg;.  int i;
30510 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
30520 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61  rowid;.  Mem **a
30530 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b  pArg;.  Mem *pX;
30540 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
30550 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c  >p2==1        ||
30560 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69   pOp->p5==OE_Fai
30570 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  l   || pOp->p5==
30580 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20  OE_Rollback .   
30590 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d      || pOp->p5==
305a0 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d  OE_Abort || pOp-
305b0 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c  >p5==OE_Ignore |
305c0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  | pOp->p5==OE_Re
305d0 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 70 56 74  place.  );.  pVt
305e0 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
305f0 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  ab->pVtab;.  pMo
30600 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f  dule = (sqlite3_
30610 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e  module *)pVtab->
30620 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20  pModule;.  nArg 
30630 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
30640 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
30650 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69  ==P4_VTAB );.  i
30660 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c  f( ALWAYS(pModul
30670 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20  e->xUpdate) ){. 
30680 20 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66     u8 vtabOnConf
30690 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f  lict = db->vtabO
306a0 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61  nConflict;.    a
306b0 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
306c0 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b  .    pX = &aMem[
306d0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f  pOp->p3];.    fo
306e0 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
306f0 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  ++){.      asser
30700 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58  t( memIsValid(pX
30710 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
30720 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
30730 58 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  X);.      sqlite
30740 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
30750 65 28 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41  e(pX);.      apA
30760 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20  rg[i] = pX;.    
30770 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20    pX++;.    }.  
30780 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66    db->vtabOnConf
30790 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  lict = pOp->p5;.
307a0 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
307b0 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c  ->xUpdate(pVtab,
307c0 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72   nArg, apArg, &r
307d0 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76  owid);.    db->v
307e0 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20  tabOnConflict = 
307f0 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a  vtabOnConflict;.
30800 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72      importVtabEr
30810 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rMsg(p, pVtab);.
30820 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
30830 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31  TE_OK && pOp->p1
30840 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
30850 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72  ( nArg>1 && apAr
30860 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30  g[0] && (apArg[0
30870 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c  ]->flags&MEM_Nul
30880 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  l) );.      db->
30890 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
308a0 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20  Rowid = rowid;. 
308b0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63     }.    if( (rc
308c0 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
308d0 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70  ONSTRAINT && pOp
308e0 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e  ->p4.pVtab->bCon
308f0 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20  straint ){.     
30900 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45   if( pOp->p5==OE
30910 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
30920 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
30930 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  K;.      }else{.
30940 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72          p->error
30950 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e  Action = ((pOp->
30960 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20  p5==OE_Replace) 
30970 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70  ? OE_Abort : pOp
30980 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ->p5);.      }. 
30990 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
309a0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
309b0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
309c0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
309d0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
309e0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
309f0 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  f  SQLITE_OMIT_P
30a00 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20  AGER_PRAGMAS./* 
30a10 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e  Opcode: Pagecoun
30a20 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
30a30 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75  .** Write the cu
30a40 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20  rrent number of 
30a50 70 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73  pages in databas
30a60 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63  e P1 to memory c
30a70 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ell P2..*/.case 
30a80 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20  OP_Pagecount: { 
30a90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
30aa0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
30ab0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73  .  pOut->u.i = s
30ac0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50  qlite3BtreeLastP
30ad0 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  age(db->aDb[pOp-
30ae0 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65  >p1].pBt);.  bre
30af0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23  ak;.}.#endif...#
30b00 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f  ifndef  SQLITE_O
30b10 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
30b20 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78  S./* Opcode: Max
30b30 50 67 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a  Pgcnt P1 P2 P3 *
30b40 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20   *.**.** Try to 
30b50 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  set the maximum 
30b60 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64  page count for d
30b70 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 74 68  atabase P1 to th
30b80 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a  e value in P3..*
30b90 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65  * Do not let the
30ba0 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
30bb0 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74  unt fall below t
30bc0 68 65 20 63 75 72 72 65 6e 74 20 70 61 67 65 20  he current page 
30bd0 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20  count and.** do 
30be0 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d  not change the m
30bf0 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
30c00 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30  t value if P3==0
30c10 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ..**.** Store th
30c20 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
30c30 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65 20 63  ount after the c
30c40 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65  hange in registe
30c50 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
30c60 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20  _MaxPgcnt: {    
30c70 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
30c80 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
30c90 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77  unsigned int new
30ca0 4d 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42  Max;.  Btree *pB
30cb0 74 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e  t;..  pBt = db->
30cc0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
30cd0 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a  ;.  newMax = 0;.
30ce0 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
30cf0 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71  .    newMax = sq
30d00 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61  lite3BtreeLastPa
30d10 67 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28  ge(pBt);.    if(
30d20 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67   newMax < (unsig
30d30 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65  ned)pOp->p3 ) ne
30d40 77 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64  wMax = (unsigned
30d50 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20  )pOp->p3;.  }.  
30d60 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
30d70 74 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43  te3BtreeMaxPageC
30d80 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78  ount(pBt, newMax
30d90 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
30da0 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53  ndif...#ifndef S
30db0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
30dc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 63  ./* Opcode: Trac
30dd0 65 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  e * * * P4 *.**.
30de0 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69 73  ** If tracing is
30df0 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65   enabled (by the
30e00 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
30e10 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65  ) interface, the
30e20 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73  n.** the UTF-8 s
30e30 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20  tring contained 
30e40 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65 64  in P4 is emitted
30e50 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63 61   on the trace ca
30e60 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20  llback..*/.case 
30e70 4f 50 5f 54 72 61 63 65 3a 20 7b 0a 20 20 63 68  OP_Trace: {.  ch
30e80 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68  ar *zTrace;.  ch
30e90 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 64 62  ar *z;..  if( db
30ea0 2d 3e 78 54 72 61 63 65 0a 20 20 20 26 26 20 21  ->xTrace.   && !
30eb0 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20  p->doingRerun.  
30ec0 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70   && (zTrace = (p
30ed0 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
30ee0 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29  p4.z : p->zSql))
30ef0 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d  !=0.  ){.    z =
30f00 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 61   sqlite3VdbeExpa
30f10 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29  ndSql(p, zTrace)
30f20 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65  ;.    db->xTrace
30f30 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20  (db->pTraceArg, 
30f40 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44  z);.    sqlite3D
30f50 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20  bFree(db, z);.  
30f60 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
30f70 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d  DEBUG.  if( (db-
30f80 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
30f90 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20  SqlTrace)!=0.   
30fa0 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f  && (zTrace = (pO
30fb0 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
30fc0 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21  4.z : p->zSql))!
30fd0 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69  =0.  ){.    sqli
30fe0 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22  te3DebugPrintf("
30ff0 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22  SQL-trace: %s\n"
31000 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23  , zTrace);.  }.#
31010 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
31020 44 45 42 55 47 20 2a 2f 0a 20 20 62 72 65 61 6b  DEBUG */.  break
31030 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ;.}.#endif.../* 
31040 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a  Opcode: Noop * *
31050 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20   * * *.**.** Do 
31060 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69  nothing.  This i
31070 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66  nstruction is of
31080 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20  ten useful as a 
31090 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74  jump.** destinat
310a0 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68  ion..*/./*.** Th
310b0 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20  e magic Explain 
310c0 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20  opcode are only 
310d0 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65 78  inserted when ex
310e0 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a  plain==2 (which.
310f0 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68 65  ** is to say whe
31100 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55  n the EXPLAIN QU
31110 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20  ERY PLAN syntax 
31120 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69  is used.).** Thi
31130 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73  s opcode records
31140 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
31150 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e  m the optimizer.
31160 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74    It is the.** t
31170 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d  he same as a no-
31180 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  op.  This opcode
31190 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20 69  snever appears i
311a0 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67  n a real VM prog
311b0 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a  ram..*/.default:
311c0 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54   {          /* T
311d0 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50  his is really OP
311e0 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70  _Noop and OP_Exp
311f0 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  lain */.  assert
31200 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
31210 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f  P_Noop || pOp->o
31220 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
31230 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n );.  break;.}.
31240 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
31250 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31260 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
31290 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20  ** The cases of 
312a0 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
312b0 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20  ment above this 
312c0 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20  line should all 
312d0 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62  be indented.** b
312e0 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
312f0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36   the left-most 6
31300 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65   spaces have bee
31310 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70  n removed to imp
31320 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64  rove the.** read
31330 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74  ability.  From t
31340 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77  his point on dow
31350 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e  n, the normal in
31360 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20  dentation rules 
31370 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e  are.** restored.
31380 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
31390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
313a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
313b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
313c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
313d0 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44      }..#ifdef VD
313e0 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b  BE_PROFILE.    {
313f0 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70 73  .      u64 elaps
31400 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  ed = sqlite3Hwti
31410 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20 20  me() - start;.  
31420 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20      pOp->cycles 
31430 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20 20  += elapsed;.    
31440 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69    pOp->cnt++;.#i
31450 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72 69  f 0.        fpri
31460 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31 30  ntf(stdout, "%10
31470 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29 3b  llu ", elapsed);
31480 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
31490 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
314a0 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 61 4f 70  ut, origPc, &aOp
314b0 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69  [origPc]);.#endi
314c0 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  f.    }.#endif..
314d0 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
314e0 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e  wing code adds n
314f0 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63  othing to the ac
31500 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69  tual functionali
31510 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ty.    ** of the
31520 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73   program.  It is
31530 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74   only here for t
31540 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67  esting and debug
31550 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20  ging..    ** On 
31560 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20  the other hand, 
31570 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55  it does burn CPU
31580 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69   cycles every ti
31590 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a  me through.    *
315a0 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20  * the evaluator 
315b0 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e  loop.  So we can
315c0 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68   leave it out wh
315d0 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66  en NDEBUG is def
315e0 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
315f0 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20  ndef NDEBUG.    
31600 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26  assert( pc>=-1 &
31610 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a  & pc<p->nOp );..
31620 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
31630 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74  BUG.    if( p->t
31640 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66  race ){.      if
31650 28 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74  ( rc!=0 ) fprint
31660 66 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25  f(p->trace,"rc=%
31670 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20  d\n",rc);.      
31680 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  if( pOp->opflags
31690 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50   & (OPFLG_OUT2_P
316a0 52 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f  RERELEASE|OPFLG_
316b0 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20  OUT2) ){.       
316c0 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
316d0 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32  ->trace, pOp->p2
316e0 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
316f0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
31700 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
31710 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29  s & OPFLG_OUT3 )
31720 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74  {.        regist
31730 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
31740 2c 20 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d  , pOp->p3, &aMem
31750 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
31760 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
31770 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55    /* SQLITE_DEBU
31780 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20  G */.#endif  /* 
31790 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f  NDEBUG */.  }  /
317a0 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * The end of the
317b0 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68   for(;;) loop th
317c0 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20  e loops through 
317d0 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a  opcodes */..  /*
317e0 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69   If we reach thi
317f0 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e  s point, it mean
31800 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e  s that execution
31810 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74   is finished wit
31820 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20  h.  ** an error 
31830 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20  of some kind..  
31840 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  */.vdbe_error_ha
31850 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63  lt:.  assert( rc
31860 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63   );.  p->rc = rc
31870 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71  ;.  testcase( sq
31880 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
31890 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73  g.xLog!=0 );.  s
318a0 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22  qlite3_log(rc, "
318b0 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73  statement aborts
318c0 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22   at %d: [%s] %s"
318d0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
318e0 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71        pc, p->zSq
318f0 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  l, p->zErrMsg);.
31900 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c    sqlite3VdbeHal
31910 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  t(p);.  if( rc==
31920 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
31930 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  EM ) db->mallocF
31940 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20  ailed = 1;.  rc 
31950 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
31960 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d    if( resetSchem
31970 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20  aOnFault>0 ){.  
31980 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e    sqlite3ResetOn
31990 65 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65  eSchema(db, rese
319a0 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31  tSchemaOnFault-1
319b0 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69  );.  }..  /* Thi
319c0 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
319d0 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72  y out of this pr
319e0 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76  ocedure.  We hav
319f0 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73  e to.  ** releas
31a00 65 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e  e the mutexes on
31a10 20 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72   btrees that wer
31a20 65 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68  e acquired at th
31a30 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76  e.  ** top. */.v
31a40 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62  dbe_return:.  db
31a50 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
31a60 73 74 52 6f 77 69 64 3b 0a 20 20 70 2d 3e 61 43  stRowid;.  p->aC
31a70 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
31a80 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50  MTSTATUS_VM_STEP
31a90 2d 31 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53  -1] += (int)nVmS
31aa0 74 65 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  tep;.  sqlite3Vd
31ab0 62 65 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65  beLeave(p);.  re
31ac0 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a  turn rc;..  /* J
31ad0 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
31ae0 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
31af0 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49  larger than SQLI
31b00 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20  TE_MAX_LENGTH.  
31b10 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  ** is encountere
31b20 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a  d..  */.too_big:
31b30 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
31b40 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
31b50 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20   db, "string or 
31b60 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a  blob too big");.
31b70 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f    rc = SQLITE_TO
31b80 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OBIG;.  goto vdb
31b90 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
31ba0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
31bb0 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
31bc0 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65  ails..  */.no_me
31bd0 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  m:.  db->mallocF
31be0 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c  ailed = 1;.  sql
31bf0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
31c00 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
31c10 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b  out of memory");
31c20 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  .  rc = SQLITE_N
31c30 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OMEM;.  goto vdb
31c40 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
31c50 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
31c60 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b   for any other k
31c70 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72  ind of fatal err
31c80 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61  or.  The "rc" va
31c90 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75  riable.  ** shou
31ca0 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f  ld hold the erro
31cb0 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61  r number..  */.a
31cc0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
31cd0 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  r:.  assert( p->
31ce0 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20  zErrMsg==0 );.  
31cf0 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
31d00 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49  iled ) rc = SQLI
31d10 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20  TE_NOMEM;.  if( 
31d20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc!=SQLITE_IOERR
31d30 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71  _NOMEM ){.    sq
31d40 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
31d50 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
31d60 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
31d70 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20  Str(rc));.  }.  
31d80 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
31d90 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
31da0 20 74 6f 20 68 65 72 65 20 69 66 20 74 68 65 20   to here if the 
31db0 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
31dc0 74 28 29 20 41 50 49 20 73 65 74 73 20 74 68 65  t() API sets the
31dd0 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20   interrupt.  ** 
31de0 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  flag..  */.abort
31df0 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
31e00 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  t:.  assert( db-
31e10 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
31e20 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  d );.  rc = SQLI
31e30 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
31e40 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
31e50 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
31e60 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
31e70 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
31e80 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f  Str(rc));.  goto
31e90 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
31ea0 3b 0a 7d 0a                                      ;.}.