/ Hex Artifact Content
Login

Artifact 1d95ab3d4aae198744c1c14170b2466b58eb8970:


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 20 20 69 6e 74 20  coding */.  int 
4790: 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20  iCompare = 0;   
47a0: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
47b0: 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70   of last OP_Comp
47c0: 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f  are operation */
47d0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53  .  unsigned nVmS
47e0: 74 65 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  tep = 0;      /*
47f0: 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
4800: 61 6c 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73  al machine steps
4810: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
4820: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
4830: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69  _CALLBACK.  unsi
4840: 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69  gned nProgressLi
4850: 6d 69 74 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b  mit = 0;/* Invok
4860: 65 20 78 50 72 6f 67 72 65 73 73 28 29 20 77 68  e xProgress() wh
4870: 65 6e 20 6e 56 6d 53 74 65 70 20 72 65 61 63 68  en nVmStep reach
4880: 65 73 20 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69  es this */.#endi
4890: 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20  f.  Mem *aMem = 
48a0: 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f  p->aMem;       /
48b0: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65  * Copy of p->aMe
48c0: 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31  m */.  Mem *pIn1
48d0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
48e0: 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f    /* 1st input o
48f0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
4900: 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20  *pIn2 = 0;      
4910: 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e         /* 2nd in
4920: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
4930: 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20   Mem *pIn3 = 0; 
4940: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33              /* 3
4950: 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  rd input operand
4960: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20   */.  Mem *pOut 
4970: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
4980: 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61   /* Output opera
4990: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65  nd */.  int *aPe
49a0: 72 6d 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20  rmute = 0;      
49b0: 20 20 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f     /* Permutatio
49c0: 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  n of columns for
49d0: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20   OP_Compare */. 
49e0: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 20 3d   i64 lastRowid =
49f0: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20   db->lastRowid; 
4a00: 20 2f 2a 20 53 61 76 65 64 20 76 61 6c 75 65 20   /* Saved value 
4a10: 6f 66 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65  of the last inse
4a20: 72 74 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64  rt ROWID */.#ifd
4a30: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
4a40: 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20    u64 start;    
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4a60: 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20  CPU clock count 
4a70: 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f  at start of opco
4a80: 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67  de */.  int orig
4a90: 50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Pc;             
4aa0: 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f     /* Program co
4ab0: 75 6e 74 65 72 20 61 74 20 73 74 61 72 74 20 6f  unter at start o
4ac0: 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64  f opcode */.#end
4ad0: 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54  if.  /*** INSERT
4ae0: 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52   STACK UNION HER
4af0: 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74  E ***/..  assert
4b00: 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  ( p->magic==VDBE
4b10: 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f  _MAGIC_RUN );  /
4b20: 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  * sqlite3_step()
4b30: 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a   verifies this *
4b40: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45  /.  sqlite3VdbeE
4b50: 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70  nter(p);.  if( p
4b60: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ->rc==SQLITE_NOM
4b70: 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  EM ){.    /* Thi
4b80: 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d  s happens if a m
4b90: 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61  alloc() inside a
4ba0: 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
4bb0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f  _column_text() o
4bc0: 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  r.    ** sqlite3
4bd0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29  _column_text16()
4be0: 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20   failed.  */.   
4bf0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
4c00: 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  }.  assert( p->r
4c10: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
4c20: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  p->rc==SQLITE_BU
4c30: 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  SY );.  assert( 
4c40: 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20  p->bIsReader || 
4c50: 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29  p->readOnly!=0 )
4c60: 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49  ;.  p->rc = SQLI
4c70: 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28  TE_OK;.  assert(
4c80: 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29   p->explain==0 )
4c90: 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  ;.  p->pResultSe
4ca0: 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73  t = 0;.  db->bus
4cb0: 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d  yHandler.nBusy =
4cc0: 20 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f   0;.  CHECK_FOR_
4cd0: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 73 71 6c  INTERRUPT;.  sql
4ce0: 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
4cf0: 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53  ql(p);.#ifndef S
4d00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
4d10: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
4d20: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
4d30: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
4d40: 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  0 < db->nProgres
4d50: 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f  sOps );.    nPro
4d60: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 28 75 6e  gressLimit = (un
4d70: 73 69 67 6e 65 64 29 70 2d 3e 61 43 6f 75 6e 74  signed)p->aCount
4d80: 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
4d90: 41 54 55 53 5f 56 4d 5f 53 54 45 50 2d 31 5d 3b  ATUS_VM_STEP-1];
4da0: 0a 20 20 20 20 69 66 28 20 6e 50 72 6f 67 72 65  .    if( nProgre
4db0: 73 73 4c 69 6d 69 74 3d 3d 30 20 29 7b 0a 20 20  ssLimit==0 ){.  
4dc0: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
4dd0: 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65  it = db->nProgre
4de0: 73 73 4f 70 73 3b 0a 20 20 20 20 7d 65 6c 73 65  ssOps;.    }else
4df0: 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73  {.      nProgres
4e00: 73 4c 69 6d 69 74 20 25 3d 20 28 75 6e 73 69 67  sLimit %= (unsig
4e10: 6e 65 64 29 64 62 2d 3e 6e 50 72 6f 67 72 65 73  ned)db->nProgres
4e20: 73 4f 70 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sOps;.    }.  }.
4e30: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
4e40: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c  LITE_DEBUG.  sql
4e50: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4e60: 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70  alloc();.  if( p
4e70: 2d 3e 70 63 3d 3d 30 20 20 26 26 20 28 70 2d 3e  ->pc==0  && (p->
4e80: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4e90: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 21  TE_VdbeListing)!
4ea0: 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  =0 ){.    int i;
4eb0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42  .    printf("VDB
4ec0: 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e  E Program Listin
4ed0: 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69  g:\n");.    sqli
4ee0: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4ef0: 70 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  p);.    for(i=0;
4f00: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
4f10: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4f20: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
4f30: 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20  , i, &aOp[i]);. 
4f40: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
4f50: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
4f60: 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f  c();.#endif.  fo
4f70: 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d  r(pc=p->pc; rc==
4f80: 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29  SQLITE_OK; pc++)
4f90: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  {.    assert( pc
4fa0: 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70  >=0 && pc<p->nOp
4fb0: 20 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   );.    if( db->
4fc0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
4fd0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64  oto no_mem;.#ifd
4fe0: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
4ff0: 20 20 20 20 6f 72 69 67 50 63 20 3d 20 70 63 3b      origPc = pc;
5000: 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c  .    start = sql
5010: 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65  ite3Hwtime();.#e
5020: 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70  ndif.    nVmStep
5030: 2b 2b 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61  ++;.    pOp = &a
5040: 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20  Op[pc];..    /* 
5050: 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69  Only allow traci
5060: 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ng if SQLITE_DEB
5070: 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
5080: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
5090: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
50a0: 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20  ( p->trace ){.  
50b0: 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b      if( pc==0 ){
50c0: 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28  .        printf(
50d0: 22 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20  "VDBE Execution 
50e0: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20  Trace:\n");.    
50f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
5100: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
5110: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
5120: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e  3VdbePrintOp(p->
5130: 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b  trace, pc, pOp);
5140: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
5150: 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65      ..    /* Che
5160: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20  ck to see if we 
5170: 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65  need to simulate
5180: 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20   an interrupt.  
5190: 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e  This only happen
51a0: 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68  s.    ** if we h
51b0: 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65  ave a special te
51c0: 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f  st build..    */
51d0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
51e0: 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69  EST.    if( sqli
51f0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5200: 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  unt>0 ){.      s
5210: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5220: 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  _count--;.      
5230: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
5240: 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29  rrupt_count==0 )
5250: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
5260: 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b  3_interrupt(db);
5270: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
5280: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e  endif..    /* On
5290: 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68   any opcode with
52a0: 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65   the "out2-prere
52b0: 6c 65 61 73 65 22 20 74 61 67 2c 20 66 72 65 65  lease" tag, free
52c0: 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65   any.    ** exte
52d0: 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  rnal allocations
52e0: 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20   out of mem[p2] 
52f0: 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20  and set mem[p2] 
5300: 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20  to be.    ** an 
5310: 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65  undefined intege
5320: 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c  r.  Opcodes will
5330: 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20   either fill in 
5340: 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  the integer.    
5350: 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76  ** value or conv
5360: 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61  ert mem[p2] to a
5370: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e   different type.
5380: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
5390: 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  rt( pOp->opflags
53a0: 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  ==sqlite3OpcodeP
53b0: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
53c0: 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20  ode] );.    if( 
53d0: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
53e0: 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
53f0: 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73  EASE ){.      as
5400: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5410: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5420: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
5430: 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20  m );.      pOut 
5440: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
5450: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5460: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
5470: 29 3b 0a 20 20 20 20 20 20 56 64 62 65 4d 65 6d  );.      VdbeMem
5480: 52 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20  Release(pOut);. 
5490: 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
54a0: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
54b0: 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79  }..    /* Sanity
54c0: 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68   checking on oth
54d0: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23  er operands */.#
54e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
54f0: 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  UG.    if( (pOp-
5500: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5510: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
5520: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5530: 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1>0 );.      ass
5540: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
5550: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61  >nMem );.      a
5560: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5570: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  d(&aMem[pOp->p1]
5580: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
5590: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
55a0: 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  1, &aMem[pOp->p1
55b0: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
55c0: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
55d0: 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20  & OPFLG_IN2)!=0 
55e0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
55f0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
5600: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5610: 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p2<=p->nMem );.
5620: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5630: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5640: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
5650: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5660: 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  (pOp->p2, &aMem[
5670: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d  pOp->p2]);.    }
5680: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5690: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
56a0: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
56b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
56c0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
56d0: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
56e0: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73  Mem );.      ass
56f0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
5700: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
5710: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
5720: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
5730: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
5740: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5750: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5760: 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29  OPFLG_OUT2)!=0 )
5770: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5780: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5790: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
57a0: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
57b0: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
57c0: 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
57d0: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
57e0: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
57f0: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
5800: 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T3)!=0 ){.      
5810: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
5820: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5830: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
5840: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  Mem );.      mem
5850: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5860: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
5870: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
5880: 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f   .    switch( pO
5890: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
58a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
58f0: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
5900: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
5910: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
5920: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
5930: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
5940: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
5950: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
5960: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
5970: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
5980: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
5990: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
59a0: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
59b0: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
59c0: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
59d0: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
59e0: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
59f0: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
5a00: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
5a10: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
5a20: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
5a30: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
5a40: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
5a50: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
5a60: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
5a70: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
5a80: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
5a90: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
5aa0: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
5ab0: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
5ac0: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
5ad0: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
5ae0: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
5af0: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
5b00: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
5b10: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
5b20: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
5b30: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
5b40: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
5b50: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
5b60: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
5b70: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
5b80: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
5b90: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
5ba0: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
5bb0: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
5bc0: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
5bd0: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
5be0: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
5bf0: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
5c00: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
5c10: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
5c20: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
5c30: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
5c40: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
5c50: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
5c60: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
5c70: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
5c80: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
5c90: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
5ca0: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
5cb0: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
5cc0: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
5cd0: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
5ce0: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
5cf0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
5d00: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
5d10: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
5d20: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
5d30: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
5d40: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
5d50: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
5d60: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
5d70: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
5d80: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
5d90: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
5da0: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
5db0: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
5dc0: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
5dd0: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f   in2, in3, out2_
5de0: 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32  prerelease, out2
5df0: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
5e00: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
5e10: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
5e20: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
5e30: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
5e40: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
5e50: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
5e60: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
5e70: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
5e80: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
5e90: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
5ea0: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
5eb0: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
5ec0: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
5ed0: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
5ee0: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
5ef0: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
5f00: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
5f10: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
5f20: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
5f30: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
5f40: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
5f50: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
5f60: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
5f70: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
5f80: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
5f90: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
5fa0: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
5fb0: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
5fc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5fd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5fe0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ff0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
6000: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
6010: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
6020: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
6030: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
6040: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
6050: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
6060: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
6070: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
6080: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
6090: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
60a0: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
60b0: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20  /.case OP_Goto: 
60c0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
60d0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 70 63 20 3d 20   jump */.  pc = 
60e0: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 0a 20 20  pOp->p2 - 1;..  
60f0: 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20  /* Opcodes that 
6100: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
6110: 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70  bottom of a loop
6120: 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72   (OP_Next, OP_Pr
6130: 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78  ev,.  ** OP_VNex
6140: 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65 78 74  t, OP_RowSetNext
6150: 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65  , or OP_SorterNe
6160: 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72  xt) all jump her
6170: 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70  e upon.  ** comp
6180: 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74  letion.  Check t
6190: 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33  o see if sqlite3
61a0: 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73  _interrupt() has
61b0: 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a   been called.  *
61c0: 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67  * or if the prog
61d0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65  ress callback ne
61e0: 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  eds to be invoke
61f0: 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  d. .  **.  ** Th
6200: 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73  is code uses uns
6210: 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22  tructured "goto"
6220: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20   statements and 
6230: 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c  does not look cl
6240: 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68  ean..  ** But th
6250: 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f  at is not due to
6260: 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68   sloppy coding h
6270: 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20  abits. The code 
6280: 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a  is written this.
6290: 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72    ** way for per
62a0: 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f  formance, to avo
62b0: 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e  id having to run
62c0: 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61   the interrupt a
62d0: 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a  nd progress.  **
62e0: 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79   checks on every
62f0: 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68   opcode.  This h
6300: 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65  elps sqlite3_ste
6310: 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74  p() to run about
6320: 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65   1.5%.  ** faste
6330: 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22  r according to "
6340: 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d  valgrind --tool=
6350: 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63  cachegrind" */.c
6360: 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
6370: 70 74 3a 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f  pt:.  CHECK_FOR_
6380: 49 4e 54 45 52 52 55 50 54 3b 0a 23 69 66 6e 64  INTERRUPT;.#ifnd
6390: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
63a0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
63b0: 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70  .  /* Call the p
63c0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
63d0: 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67   if it is config
63e0: 75 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71  ured and the req
63f0: 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a  uired number.  *
6400: 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61  * of VDBE ops ha
6410: 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64  ve been executed
6420: 20 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74   (either since t
6430: 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  his invocation o
6440: 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  f.  ** sqlite3Vd
6450: 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63  beExec() or sinc
6460: 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20  e last time the 
6470: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
6480: 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20  k was called).. 
6490: 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72   ** If the progr
64a0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74  ess callback ret
64b0: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65  urns non-zero, e
64c0: 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20  xit the virtual 
64d0: 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a  machine with.  *
64e0: 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20  * a return code 
64f0: 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20  SQLITE_ABORT..  
6500: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
6510: 6f 67 72 65 73 73 21 3d 30 20 26 26 20 6e 56 6d  ogress!=0 && nVm
6520: 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c  Step>=nProgressL
6530: 69 6d 69 74 20 29 7b 0a 20 20 20 20 69 6e 74 20  imit ){.    int 
6540: 70 72 63 3b 0a 20 20 20 20 70 72 63 20 3d 20 64  prc;.    prc = d
6550: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
6560: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b 0a  >pProgressArg);.
6570: 20 20 20 20 69 66 28 20 70 72 63 21 3d 30 20 29      if( prc!=0 )
6580: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
6590: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
65a0: 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65       goto vdbe_e
65b0: 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 7d  rror_halt;.    }
65c0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72  .    if( db->xPr
65d0: 6f 67 72 65 73 73 21 3d 30 20 29 7b 0a 20 20 20  ogress!=0 ){.   
65e0: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
65f0: 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62  t = nVmStep + db
6600: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
6610: 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50   (nVmStep%db->nP
6620: 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20  rogressOps);.   
6630: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
6640: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6650: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6660: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6670: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6680: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6690: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
66a0: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
66b0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
66c0: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
66d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
66e0: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
66f0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
6700: 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
6710: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
6720: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6730: 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
6740: 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29   & MEM_Dyn)==0 )
6750: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
6760: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
6770: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6780: 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e  EM_Int;.  pIn1->
6790: 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49  u.i = pc;.  REGI
67a0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
67b0: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20  p1, pIn1);.  pc 
67c0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
67d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
67e0: 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31  code:  Return P1
67f0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a   * * * *.**.** J
6800: 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ump to the next 
6810: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65  instruction afte
6820: 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  r the address in
6830: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f   register P1..*/
6840: 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a  .case OP_Return:
6850: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
6860: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
6870: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6880: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6890: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
68a0: 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70  );.  pc = (int)p
68b0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61  In1->u.i;.  brea
68c0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
68d0: 20 20 59 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a    Yield P1 * * *
68e0: 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68   *.**.** Swap th
68f0: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
6900: 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  r with the value
6910: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
6920: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c  .*/.case OP_Yiel
6930: 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
6940: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  /* in1 */.  int 
6950: 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d  pcDest;.  pIn1 =
6960: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6970: 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
6980: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
6990: 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d  n)==0 );.  pIn1-
69a0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
69b0: 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e  ;.  pcDest = (in
69c0: 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70  t)pIn1->u.i;.  p
69d0: 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20  In1->u.i = pc;. 
69e0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
69f0: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
6a00: 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20    pc = pcDest;. 
6a10: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6a20: 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c  code:  HaltIfNul
6a30: 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  l  P1 P2 P3 P4 *
6a40: 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
6a50: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
6a60: 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69 73  er P3.  If it is
6a70: 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20   NULL then Halt 
6a80: 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74  using.** paramet
6a90: 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50  er P1, P2, and P
6aa0: 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72  4 as if this wer
6ab0: 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63  e a Halt instruc
6ac0: 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  tion.  If the.**
6ad0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
6ae0: 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c  er P3 is not NUL
6af0: 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  L, then this rou
6b00: 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tine is a no-op.
6b10: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
6b20: 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f  IfNull: {      /
6b30: 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20  * in3 */.  pIn3 
6b40: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
6b50: 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  ;.  if( (pIn3->f
6b60: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
6b70: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
6b80: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
6b90: 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d  nto OP_Halt */.}
6ba0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
6bb0: 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  lt P1 P2 * P4 *.
6bc0: 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64  **.** Exit immed
6bd0: 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65  iately.  All ope
6be0: 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61  n cursors, etc a
6bf0: 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74  re closed.** aut
6c00: 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a  omatically..**.*
6c10: 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75  * P1 is the resu
6c20: 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  lt code returned
6c30: 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63   by sqlite3_exec
6c40: 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65  (), sqlite3_rese
6c50: 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74  t(),.** or sqlit
6c60: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20  e3_finalize().  
6c70: 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c  For a normal hal
6c80: 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62  t, this should b
6c90: 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e  e SQLITE_OK (0).
6ca0: 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20  .** For errors, 
6cb0: 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f  it can be some o
6cc0: 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20  ther value.  If 
6cd0: 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69  P1!=0 then P2 wi
6ce0: 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  ll determine.** 
6cf0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
6d00: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63  o rollback the c
6d10: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
6d20: 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c  on.  Do not roll
6d30: 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f  back.** if P2==O
6d40: 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72  E_Fail. Do the r
6d50: 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f  ollback if P2==O
6d60: 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20  E_Rollback.  If 
6d70: 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a  P2==OE_Abort,.**
6d80: 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61   then back out a
6d90: 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  ll changes that 
6da0: 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75  have occurred du
6db0: 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74  ring this execut
6dc0: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44  ion of the.** VD
6dd0: 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72  BE, but do not r
6de0: 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
6df0: 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20  saction. .**.** 
6e00: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c  If P4 is not nul
6e10: 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20  l then it is an 
6e20: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
6e30: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  ring..**.** Ther
6e40: 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20  e is an implied 
6e50: 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73  "Halt 0 0 0" ins
6e60: 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65  truction inserte
6e70: 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e  d at the very en
6e80: 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72  d of.** every pr
6e90: 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d  ogram.  So a jum
6ea0: 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20  p past the last 
6eb0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
6ec0: 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73  he program.** is
6ed0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65   the same as exe
6ee0: 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a  cuting Halt..*/.
6ef0: 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a  case OP_Halt: {.
6f00: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53    if( pOp->p1==S
6f10: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70  QLITE_OK && p->p
6f20: 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Frame ){.    /* 
6f30: 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f  Halt the sub-pro
6f40: 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e  gram. Return con
6f50: 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65  trol to the pare
6f60: 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20  nt frame. */.   
6f70: 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
6f80: 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
6f90: 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20      p->pFrame = 
6fa0: 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
6fb0: 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d  .    p->nFrame--
6fc0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
6fd0: 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
6fe0: 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20  p->nChange);.   
6ff0: 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   pc = sqlite3Vdb
7000: 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46  eFrameRestore(pF
7010: 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52  rame);.    lastR
7020: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
7030: 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f  owid;.    if( pO
7040: 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p2==OE_Ignore
7050: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73   ){.      /* Ins
7060: 74 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74  truction pc is t
7070: 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68  he OP_Program th
7080: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73  at invoked the s
7090: 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20  ub-program .    
70a0: 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62    ** currently b
70b0: 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20  eing halted. If 
70c0: 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69  the p2 instructi
70d0: 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61  on of this OP_Ha
70e0: 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74  lt.      ** inst
70f0: 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74  ruction is set t
7100: 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65  o OE_Ignore, the
7110: 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  n the sub-progra
7120: 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20  m is throwing.  
7130: 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45      ** an IGNORE
7140: 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74   exception. In t
7150: 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f  his case jump to
7160: 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65   the address spe
7170: 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20  cified.      ** 
7180: 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65  as the p2 of the
7190: 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67   calling OP_Prog
71a0: 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  ram.  */.      p
71b0: 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70  c = p->aOp[pc].p
71c0: 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  2-1;.    }.    a
71d0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
71e0: 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b   aMem = p->aMem;
71f0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
7200: 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e  .  p->rc = pOp->
7210: 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63  p1;.  p->errorAc
7220: 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e  tion = (u8)pOp->
7230: 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63  p2;.  p->pc = pc
7240: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  ;.  if( pOp->p4.
7250: 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  z ){.    assert(
7260: 20 70 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f   p->rc!=SQLITE_O
7270: 4b 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  K );.    sqlite3
7280: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
7290: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
72a0: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
72b0: 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74   testcase( sqlit
72c0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
72d0: 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71  Log!=0 );.    sq
72e0: 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70  lite3_log(pOp->p
72f0: 31 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64 20  1, "abort at %d 
7300: 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63  in [%s]: %s", pc
7310: 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 4f 70 2d 3e  , p->zSql, pOp->
7320: 70 34 2e 7a 29 3b 0a 20 20 7d 65 6c 73 65 20 69  p4.z);.  }else i
7330: 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20  f( p->rc ){.    
7340: 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65  testcase( sqlite
7350: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c  3GlobalConfig.xL
7360: 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  og!=0 );.    sql
7370: 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31  ite3_log(pOp->p1
7380: 2c 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  , "constraint fa
7390: 69 6c 65 64 20 61 74 20 25 64 20 69 6e 20 5b 25  iled at %d in [%
73a0: 73 5d 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c  s]", pc, p->zSql
73b0: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
73c0: 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
73d0: 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
73e0: 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72  SQLITE_BUSY || r
73f0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7400: 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52  rc==SQLITE_ERROR
7410: 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   );.  if( rc==SQ
7420: 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
7430: 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
7440: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
7450: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
7460: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
7470: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
7480: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
7490: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
74a0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
74b0: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
74c0: 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  ns>0 || db->nDef
74d0: 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29  erredImmCons>0 )
74e0: 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63  ;.    rc = p->rc
74f0: 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20   ? SQLITE_ERROR 
7500: 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  : SQLITE_DONE;. 
7510: 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72   }.  goto vdbe_r
7520: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
7530: 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20  ode: Integer P1 
7540: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
7550: 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65  he 32-bit intege
7560: 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72  r value P1 is wr
7570: 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73  itten into regis
7580: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7590: 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20  OP_Integer: {   
75a0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
75b0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
75c0: 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70  ut->u.i = pOp->p
75d0: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
75e0: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20  * Opcode: Int64 
75f0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  * P2 * P4 *.**.*
7600: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
7610: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e  r to a 64-bit in
7620: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20  teger value..** 
7630: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
7640: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7650: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
7660: 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20  t64: {          
7670: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
7680: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7690: 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30   pOp->p4.pI64!=0
76a0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
76b0: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b  = *pOp->p4.pI64;
76c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
76d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
76e0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
76f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20  /* Opcode: Real 
7700: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  * P2 * P4 *.**.*
7710: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
7720: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c  r to a 64-bit fl
7730: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
7740: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
7750: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
7760: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7770: 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20  e OP_Real: {    
7780: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
7790: 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74  as TK_FLOAT, out
77a0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
77b0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
77c0: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65  MEM_Real;.  asse
77d0: 72 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61  rt( !sqlite3IsNa
77e0: 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  N(*pOp->p4.pReal
77f0: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d  ) );.  pOut->r =
7800: 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b   *pOp->p4.pReal;
7810: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
7820: 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
7830: 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34  tring8 * P2 * P4
7840: 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e   *.**.** P4 poin
7850: 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d  ts to a nul term
7860: 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
7870: 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  ing. This opcode
7880: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
7890: 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53  .** into an OP_S
78a0: 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20  tring before it 
78b0: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
78c0: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a  the first time..
78d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
78e0: 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  g8: {         /*
78f0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49   same as TK_STRI
7900: 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  NG, out2-prerele
7910: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7920: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7930: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
7940: 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f   OP_String;.  pO
7950: 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53  p->p1 = sqlite3S
7960: 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e  trlen30(pOp->p4.
7970: 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  z);..#ifndef SQL
7980: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
7990: 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53   if( encoding!=S
79a0: 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20  QLITE_UTF8 ){.  
79b0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
79c0: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
79d0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c  , pOp->p4.z, -1,
79e0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
79f0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
7a00: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
7a10: 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74  _TOOBIG ) goto t
7a20: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20  oo_big;.    if( 
7a30: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
7a40: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
7a50: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
7a60: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
7a70: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
7a80: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70  pOut->zMalloc==p
7a90: 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73  Out->z );.    as
7aa0: 73 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67  sert( pOut->flag
7ab0: 73 20 26 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20  s & MEM_Dyn );. 
7ac0: 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63     pOut->zMalloc
7ad0: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
7ae0: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
7af0: 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  tic;.    pOut->f
7b00: 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e  lags &= ~MEM_Dyn
7b10: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
7b20: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
7b30: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
7b40: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
7b50: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
7b60: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
7b70: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
7b80: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
7b90: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
7ba0: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
7bb0: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
7bc0: 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74  p->p1>db->aLimit
7bd0: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
7be0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
7bf0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
7c00: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
7c10: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73   to the next cas
7c20: 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a  e, OP_String */.
7c30: 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  }.  ./* Opcode: 
7c40: 53 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50  String P1 P2 * P
7c50: 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  4 *.**.** The st
7c60: 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66  ring value P4 of
7c70: 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65   length P1 (byte
7c80: 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  s) is stored in 
7c90: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
7ca0: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20  case OP_String: 
7cb0: 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
7cc0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7cd0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7ce0: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75  p4.z!=0 );.  pOu
7cf0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
7d00: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
7d10: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
7d20: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
7d30: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
7d40: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
7d50: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
7d60: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
7d70: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
7d80: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7d90: 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20  Null P1 P2 P3 * 
7da0: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  *.**.** Write a 
7db0: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
7dc0: 65 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67  ers P2.  If P3 g
7dd0: 72 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20  reater than P2, 
7de0: 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a  then also write.
7df0: 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67  ** NULL into reg
7e00: 69 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65  ister P3 and eve
7e10: 72 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62  ry register in b
7e20: 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33  etween P2 and P3
7e30: 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c  .  If P3.** is l
7e40: 65 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70  ess than P2 (typ
7e50: 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72  ically P3 is zer
7e60: 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67  o) then only reg
7e70: 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73  ister P2 is.** s
7e80: 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  et to NULL..**.*
7e90: 2a 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75  * If the P1 valu
7ea0: 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
7eb0: 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65  hen also set the
7ec0: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61   MEM_Cleared fla
7ed0: 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c  g so that.** NUL
7ee0: 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f  L values will no
7ef0: 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  t compare equal 
7f00: 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e  even if SQLITE_N
7f10: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a  ULLEQ is set on.
7f20: 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45  ** OP_Ne or OP_E
7f30: 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  q..*/.case OP_Nu
7f40: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
7f50: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
7f60: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  se */.  int cnt;
7f70: 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b  .  u16 nullFlag;
7f80: 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33  .  cnt = pOp->p3
7f90: 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65  -pOp->p2;.  asse
7fa0: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e  rt( pOp->p3<=p->
7fb0: 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  nMem );.  pOut->
7fc0: 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67  flags = nullFlag
7fd0: 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45   = pOp->p1 ? (ME
7fe0: 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72  M_Null|MEM_Clear
7ff0: 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ed) : MEM_Null;.
8000: 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29    while( cnt>0 )
8010: 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  {.    pOut++;.  
8020: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
8030: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
8040: 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28   VdbeMemRelease(
8050: 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  pOut);.    pOut-
8060: 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61  >flags = nullFla
8070: 67 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20  g;.    cnt--;.  
8080: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
8090: 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50  * Opcode: Blob P
80a0: 31 20 50 32 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20  1 P2 * P4.**.** 
80b0: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62  P4 points to a b
80c0: 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62  lob of data P1 b
80d0: 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72  ytes long.  Stor
80e0: 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69  e this.** blob i
80f0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
8100: 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20  /.case OP_Blob: 
8110: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
8120: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
8130: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
8140: 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49   pOp->p1 <= SQLI
8150: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b  TE_MAX_LENGTH );
8160: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
8170: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
8180: 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31  p->p4.z, pOp->p1
8190: 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d  , 0, 0);.  pOut-
81a0: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
81b0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
81c0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
81d0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
81e0: 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31  ode: Variable P1
81f0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
8200: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61   Transfer the va
8210: 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61  lues of bound pa
8220: 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20  rameter P1 into 
8230: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
8240: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
8250: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
8260: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
8270: 72 73 20 69 6e 20 50 34 20 61 6e 64 20 50 33 3d  rs in P4 and P3=
8280: 3d 31 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  =1..** The P4 va
8290: 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73  lue is used by s
82a0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
82b0: 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f  meter_name()..*/
82c0: 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c  .case OP_Variabl
82d0: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
82e0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
82f0: 73 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61  se */.  Mem *pVa
8300: 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  r;       /* Valu
8310: 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72  e being transfer
8320: 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  red */..  assert
8330: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
8340: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20  Op->p1<=p->nVar 
8350: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
8360: 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70  ->p4.z==0 || pOp
8370: 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72  ->p4.z==p->azVar
8380: 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20  [pOp->p1-1] );. 
8390: 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72   pVar = &p->aVar
83a0: 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
83b0: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
83c0: 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20  MemTooBig(pVar) 
83d0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
83e0: 62 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  big;.  }.  sqlit
83f0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
8400: 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c  Copy(pOut, pVar,
8410: 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20   MEM_Static);.  
8420: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
8430: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
8440: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8450: 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20  : Move P1 P2 P3 
8460: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
8470: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
8480: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 20  ister P1..P1+P3 
8490: 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  over into.** reg
84a0: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
84b0: 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e  .  Registers P1.
84c0: 2e 50 31 2b 50 33 20 61 72 65 0a 2a 2a 20 6c 65  .P1+P3 are.** le
84d0: 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c  ft holding a NUL
84e0: 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72  L.  It is an err
84f0: 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20  or for register 
8500: 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31  ranges.** P1..P1
8510: 2b 50 33 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50  +P3 and P2..P2+P
8520: 33 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f  3 to overlap..*/
8530: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
8540: 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63  .  char *zMalloc
8550: 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76  ;   /* Holding v
8560: 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f  ariable for allo
8570: 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cated memory */.
8580: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
8590: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
85a0: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
85b0: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
85c0: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
85d0: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
85e0: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
85f0: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
8600: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
8610: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
8620: 2d 3e 70 33 20 2b 20 31 3b 0a 20 20 70 31 20 3d  ->p3 + 1;.  p1 =
8630: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
8640: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
8650: 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20  rt( n>0 && p1>0 
8660: 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  && p2>0 );.  ass
8670: 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c  ert( p1+n<=p2 ||
8680: 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20   p2+n<=p1 );..  
8690: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d  pIn1 = &aMem[p1]
86a0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
86b0: 5b 70 32 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e  [p2];.  while( n
86c0: 2d 2d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  -- ){.    assert
86d0: 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d  ( pOut<=&aMem[p-
86e0: 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73  >nMem] );.    as
86f0: 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65  sert( pIn1<=&aMe
8700: 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20  m[p->nMem] );.  
8710: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
8720: 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
8730: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
8740: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
8750: 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d   zMalloc = pOut-
8760: 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f  >zMalloc;.    pO
8770: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  ut->zMalloc = 0;
8780: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8790: 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49  MemMove(pOut, pI
87a0: 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  n1);.#ifdef SQLI
87b0: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
87c0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
87d0: 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20  m>=&aMem[p1] && 
87e0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
87f0: 3c 26 61 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70  <&aMem[p1+pOp->p
8800: 33 5d 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  3] ){.      pOut
8810: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20  ->pScopyFrom += 
8820: 70 31 20 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p1 - pOp->p2;.  
8830: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70    }.#endif.    p
8840: 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a  In1->zMalloc = z
8850: 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49  Malloc;.    REGI
8860: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
8870: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
8880: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
8890: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
88a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20  /* Opcode: Copy 
88b0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
88c0: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
88d0: 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e  f registers P1..
88e0: 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73  P1+P3 into regis
88f0: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a  ters P2..P2+P3..
8900: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
8910: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64  uction makes a d
8920: 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20  eep copy of the 
8930: 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63  value.  A duplic
8940: 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f  ate.** is made o
8950: 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  f any string or 
8960: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20  blob constant.  
8970: 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70  See also OP_SCop
8980: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  y..*/.case OP_Co
8990: 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  py: {.  int n;..
89a0: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
89b0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
89c0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
89d0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
89e0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
89f0: 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65  =pIn1 );.  while
8a00: 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ( 1 ){.    sqlit
8a10: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
8a20: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
8a30: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20   MEM_Ephem);.   
8a40: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
8a50: 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51  pOut);.#ifdef SQ
8a60: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70  LITE_DEBUG.    p
8a70: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
8a80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  = 0;.#endif.    
8a90: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
8aa0: 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e  Op->p2+pOp->p3-n
8ab0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28  , pOut);.    if(
8ac0: 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61   (n--)==0 ) brea
8ad0: 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  k;.    pOut++;. 
8ae0: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
8af0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8b00: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
8b10: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61  2 * * *.**.** Ma
8b20: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
8b30: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
8b40: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
8b50: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
8b60: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
8b70: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
8b80: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
8b90: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
8ba0: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
8bb0: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
8bc0: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
8bd0: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
8be0: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
8bf0: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
8c00: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
8c10: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
8c20: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
8c30: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
8c40: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
8c50: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
8c60: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
8c70: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
8c80: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
8c90: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
8ca0: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
8cb0: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
8cc0: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
8cd0: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
8ce0: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
8cf0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
8d00: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
8d10: 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  * in1, out2 */. 
8d20: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
8d30: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
8d40: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
8d50: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
8d60: 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74  =pIn1 );.  sqlit
8d70: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
8d80: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
8d90: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66   MEM_Ephem);.#if
8da0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
8db0: 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63  .  if( pOut->pSc
8dc0: 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75  opyFrom==0 ) pOu
8dd0: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20  t->pScopyFrom = 
8de0: 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 52  pIn1;.#endif.  R
8df0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
8e00: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
8e10: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8e20: 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50  ode: ResultRow P
8e30: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
8e40: 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50   The registers P
8e50: 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d  1 through P1+P2-
8e60: 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67  1 contain a sing
8e70: 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73  le row of.** res
8e80: 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64  ults. This opcod
8e90: 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c  e causes the sql
8ea0: 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c  ite3_step() call
8eb0: 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a   to terminate.**
8ec0: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
8ed0: 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ROW return code 
8ee0: 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74  and it sets up t
8ef0: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a  he sqlite3_stmt.
8f00: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  ** structure to 
8f10: 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74  provide access t
8f20: 6f 20 74 68 65 20 74 6f 70 20 50 31 20 76 61 6c  o the top P1 val
8f30: 75 65 73 20 61 73 20 74 68 65 20 72 65 73 75 6c  ues as the resul
8f40: 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73  t.** row..*/.cas
8f50: 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20  e OP_ResultRow: 
8f60: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
8f70: 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74   int i;.  assert
8f80: 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d  ( p->nResColumn=
8f90: 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73  =pOp->p2 );.  as
8fa0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
8fb0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
8fc0: 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ->p1+pOp->p2<=p-
8fd0: 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20 20 2f 2a  >nMem+1 );..  /*
8fe0: 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65   If this stateme
8ff0: 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20  nt has violated 
9000: 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
9010: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
9020: 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72  s, do.  ** not r
9030: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
9040: 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65   of rows modifie
9050: 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45  d. And do not RE
9060: 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d  LEASE the statem
9070: 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  ent.  ** transac
9080: 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74  tion. It needs t
9090: 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
90a0: 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49  .  */.  if( SQLI
90b0: 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c  TE_OK!=(rc = sql
90c0: 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
90d0: 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73  p, 0)) ){.    as
90e0: 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26  sert( db->flags&
90f0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
9100: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
9110: 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
9120: 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  al );.    break;
9130: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
9140: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
9150: 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ws flag is set i
9160: 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20  n sqlite3.flags 
9170: 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a  mask, then .  **
9180: 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   DML statements 
9190: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
91a0: 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65  de to return the
91b0: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
91c0: 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74  .  ** modified t
91d0: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
91e0: 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
91f0: 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a   that a VM that.
9200: 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61    ** opens a sta
9210: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
9220: 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68  on may invoke th
9230: 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a  is opcode..  **.
9240: 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69    ** In case thi
9250: 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61 74  s is such a stat
9260: 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79  ement, close any
9270: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
9280: 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e  action.  ** open
9290: 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62 65  ed by this VM be
92a0: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63  fore returning c
92b0: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73  ontrol to the us
92c0: 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20  er. This is to. 
92d0: 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20   ** ensure that 
92e0: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
92f0: 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79  ctions are alway
9300: 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76  s nested, not ov
9310: 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20  erlapping..  ** 
9320: 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74  If the open stat
9330: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
9340: 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20  n is not closed 
9350: 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75  here, then the u
9360: 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65  ser.  ** may ste
9370: 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61  p another VM tha
9380: 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20  t opens its own 
9390: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
93a0: 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a  ction. This.  **
93b0: 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65   may lead to ove
93c0: 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65  rlapping stateme
93d0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  nt transactions.
93e0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
93f0: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
9400: 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20  tion is never a 
9410: 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61  top-level transa
9420: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20  ction.  Hence.  
9430: 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  ** the RELEASE c
9440: 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65  all below can ne
9450: 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20  ver fail..  */. 
9460: 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61   assert( p->iSta
9470: 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  tement==0 || db-
9480: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
9490: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20  untRows );.  rc 
94a0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f  = sqlite3VdbeClo
94b0: 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53  seStatement(p, S
94c0: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
94d0: 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
94e0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b  c!=SQLITE_OK) ){
94f0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
9500: 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65  .  /* Invalidate
9510: 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63   all ephemeral c
9520: 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73  ursor row caches
9530: 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74   */.  p->cacheCt
9540: 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72  r = (p->cacheCtr
9550: 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d   + 2)|1;..  /* M
9560: 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73  ake sure the res
9570: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72  ults of the curr
9580: 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30  ent row are \000
9590: 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a   terminated.  **
95a0: 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73   and have an ass
95b0: 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65  igned type.  The
95c0: 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d   results are de-
95d0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73  ephemeralized as
95e0: 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66  .  ** a side eff
95f0: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d  ect..  */.  pMem
9600: 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74   = p->pResultSet
9610: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
9620: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
9630: 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20  pOp->p2; i++){. 
9640: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
9650: 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20  Valid(&pMem[i]) 
9660: 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  );.    Deephemer
9670: 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  alize(&pMem[i]);
9680: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d  .    assert( (pM
9690: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  em[i].flags & ME
96a0: 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20  M_Ephem)==0.    
96b0: 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d          || (pMem
96c0: 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d  [i].flags & (MEM
96d0: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
96e0: 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
96f0: 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69  3VdbeMemNulTermi
9700: 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  nate(&pMem[i]);.
9710: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
9720: 65 6d 53 74 6f 72 65 54 79 70 65 28 26 70 4d 65  emStoreType(&pMe
9730: 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  m[i]);.    REGIS
9740: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
9750: 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a  1+i, &pMem[i]);.
9760: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
9770: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
9780: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20  o no_mem;..  /* 
9790: 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f  Return SQLITE_RO
97a0: 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d  W.  */.  p->pc =
97b0: 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20   pc + 1;.  rc = 
97c0: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
97d0: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
97e0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
97f0: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
9800: 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  *.**.** Add the 
9810: 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72  text in register
9820: 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64   P1 onto the end
9830: 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a   of the text in.
9840: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61  ** register P2 a
9850: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9860: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9870: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
9880: 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65   the P1 or P2 te
9890: 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  xt are NULL then
98a0: 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50   store NULL in P
98b0: 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20  3..**.**   P3 = 
98c0: 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49  P2 || P1.**.** I
98d0: 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72  t is illegal for
98e0: 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65   P1 and P3 to be
98f0: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
9900: 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a  er. Sometimes,.*
9910: 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73  * if P3 is the s
9920: 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20  ame register as 
9930: 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  P2, the implemen
9940: 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a  tation is able.*
9950: 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d  * to avoid a mem
9960: 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  cpy()..*/.case O
9970: 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20  P_Concat: {     
9980: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
9990: 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c   TK_CONCAT, in1,
99a0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
99b0: 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49  i64 nByte;..  pI
99c0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
99d0: 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
99e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
99f0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
9a00: 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
9a10: 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20   pIn1!=pOut );. 
9a20: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
9a30: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
9a40: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
9a50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9a60: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
9a70: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
9a80: 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28   if( ExpandBlob(
9a90: 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42  pIn1) || ExpandB
9aa0: 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f  lob(pIn2) ) goto
9ab0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e   no_mem;.  Strin
9ac0: 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64  gify(pIn1, encod
9ad0: 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66  ing);.  Stringif
9ae0: 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn2, encoding
9af0: 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e  );.  nByte = pIn
9b00: 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a  1->n + pIn2->n;.
9b10: 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e    if( nByte>db->
9b20: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
9b30: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
9b40: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
9b50: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
9b60: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
9b70: 53 74 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Str);.  if( sqli
9b80: 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
9b90: 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b  Out, (int)nByte+
9ba0: 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29  2, pOut==pIn2) )
9bb0: 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
9bc0: 6d 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 75  m;.  }.  if( pOu
9bd0: 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d  t!=pIn2 ){.    m
9be0: 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70  emcpy(pOut->z, p
9bf0: 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29  In2->z, pIn2->n)
9c00: 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26  ;.  }.  memcpy(&
9c10: 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d  pOut->z[pIn2->n]
9c20: 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d  , pIn1->z, pIn1-
9c30: 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  >n);.  pOut->z[n
9c40: 42 79 74 65 5d 20 3d 20 30 3b 0a 20 20 70 4f 75  Byte] = 0;.  pOu
9c50: 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20  t->z[nByte+1] = 
9c60: 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  0;.  pOut->flags
9c70: 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
9c80: 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
9c90: 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  Byte;.  pOut->en
9ca0: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
9cb0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
9cc0: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
9cd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9ce0: 3a 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a  : Add P1 P2 P3 *
9cf0: 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65   *.**.** Add the
9d00: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
9d10: 65 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c  er P1 to the val
9d20: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9d30: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
9d40: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
9d50: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
9d60: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
9d70: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
9d80: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
9d90: 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79  Opcode: Multiply
9da0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9db0: 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20  .**.** Multiply 
9dc0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9dd0: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
9de0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9df0: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
9e00: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
9e10: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
9e20: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
9e30: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
9e40: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
9e50: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72  /* Opcode: Subtr
9e60: 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  act P1 P2 P3 * *
9e70: 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20  .**.** Subtract 
9e80: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9e90: 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68  ister P1 from th
9ea0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9eb0: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
9ec0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
9ed0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
9ee0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
9ef0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
9f00: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
9f10: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76  /./* Opcode: Div
9f20: 69 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ide P1 P2 P3 * *
9f30: 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68  .**.** Divide th
9f40: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9f50: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
9f60: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9f70: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
9f80: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
9f90: 67 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32  gister P3 (P3=P2
9fa0: 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c  /P1). If the val
9fb0: 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74  ue in .** regist
9fc0: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74  er P1 is zero, t
9fd0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
9fe0: 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65  s NULL. If eithe
9ff0: 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e  r input is .** N
a000: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
a010: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
a020: 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72  pcode: Remainder
a030: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
a040: 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20  .** Compute the 
a050: 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20  remainder after 
a060: 69 6e 74 65 67 65 72 20 64 69 76 69 73 69 6f 6e  integer division
a070: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   of the value in
a080: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
a090: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
a0a0: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
a0b0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
a0c0: 20 69 6e 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74   in P3. .** If t
a0d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
a0e0: 73 74 65 72 20 50 32 20 69 73 20 7a 65 72 6f 20  ster P2 is zero 
a0f0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
a100: 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  LL..** If either
a110: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
a120: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
a130: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
a140: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20 20  _Add:           
a150: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
a160: 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c  as TK_PLUS, in1,
a170: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
a180: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
a190: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a1a0: 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53  same as TK_MINUS
a1b0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
a1c0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74   */.case OP_Mult
a1d0: 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20  iply:           
a1e0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
a1f0: 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  _STAR, in1, in2,
a200: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
a210: 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20 20  _Divide:        
a220: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
a230: 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31  as TK_SLASH, in1
a240: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
a250: 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72  ase OP_Remainder
a260: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
a270: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c   same as TK_REM,
a280: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
a290: 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e  */.  char bIntin
a2a0: 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20  t;   /* Started 
a2b0: 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67  out as two integ
a2c0: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20  er operands */. 
a2d0: 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20   int flags;     
a2e0: 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d   /* Combined MEM
a2f0: 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f  _* flags from bo
a300: 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69  th inputs */.  i
a310: 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f  64 iA;         /
a320: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
a330: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
a340: 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20  */.  i64 iB;    
a350: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
a360: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
a370: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
a380: 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52  le rA;      /* R
a390: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  eal value of lef
a3a0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64  t operand */.  d
a3b0: 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f  ouble rB;      /
a3c0: 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20  * Real value of 
a3d0: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
a3e0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
a3f0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70  [pOp->p1];.  app
a400: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
a410: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  y(pIn1);.  pIn2 
a420: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a430: 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ;.  applyNumeric
a440: 41 66 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a  Affinity(pIn2);.
a450: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
a460: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
a470: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
a480: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
a490: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
a4a0: 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f  _Null)!=0 ) goto
a4b0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
a4c0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66  lt_is_null;.  if
a4d0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
a4e0: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
a4f0: 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74  EM_Int)==MEM_Int
a500: 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e   ){.    iA = pIn
a510: 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d  1->u.i;.    iB =
a520: 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn2->u.i;.    
a530: 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20  bIntint = 1;.   
a540: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
a550: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
a560: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
a570: 20 69 66 28 20 73 71 6c 69 74 65 33 41 64 64 49   if( sqlite3AddI
a580: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
a590: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
a5a0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
a5b0: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66  OP_Subtract:  if
a5c0: 28 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  ( sqlite3SubInt6
a5d0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
a5e0: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
a5f0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
a600: 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73  Multiply:  if( s
a610: 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26  qlite3MulInt64(&
a620: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
a630: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
a640: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
a650: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ide: {.        i
a660: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
a670: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a680: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
a690: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26     if( iA==-1 &&
a6a0: 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e   iB==SMALLEST_IN
a6b0: 54 36 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  T64 ) goto fp_ma
a6c0: 74 68 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f  th;.        iB /
a6d0: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
a6e0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
a6f0: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
a700: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
a710: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
a720: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
a730: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
a740: 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20  ==-1 ) iA = 1;. 
a750: 20 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b         iB %= iA;
a760: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
a770: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
a780: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42    pOut->u.i = iB
a790: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
a7a0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
a7b0: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  nt);.  }else{.  
a7c0: 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66    bIntint = 0;.f
a7d0: 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d  p_math:.    rA =
a7e0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
a7f0: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20  Value(pIn1);.   
a800: 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rB = sqlite3Vdb
a810: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29  eRealValue(pIn2)
a820: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
a830: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
a840: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
a850: 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41          rB += rA
a860: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
a870: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
a880: 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20  tract:    rB -= 
a890: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
a8a0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
a8b0: 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a  ultiply:    rB *
a8c0: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
a8d0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
a8e0: 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20  _Divide: {.     
a8f0: 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20     /* (double)0 
a900: 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54  In case of SQLIT
a910: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
a920: 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20  POINT... */.    
a930: 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75      if( rA==(dou
a940: 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69  ble)0 ) goto ari
a950: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a960: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
a970: 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20  rB /= rA;.      
a980: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
a990: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20  .      default: 
a9a0: 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20 28  {.        iA = (
a9b0: 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20  i64)rA;.        
a9c0: 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20  iB = (i64)rB;.  
a9d0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
a9e0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
a9f0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
aa00: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
aa10: 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20  ==-1 ) iA = 1;. 
aa20: 20 20 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75         rB = (dou
aa30: 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20  ble)(iB % iA);. 
aa40: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
aa50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64      }.    }.#ifd
aa60: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
aa70: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
aa80: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42    pOut->u.i = rB
aa90: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
aaa0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
aab0: 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69  nt);.#else.    i
aac0: 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  f( sqlite3IsNaN(
aad0: 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  rB) ){.      got
aae0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
aaf0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
ab00: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d   }.    pOut->r =
ab10: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
ab20: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
ab30: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
ab40: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65   (flags & MEM_Re
ab50: 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e 74 69  al)==0 && !bInti
ab60: 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
ab70: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
ab80: 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20  finity(pOut);.  
ab90: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
aba0: 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65   break;..arithme
abb0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
abc0: 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ll:.  sqlite3Vdb
abd0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
abe0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
abf0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65  * Opcode: CollSe
ac00: 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a  q P1 * * P4.**.*
ac10: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
ac20: 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73  r to a CollSeq s
ac30: 74 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e 65  truct. If the ne
ac40: 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65  xt call to a use
ac50: 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72  r function.** or
ac60: 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73   aggregate calls
ac70: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
ac80: 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63  ollSeq(), this c
ac90: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
aca0: 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74  e will.** be ret
acb0: 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75  urned. This is u
acc0: 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c 74  sed by the built
acd0: 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29  -in min(), max()
ace0: 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a   and nullif().**
acf0: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
ad00: 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20 7a  * If P1 is not z
ad10: 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ero, then it is 
ad20: 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
ad30: 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69 6e  a subsequent min
ad40: 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61  () or.** max() a
ad50: 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73 65  ggregate will se
ad60: 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63 75  t to 1 if the cu
ad70: 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74  rrent row is not
ad80: 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a   the minimum or.
ad90: 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65  ** maximum.  The
ada0: 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73 20   P1 register is 
adb0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 30  initialized to 0
adc0: 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
add0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
ade0: 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62  interface used b
adf0: 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
ae00: 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72  tion of the afor
ae10: 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74  ementioned funct
ae20: 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69  ions.** to retri
ae30: 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  eve the collatio
ae40: 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  n sequence set b
ae50: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
ae60: 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a   not available.*
ae70: 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79  * publicly, only
ae80: 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
ae90: 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75  ns defined in fu
aea0: 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nc.c..*/.case OP
aeb0: 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73  _CollSeq: {.  as
aec0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
aed0: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
aee0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
aef0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
af00: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
af10: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b  em[pOp->p1], 0);
af20: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
af30: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63  ./* Opcode: Func
af40: 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34  tion P1 P2 P3 P4
af50: 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65   P5.**.** Invoke
af60: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
af70: 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65   (P4 is a pointe
af80: 72 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20  r to a Function 
af90: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a  structure that.*
afa0: 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 75  * defines the fu
afb0: 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20  nction) with P5 
afc0: 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20  arguments taken 
afd0: 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
afe0: 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f   and.** successo
aff0: 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  rs.  The result 
b000: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
b010: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
b020: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67  ister P3..** Reg
b030: 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f  ister P3 must no
b040: 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  t be one of the 
b050: 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e  function inputs.
b060: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33  .**.** P1 is a 3
b070: 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e  2-bit bitmask in
b080: 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
b090: 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67   or not each arg
b0a0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a  ument to the .**
b0b0: 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65   function was de
b0c0: 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63  termined to be c
b0d0: 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69  onstant at compi
b0e0: 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20  le time. If the 
b0f0: 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
b100: 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74  t was constant t
b110: 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20  hen bit 0 of P1 
b120: 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73 20  is set. This is 
b130: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
b140: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74  e.** whether met
b150: 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65  a data associate
b160: 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66 75  d with a user fu
b170: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
b180: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c  using the.** sql
b190: 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61  ite3_set_auxdata
b1a0: 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73 61  () API may be sa
b1b0: 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e  fely retained un
b1c0: 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20  til the next.** 
b1d0: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
b1e0: 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  is opcode..**.**
b1f0: 20 53 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74   See also: AggSt
b200: 65 70 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a  ep and AggFinal.
b210: 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74  */.case OP_Funct
b220: 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a  ion: {.  int i;.
b230: 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73    Mem *pArg;.  s
b240: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
b250: 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
b260: 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69  lue **apVal;.  i
b270: 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  nt n;..  n = pOp
b280: 2d 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20  ->p5;.  apVal = 
b290: 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
b2a0: 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
b2b0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
b2c0: 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
b2d0: 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
b2e0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b2f0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
b300: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
b310: 4f 75 74 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  Out);..  assert(
b320: 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
b330: 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
b340: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a  <=p->nMem+1) );.
b350: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
b360: 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70  3<pOp->p2 || pOp
b370: 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20  ->p3>=pOp->p2+n 
b380: 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 61 4d 65  );.  pArg = &aMe
b390: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f  m[pOp->p2];.  fo
b3a0: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
b3b0: 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 73   pArg++){.    as
b3c0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
b3d0: 28 70 41 72 67 29 20 29 3b 0a 20 20 20 20 61 70  (pArg) );.    ap
b3e0: 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20  Val[i] = pArg;. 
b3f0: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
b400: 65 28 70 41 72 67 29 3b 0a 20 20 20 20 73 71 6c  e(pArg);.    sql
b410: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
b420: 54 79 70 65 28 70 41 72 67 29 3b 0a 20 20 20 20  Type(pArg);.    
b430: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
b440: 4f 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67 29 3b  Op->p2+i, pArg);
b450: 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
b460: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
b470: 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 63 74 78  FUNCDEF );.  ctx
b480: 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  .pFunc = pOp->p4
b490: 2e 70 46 75 6e 63 3b 0a 20 20 63 74 78 2e 73 2e  .pFunc;.  ctx.s.
b4a0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
b4b0: 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64  ;.  ctx.s.db = d
b4c0: 62 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20  b;.  ctx.s.xDel 
b4d0: 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61  = 0;.  ctx.s.zMa
b4e0: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e  lloc = 0;.  ctx.
b4f0: 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74 78 2e  iOp = pc;.  ctx.
b500: 70 56 64 62 65 20 3d 20 70 3b 0a 0a 20 20 2f 2a  pVdbe = p;..  /*
b510: 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c   The output cell
b520: 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76   may already hav
b530: 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63  e a buffer alloc
b540: 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20  ated. Move.  ** 
b550: 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 63  the pointer to c
b560: 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20  tx.s so in case 
b570: 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  the user-functio
b580: 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74  n can use.  ** t
b590: 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  he already alloc
b5a0: 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74  ated buffer inst
b5b0: 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e  ead of allocatin
b5c0: 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a  g a new one..  *
b5d0: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  /.  sqlite3VdbeM
b5e0: 65 6d 4d 6f 76 65 28 26 63 74 78 2e 73 2c 20 70  emMove(&ctx.s, p
b5f0: 4f 75 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  Out);.  MemSetTy
b600: 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20 4d  peFlag(&ctx.s, M
b610: 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74 78  EM_Null);..  ctx
b620: 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20  .isError = 0;.  
b630: 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66  if( ctx.pFunc->f
b640: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55  lags & SQLITE_FU
b650: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20  NC_NEEDCOLL ){. 
b660: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61     assert( pOp>a
b670: 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Op );.    assert
b680: 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65  ( pOp[-1].p4type
b690: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
b6a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
b6b0: 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
b6c0: 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74  ollSeq );.    ct
b6d0: 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31  x.pColl = pOp[-1
b6e0: 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a  ].p4.pColl;.  }.
b6f0: 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
b700: 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 28  = lastRowid;.  (
b710: 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e  *ctx.pFunc->xFun
b720: 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61  c)(&ctx, n, apVa
b730: 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34  l); /* IMP: R-24
b740: 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c  505-23230 */.  l
b750: 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c  astRowid = db->l
b760: 61 73 74 52 6f 77 69 64 3b 0a 0a 20 20 2f 2a 20  astRowid;..  /* 
b770: 49 66 20 61 6e 79 20 61 75 78 69 6c 69 61 72 79  If any auxiliary
b780: 20 64 61 74 61 20 66 75 6e 63 74 69 6f 6e 73 20   data functions 
b790: 68 61 76 65 20 62 65 65 6e 20 63 61 6c 6c 65 64  have been called
b7a0: 20 62 79 20 74 68 69 73 20 75 73 65 72 20 66 75   by this user fu
b7b0: 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d  nction,.  ** imm
b7c0: 65 64 69 61 74 65 6c 79 20 63 61 6c 6c 20 74 68  ediately call th
b7d0: 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f 72  e destructor for
b7e0: 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69 63 20   any non-static 
b7f0: 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20 20 73  values..  */.  s
b800: 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
b810: 41 75 78 44 61 74 61 28 70 2c 20 70 63 2c 20 70  AuxData(p, pc, p
b820: 4f 70 2d 3e 70 31 29 3b 0a 0a 20 20 69 66 28 20  Op->p1);..  if( 
b830: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
b840: 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20   ){.    /* Even 
b850: 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28  though a malloc(
b860: 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68  ) has failed, th
b870: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
b880: 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75   of the.    ** u
b890: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79  ser function may
b8a0: 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20   have called an 
b8b0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58  sqlite3_result_X
b8c0: 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  XX() function.  
b8d0: 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61    ** to return a
b8e0: 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c   value. The foll
b8f0: 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61  owing call relea
b900: 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65  ses any resource
b910: 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61  s.    ** associa
b920: 74 65 64 20 77 69 74 68 20 73 75 63 68 20 61 20  ted with such a 
b930: 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  value..    */.  
b940: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
b950: 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b  Release(&ctx.s);
b960: 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
b970: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
b980: 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  he function retu
b990: 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74  rned an error, t
b9a0: 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f  hrow an exceptio
b9b0: 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69  n */.  if( ctx.i
b9c0: 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71  sError ){.    sq
b9d0: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
b9e0: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
b9f0: 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
ba00: 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29  lue_text(&ctx.s)
ba10: 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e  );.    rc = ctx.
ba20: 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  isError;.  }..  
ba30: 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75  /* Copy the resu
ba40: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
ba50: 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  on into register
ba60: 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33   P3 */.  sqlite3
ba70: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
ba80: 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64  ng(&ctx.s, encod
ba90: 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ing);.  sqlite3V
baa0: 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c  dbeMemMove(pOut,
bab0: 20 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20   &ctx.s);.  if( 
bac0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
bad0: 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20  oBig(pOut) ){.  
bae0: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
baf0: 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f 2a 20    }..#if 0.  /* 
bb00: 54 68 65 20 61 70 70 2d 64 65 66 69 6e 65 64 20  The app-defined 
bb10: 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 64 6f 6e  function has don
bb20: 65 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74  e something that
bb30: 20 61 73 20 63 61 75 73 65 64 20 74 68 69 73 0a   as caused this.
bb40: 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 74    ** statement t
bb50: 6f 20 65 78 70 69 72 65 2e 20 20 28 50 65 72 68  o expire.  (Perh
bb60: 61 70 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  aps the function
bb70: 20 63 61 6c 6c 65 64 20 73 71 6c 69 74 65 33 5f   called sqlite3_
bb80: 65 78 65 63 28 29 0a 20 20 2a 2a 20 77 69 74 68  exec().  ** with
bb90: 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
bba0: 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20 2a 2f  statement.).  */
bbb0: 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65  .  if( p->expire
bbc0: 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  d ) rc = SQLITE_
bbd0: 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a 0a 20  ABORT;.#endif.. 
bbe0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
bbf0: 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a  pOp->p3, pOut);.
bc00: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
bc10: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
bc20: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
bc30: 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32  de: BitAnd P1 P2
bc40: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61   P3 * *.**.** Ta
bc50: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
bc60: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
bc70: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
bc80: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
bc90: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
bca0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
bcb0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
bcc0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
bcd0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
bce0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
bcf0: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
bd00: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
bd10: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
bd20: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
bd30: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
bd40: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
bd50: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
bd60: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
bd70: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
bd80: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
bd90: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
bda0: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
bdb0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
bdc0: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
bdd0: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
bde0: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
bdf0: 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20   left by the.** 
be00: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
be10: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
be20: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
be30: 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65  ter P1..** Store
be40: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
be50: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
be60: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
be70: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
be80: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
be90: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52  * Opcode: ShiftR
bea0: 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20  ight P1 P2 P3 * 
beb0: 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  *.**.** Shift th
bec0: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
bed0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
bee0: 6f 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74  o the right by t
bef0: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
bf00: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
bf10: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
bf20: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
bf30: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
bf40: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
bf50: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
bf60: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
bf70: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
bf80: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
bf90: 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  And:            
bfa0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
bfb0: 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20  TK_BITAND, in1, 
bfc0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
bfd0: 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20  e OP_BitOr:     
bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bff0: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52  same as TK_BITOR
c000: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
c010: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
c020: 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20  tLeft:          
c030: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c040: 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_LSHIFT, in1, i
c050: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
c060: 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20   OP_ShiftRight: 
c070: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
c080: 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54  ame as TK_RSHIFT
c090: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
c0a0: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20   */.  i64 iA;.  
c0b0: 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42  u64 uA;.  i64 iB
c0c0: 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49  ;.  u8 op;..  pI
c0d0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c0e0: 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
c0f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
c100: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
c110: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p3];.  if( (pI
c120: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
c130: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
c140: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
c150: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
c160: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
c170: 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71  k;.  }.  iA = sq
c180: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
c190: 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20  e(pIn2);.  iB = 
c1a0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
c1b0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20  lue(pIn1);.  op 
c1c0: 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
c1d0: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41   if( op==OP_BitA
c1e0: 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20  nd ){.    iA &= 
c1f0: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
c200: 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a  op==OP_BitOr ){.
c210: 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20      iA |= iB;.  
c220: 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20  }else if( iB!=0 
c230: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  ){.    assert( o
c240: 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74  p==OP_ShiftRight
c250: 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74   || op==OP_Shift
c260: 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20  Left );..    /* 
c270: 49 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61  If shifting by a
c280: 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74   negative amount
c290: 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f  , shift in the o
c2a0: 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a  ther direction *
c2b0: 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29  /.    if( iB<0 )
c2c0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
c2d0: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f  OP_ShiftRight==O
c2e0: 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b  P_ShiftLeft+1 );
c2f0: 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50  .      op = 2*OP
c300: 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d  _ShiftLeft + 1 -
c310: 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20   op;.      iB = 
c320: 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a  iB>(-64) ? -iB :
c330: 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   64;.    }..    
c340: 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20  if( iB>=64 ){.  
c350: 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20      iA = (iA>=0 
c360: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
c370: 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20  eft) ? 0 : -1;. 
c380: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
c390: 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c  memcpy(&uA, &iA,
c3a0: 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20   sizeof(uA));.  
c3b0: 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53      if( op==OP_S
c3c0: 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20  hiftLeft ){.    
c3d0: 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20      uA <<= iB;. 
c3e0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
c3f0: 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20      uA >>= iB;. 
c400: 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65         /* Sign-e
c410: 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74  xtend on a right
c420: 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61   shift of a nega
c430: 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  tive number */. 
c440: 20 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20         if( iA<0 
c450: 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29  ) uA |= ((((u64)
c460: 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0xffffffff)<<32)
c470: 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20  |0xffffffff) << 
c480: 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d  (64-iB);.      }
c490: 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69  .      memcpy(&i
c4a0: 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69  A, &uA, sizeof(i
c4b0: 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  A));.    }.  }. 
c4c0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b   pOut->u.i = iA;
c4d0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
c4e0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
c4f0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
c500: 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20   Opcode: AddImm 
c510: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
c520: 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  .** Add the cons
c530: 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76  tant P2 to the v
c540: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c550: 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75   P1..** The resu
c560: 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20  lt is always an 
c570: 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  integer..**.** T
c580: 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69  o force any regi
c590: 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e  ster to be an in
c5a0: 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20  teger, just add 
c5b0: 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64  0..*/.case OP_Ad
c5c0: 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  dImm: {         
c5d0: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
c5e0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
c5f0: 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p1];.  memAbout
c600: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
c610: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
c620: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
c630: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  n1);.  pIn1->u.i
c640: 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62   += pOp->p2;.  b
c650: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
c660: 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31  de: MustBeInt P1
c670: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a   P2 * * *.** .**
c680: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
c690: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
c6a0: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
c6b0: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
c6c0: 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20  ** in P1 is not 
c6d0: 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63  an integer and c
c6e0: 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
c6f0: 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
c700: 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61  er.** without da
c710: 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75  ta loss, then ju
c720: 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
c730: 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d  o P2, or if P2==
c740: 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51  0.** raise an SQ
c750: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78  LITE_MISMATCH ex
c760: 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ception..*/.case
c770: 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b   OP_MustBeInt: {
c780: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
c790: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
c7a0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c7b0: 70 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66 66 69  p1];.  applyAffi
c7c0: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
c7d0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65  E_AFF_NUMERIC, e
c7e0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20  ncoding);.  if( 
c7f0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
c800: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
c810: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
c820: 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
c830: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
c840: 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
c850: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
c860: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
c870: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
c880: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
c890: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
c8a0: 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e  lag(pIn1, MEM_In
c8b0: 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
c8c0: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
c8d0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
c8e0: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
c8f0: 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50  : RealAffinity P
c900: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
c910: 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68  If register P1 h
c920: 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20  olds an integer 
c930: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
c940: 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a  real value..**.*
c950: 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
c960: 20 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61   used when extra
c970: 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  cting informatio
c980: 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20  n from a column 
c990: 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c  that.** has REAL
c9a0: 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68   affinity.  Such
c9b0: 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d   column values m
c9c0: 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72  ay still be stor
c9d0: 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72  ed as.** integer
c9e0: 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66  s, for space eff
c9f0: 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74  iciency, but aft
ca00: 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65  er extraction we
ca10: 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f   want them.** to
ca20: 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61   have only a rea
ca30: 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65  l value..*/.case
ca40: 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79   OP_RealAffinity
ca50: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
ca60: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
ca70: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
ca80: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
ca90: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
caa0: 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Int ){.    sqlit
cab0: 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79  e3VdbeMemRealify
cac0: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
cad0: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
cae0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
caf0: 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64  IT_CAST./* Opcod
cb00: 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a  e: ToText P1 * *
cb10: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
cb20: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
cb30: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
cb40: 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20  text..** If the 
cb50: 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63  value is numeric
cb60: 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  , convert it to 
cb70: 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74  a string using t
cb80: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
cb90: 20 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42   of printf().  B
cba0: 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20 75  lob values are u
cbb0: 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20  nchanged and.** 
cbc0: 61 72 65 20 61 66 74 65 72 77 61 72 64 73 20 73  are afterwards s
cbd0: 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65  imply interprete
cbe0: 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a  d as text..**.**
cbf0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
cc00: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
cc10: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
cc20: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
cc30: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78  */.case OP_ToTex
cc40: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
cc50: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cc60: 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31   TK_TO_TEXT, in1
cc70: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
cc80: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
cc90: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
cca0: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  p, pIn1);.  if( 
ccb0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
ccc0: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a  M_Null ) break;.
ccd0: 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74    assert( MEM_St
cce0: 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29  r==(MEM_Blob>>3)
ccf0: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
cd00: 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  s |= (pIn1->flag
cd10: 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a  s&MEM_Blob)>>3;.
cd20: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
cd30: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
cd40: 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29  _TEXT, encoding)
cd50: 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
cd60: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73  lob(pIn1);.  ass
cd70: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
cd80: 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62   & MEM_Str || db
cd90: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
cda0: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
cdb0: 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  &= ~(MEM_Int|MEM
cdc0: 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d  _Real|MEM_Blob|M
cdd0: 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41  EM_Zero);.  UPDA
cde0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
cdf0: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
ce00: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  }../* Opcode: To
ce10: 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Blob P1 * * * *.
ce20: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
ce30: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
ce40: 72 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f  r P1 to be a BLO
ce50: 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  B..** If the val
ce60: 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63  ue is numeric, c
ce70: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73  onvert it to a s
ce80: 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20  tring first..** 
ce90: 53 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70  Strings are simp
cea0: 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74 65 64  ly reinterpreted
ceb0: 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e   as blobs with n
cec0: 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74  o change.** to t
ced0: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61  he underlying da
cee0: 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  ta..**.** A NULL
cef0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
cf00: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
cf10: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
cf20: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
cf30: 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20   OP_ToBlob: {   
cf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cf50: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
cf60: 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  BLOB, in1 */.  p
cf70: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
cf80: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
cf90: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
cfa0: 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66  ll ) break;.  if
cfb0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
cfc0: 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b   MEM_Blob)==0 ){
cfd0: 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
cfe0: 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f  ty(pIn1, SQLITE_
cff0: 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69  AFF_TEXT, encodi
d000: 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ng);.    assert(
d010: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
d020: 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61  EM_Str || db->ma
d030: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
d040: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d050: 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29  (pIn1, MEM_Blob)
d060: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
d070: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28  In1->flags &= ~(
d080: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45  MEM_TypeMask&~ME
d090: 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55  M_Blob);.  }.  U
d0a0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
d0b0: 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61  ZE(pIn1);.  brea
d0c0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
d0d0: 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20   ToNumeric P1 * 
d0e0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
d0f0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
d100: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
d110: 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72   numeric (either
d120: 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f   an.** integer o
d130: 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  r a floating-poi
d140: 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49  nt number.).** I
d150: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  f the value is t
d160: 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ext or blob, try
d170: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
d180: 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a  o an using the.*
d190: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
d1a0: 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29  atoi() or atof()
d1b0: 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20   and store 0 if 
d1c0: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
d1d0: 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62  on .** is possib
d1e0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
d1f0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
d200: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
d210: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
d220: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
d230: 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b   OP_ToNumeric: {
d240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d250: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d260: 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20  TO_NUMERIC, in1 
d270: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
d280: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71  m[pOp->p1];.  sq
d290: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65  lite3VdbeMemNume
d2a0: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 62 72  rify(pIn1);.  br
d2b0: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
d2c0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
d2d0: 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
d2e0: 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20   ToInt P1 * * * 
d2f0: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
d300: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
d310: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20  ter P1 to be an 
d320: 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20  integer.  If.** 
d330: 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72  The value is cur
d340: 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75  rently a real nu
d350: 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66  mber, drop its f
d360: 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a  ractional part..
d370: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
d380: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
d390: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
d3a0: 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
d3b0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
d3c0: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
d3d0: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69  () and store 0 i
d3e0: 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72  f no such conver
d3f0: 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65  sion is possible
d400: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
d410: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
d420: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
d430: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
d440: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
d450: 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20  P_ToInt: {      
d460: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
d470: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54  ame as TK_TO_INT
d480: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
d490: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
d4a0: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
d4b0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
d4c0: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
d4d0: 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
d4e0: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
d4f0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21   break;.}..#if !
d500: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
d510: 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21 64 65  MIT_CAST) && !de
d520: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
d530: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
d540: 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52  )./* Opcode: ToR
d550: 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  eal P1 * * * *.*
d560: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
d570: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d580: 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61   P1 to be a floa
d590: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
d5a0: 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c  r..** If The val
d5b0: 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ue is currently 
d5c0: 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76  an integer, conv
d5d0: 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68  ert it..** If th
d5e0: 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20  e value is text 
d5f0: 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20  or blob, try to 
d600: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e  convert it to an
d610: 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74   integer using t
d620: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
d630: 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73   of atoi() and s
d640: 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73  tore 0.0 if no s
d650: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
d660: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
d670: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
d680: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
d690: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
d6a0: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
d6b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65  .*/.case OP_ToRe
d6c0: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
d6d0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d6e0: 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e  s TK_TO_REAL, in
d6f0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
d700: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
d710: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
d720: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28  (p, pIn1);.  if(
d730: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
d740: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
d750: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
d760: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
d770: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
d780: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
d790: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ed(SQLITE_OMIT_C
d7a0: 41 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  AST) && !defined
d7b0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f  (SQLITE_OMIT_FLO
d7c0: 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a  ATING_POINT) */.
d7d0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50  ./* Opcode: Lt P
d7e0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
d7f0: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
d800: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
d810: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
d820: 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31  f reg(P3)<reg(P1
d830: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
d840: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a  o address P2.  .
d850: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
d860: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
d870: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  it of P5 is set 
d880: 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50  and either reg(P
d890: 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29  1) or.** reg(P3)
d8a0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
d8b0: 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66  ke the jump.  If
d8c0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
d8d0: 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69  IFNULL .** bit i
d8e0: 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c  s clear then fal
d8f0: 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74  l through if eit
d900: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
d910: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ULL..**.** The S
d920: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70  QLITE_AFF_MASK p
d930: 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73  ortion of P5 mus
d940: 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79  t be an affinity
d950: 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20   character -.** 
d960: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
d970: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
d980: 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  GER, and so fort
d990: 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73  h. An attempt is
d9a0: 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65   made .** to coe
d9b0: 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rce both inputs 
d9c0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69  according to thi
d9d0: 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72  s affinity befor
d9e0: 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  e the.** compari
d9f0: 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20  son is made. If 
da00: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  the SQLITE_AFF_M
da10: 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65  ASK is 0x00, the
da20: 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66  n numeric.** aff
da30: 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e  inity is used. N
da40: 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66  ote that the aff
da50: 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e  inity conversion
da60: 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20  s are stored.** 
da70: 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e  back into the in
da80: 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31  put registers P1
da90: 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69   and P3.  So thi
daa0: 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75  s opcode can cau
dab0: 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74  se.** persistent
dac0: 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69   changes to regi
dad0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
dae0: 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20  .**.** Once any 
daf0: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65  conversions have
db00: 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e   taken place, an
db10: 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20  d neither value 
db20: 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65  is NULL, .** the
db30: 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70   values are comp
db40: 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61  ared. If both va
db50: 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74  lues are blobs t
db60: 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a  hen memcmp() is.
db70: 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  ** used to deter
db80: 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73  mine the results
db90: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
dba0: 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  on.  If both val
dbb0: 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c  ues.** are text,
dbc0: 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70   then the approp
dbd0: 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20  riate collating 
dbe0: 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69  function specifi
dbf0: 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20  ed in.** P4 is  
dc00: 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63  used to do the c
dc10: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50  omparison.  If P
dc20: 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  4 is not specifi
dc30: 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d  ed then.** memcm
dc40: 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63  p() is used to c
dc50: 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69  ompare text stri
dc60: 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  ng.  If both val
dc70: 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72  ues are.** numer
dc80: 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72  ic, then a numer
dc90: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ic comparison is
dca0: 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77   used. If the tw
dcb0: 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  o values.** are 
dcc0: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70  of different typ
dcd0: 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73  es, then numbers
dce0: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
dcf0: 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72  less than.** str
dd00: 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73  ings and strings
dd10: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
dd20: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
dd30: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
dd40: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74  LITE_STOREP2 bit
dd50: 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
dd60: 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e  hen do not jump.
dd70: 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74    Instead,.** st
dd80: 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65  ore a boolean re
dd90: 73 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20  sult (either 0, 
dda0: 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69  or 1, or NULL) i
ddb0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
ddc0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
ddd0: 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69 73  TE_NULLEQ bit is
dde0: 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e   set in P5, then
ddf0: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
de00: 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65   considered.** e
de10: 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74  qual to one anot
de20: 68 65 72 2c 20 70 72 6f 76 69 64 65 64 20 74 68  her, provided th
de30: 61 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 68  at they do not h
de40: 61 76 65 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c  ave their MEM_Cl
de50: 65 61 72 65 64 0a 2a 2a 20 62 69 74 20 73 65 74  eared.** bit set
de60: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
de70: 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ne P1 P2 P3 P4 P
de80: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
de90: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
dea0: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
deb0: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
dec0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
ded0: 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72  he operands in r
dee0: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
def0: 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  P3 are not equal
df00: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
df10: 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69  code for.** addi
df20: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
df30: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c  on..**.** If SQL
df40: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
df50: 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65  t in P5 then the
df60: 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61   result of compa
df70: 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  rison is always 
df80: 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f  either.** true o
df90: 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e  r false and is n
dfa0: 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62  ever NULL.  If b
dfb0: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
dfc0: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
dfd0: 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70  esult.** of comp
dfe0: 61 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e  arison is false.
dff0: 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72    If either oper
e000: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
e010: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
e020: 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68  rue..** If neith
e030: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e040: 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  LL the result is
e050: 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20   the same as it 
e060: 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74  would be if.** t
e070: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
e080: 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74   flag were omitt
e090: 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f  ed from P5..*/./
e0a0: 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20  * Opcode: Eq P1 
e0b0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
e0c0: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
e0d0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
e0e0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
e0f0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
e100: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
e110: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
e120: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
e130: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
e140: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e150: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e160: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
e170: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
e180: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
e190: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
e1a0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
e1b0: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
e1c0: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
e1d0: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
e1e0: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
e1f0: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
e200: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
e210: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
e220: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
e230: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e240: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e250: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
e260: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
e270: 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75  is NULL the resu
e280: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
e290: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
e2a0: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
e2b0: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
e2c0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
e2d0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
e2e0: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
e2f0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
e300: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
e310: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
e320: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
e330: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
e340: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
e350: 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73  ister P3 is less
e360: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
e370: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  o the content of
e380: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
e390: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
e3a0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
e3b0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
e3c0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74  */./* Opcode: Gt
e3d0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
e3e0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
e3f0: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
e400: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
e410: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
e420: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
e430: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
e440: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
e450: 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74  er than the cont
e460: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
e470: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
e480: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
e490: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
e4a0: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
e4b0: 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20  de: Ge P1 P2 P3 
e4c0: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
e4d0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
e4e0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
e4f0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
e500: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
e510: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
e520: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
e530: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
e540: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
e550: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
e560: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
e570: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
e580: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
e590: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
e5a0: 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20  OP_Eq:          
e5b0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
e5c0: 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_EQ, jump, in1
e5d0: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
e5e0: 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Ne:            
e5f0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
e600: 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _NE, jump, in1, 
e610: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
e620: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
e630: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
e640: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
e650: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a  3 */.case OP_Le:
e660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e670: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c  * same as TK_LE,
e680: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
e690: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20  */.case OP_Gt:  
e6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e6b0: 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a  same as TK_GT, j
e6c0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
e6d0: 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20  .case OP_Ge: {  
e6e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
e6f0: 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d  me as TK_GE, jum
e700: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
e710: 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
e720: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
e730: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
e740: 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74   of pIn1 against
e750: 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20   pIn3 */.  char 
e760: 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f  affinity;      /
e770: 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73  * Affinity to us
e780: 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e  e for comparison
e790: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31   */.  u16 flags1
e7a0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
e7b0: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
e7c0: 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67  ue of pIn1->flag
e7d0: 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  s */.  u16 flags
e7e0: 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  3;         /* Co
e7f0: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
e800: 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61  lue of pIn3->fla
e810: 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  gs */..  pIn1 = 
e820: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
e830: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
e840: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
e850: 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b  1 = pIn1->flags;
e860: 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33  .  flags3 = pIn3
e870: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
e880: 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29  flags1 | flags3)
e890: 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20  &MEM_Null ){.   
e8a0: 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20   /* One or both 
e8b0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
e8c0: 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70  L */.    if( pOp
e8d0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55  ->p5 & SQLITE_NU
e8e0: 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a  LLEQ ){.      /*
e8f0: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
e900: 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20  Q is set (which 
e910: 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e  will only happen
e920: 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72   if the operator
e930: 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f   is.      ** OP_
e940: 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65  Eq or OP_Ne) the
e950: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
e960: 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67  or not depending
e970: 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20   on whether.    
e980: 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68    ** or not both
e990: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75   operands are nu
e9a0: 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ll..      */.   
e9b0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
e9c0: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c  opcode==OP_Eq ||
e9d0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
e9e0: 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73  _Ne );.      ass
e9f0: 65 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d  ert( (flags1 & M
ea00: 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29  EM_Cleared)==0 )
ea10: 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  ;.      if( (fla
ea20: 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs1&MEM_Null)!=0
ea30: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
ea40: 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s3&MEM_Null)!=0.
ea50: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
ea60: 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  3&MEM_Cleared)==
ea70: 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
ea80: 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20     res = 0;  /* 
ea90: 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75 61  Results are equa
eaa0: 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  l */.      }else
eab0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
eac0: 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61  1;  /* Results a
ead0: 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a  re not equal */.
eae0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
eaf0: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  e{.      /* SQLI
eb00: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65  TE_NULLEQ is cle
eb10: 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20  ar and at least 
eb20: 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  one operand is N
eb30: 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ULL,.      ** th
eb40: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
eb50: 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20   always NULL..  
eb60: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
eb70: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
eb80: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
eb90: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
eba0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
ebb0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
ebc0: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
ebd0: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
ebe0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
ebf0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
ec00: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
ec10: 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  l);.        REGI
ec20: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
ec30: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
ec40: 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
ec50: 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
ec60: 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20  IFNULL ){.      
ec70: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
ec80: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
ec90: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
eca0: 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69  else{.    /* Nei
ecb0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
ecc0: 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70  NULL.  Do a comp
ecd0: 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61  arison. */.    a
ece0: 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
ecf0: 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
ed00: 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66  ASK;.    if( aff
ed10: 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61  inity ){.      a
ed20: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
ed30: 31 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63  1, affinity, enc
ed40: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 70  oding);.      ap
ed50: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33  plyAffinity(pIn3
ed60: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f  , affinity, enco
ed70: 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28  ding);.      if(
ed80: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
ed90: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
eda0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65  .    }..    asse
edb0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
edc0: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70  =P4_COLLSEQ || p
edd0: 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20  Op->p4.pColl==0 
ede0: 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  );.    ExpandBlo
edf0: 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 45 78 70  b(pIn1);.    Exp
ee00: 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20  andBlob(pIn3);. 
ee10: 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
ee20: 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c  MemCompare(pIn3,
ee30: 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70   pIn1, pOp->p4.p
ee40: 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69  Coll);.  }.  swi
ee50: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
ee60: 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f   ){.    case OP_
ee70: 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Eq:    res = res
ee80: 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  ==0;     break;.
ee90: 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20      case OP_Ne: 
eea0: 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b     res = res!=0;
eeb0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
eec0: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72  case OP_Lt:    r
eed0: 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20  es = res<0;     
eee0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
eef0: 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d   OP_Le:    res =
ef00: 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65   res<=0;     bre
ef10: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
ef20: 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Gt:    res = res
ef30: 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  >0;      break;.
ef40: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
ef50: 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b     res = res>=0;
ef60: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
ef70: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
ef80: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
ef90: 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61  ){.    pOut = &a
efa0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
efb0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
efc0: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
efd0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
efe0: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
eff0: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
f000: 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45  res;.    REGISTE
f010: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
f020: 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20   pOut);.  }else 
f030: 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
f040: 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
f050: 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e   }..  /* Undo an
f060: 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62  y changes made b
f070: 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  y applyAffinity(
f080: 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72  ) to the input r
f090: 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70  egisters. */.  p
f0a0: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49  In1->flags = (pI
f0b0: 6e 31 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54  n1->flags&~MEM_T
f0c0: 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
f0d0: 73 31 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  s1&MEM_TypeMask)
f0e0: 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  ;.  pIn3->flags 
f0f0: 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 7e  = (pIn3->flags&~
f100: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20  MEM_TypeMask) | 
f110: 28 66 6c 61 67 73 33 26 4d 45 4d 5f 54 79 70 65  (flags3&MEM_Type
f120: 4d 61 73 6b 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Mask);.  break;.
f130: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65  }../* Opcode: Pe
f140: 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20  rmutation * * * 
f150: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74  P4 *.**.** Set t
f160: 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75  he permutation u
f170: 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f  sed by the OP_Co
f180: 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74  mpare operator t
f190: 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a  o be the array.*
f1a0: 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e  * of integers in
f1b0: 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70   P4..**.** The p
f1c0: 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e  ermutation is on
f1d0: 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74  ly valid until t
f1e0: 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61  he next OP_Compa
f1f0: 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74  re that has.** t
f200: 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
f210: 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e  E bit set in P5.
f220: 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f   Typically the O
f230: 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68  P_Permutation sh
f240: 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69  ould .** occur i
f250: 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72  mmediately prior
f260: 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   to the OP_Compa
f270: 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  re..*/.case OP_P
f280: 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20  ermutation: {.  
f290: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
f2a0: 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59  ype==P4_INTARRAY
f2b0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
f2c0: 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50  p->p4.ai );.  aP
f2d0: 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34  ermute = pOp->p4
f2e0: 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .ai;.  break;.}.
f2f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70  ./* Opcode: Comp
f300: 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20  are P1 P2 P3 P4 
f310: 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  P5.**.** Compare
f320: 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20   two vectors of 
f330: 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67  registers in reg
f340: 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d  (P1)..reg(P1+P3-
f350: 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a  1) (call this.**
f360: 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64   vector "A") and
f370: 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67   in reg(P2)..reg
f380: 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e  (P2+P3-1) ("B").
f390: 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c    Save the resul
f3a0: 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  t of.** the comp
f3b0: 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62  arison for use b
f3c0: 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75  y the next OP_Ju
f3d0: 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a  mp instruct..**.
f3e0: 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
f3f0: 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
f400: 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68  bit set, then th
f410: 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61  e order of compa
f420: 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65  rison is.** dete
f430: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f  rmined by the mo
f440: 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72  st recent OP_Per
f450: 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f  mutation operato
f460: 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50  r.  If the.** OP
f470: 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
f480: 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
f490: 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d  register are com
f4a0: 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74  pared in sequent
f4b0: 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a  ial.** order..**
f4c0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49  .** P4 is a KeyI
f4d0: 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68  nfo structure th
f4e0: 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61  at defines colla
f4f0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61  ting sequences a
f500: 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72  nd sort.** order
f510: 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72  s for the compar
f520: 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75  ison.  The permu
f530: 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74  tation applies t
f540: 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f  o registers.** o
f550: 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  nly.  The KeyInf
f560: 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75  o elements are u
f570: 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79  sed sequentially
f580: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70  ..**.** The comp
f590: 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74  arison is a sort
f5a0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20   comparison, so 
f5b0: 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71  NULLs compare eq
f5c0: 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72  ual,.** NULLs ar
f5d0: 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62  e less than numb
f5e0: 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65  ers, numbers are
f5f0: 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e   less than strin
f600: 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e  gs,.** and strin
f610: 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  gs are less than
f620: 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20   blobs..*/.case 
f630: 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  OP_Compare: {.  
f640: 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
f650: 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20    int p1;.  int 
f660: 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49  p2;.  const KeyI
f670: 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
f680: 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c   int idx;.  Coll
f690: 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f  Seq *pColl;    /
f6a0: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
f6b0: 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74  ence to use on t
f6c0: 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e  his term */.  in
f6d0: 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20  t bRev;         
f6e0: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53   /* True for DES
f6f0: 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64  CENDING sort ord
f700: 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f  er */..  if( (pO
f710: 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  p->p5 & OPFLAG_P
f720: 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65  ERMUTE)==0 ) aPe
f730: 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d  rmute = 0;.  n =
f740: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79   pOp->p3;.  pKey
f750: 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
f760: 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
f770: 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65  t( n>0 );.  asse
f780: 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20  rt( pKeyInfo!=0 
f790: 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  );.  p1 = pOp->p
f7a0: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
f7b0: 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  2;.#if SQLITE_DE
f7c0: 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75  BUG.  if( aPermu
f7d0: 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c  te ){.    int k,
f7e0: 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72   mx = 0;.    for
f7f0: 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20  (k=0; k<n; k++) 
f800: 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e  if( aPermute[k]>
f810: 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75  mx ) mx = aPermu
f820: 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72  te[k];.    asser
f830: 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78  t( p1>0 && p1+mx
f840: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20  <=p->nMem+1 );. 
f850: 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
f860: 26 26 20 70 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65  && p2+mx<=p->nMe
f870: 6d 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  m+1 );.  }else{.
f880: 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
f890: 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65   && p1+n<=p->nMe
f8a0: 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  m+1 );.    asser
f8b0: 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c  t( p2>0 && p2+n<
f8c0: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
f8d0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
f8e0: 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f  TE_DEBUG */.  fo
f8f0: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
f900: 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65 72  {.    idx = aPer
f910: 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b  mute ? aPermute[
f920: 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65  i] : i;.    asse
f930: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
f940: 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b  aMem[p1+idx]) );
f950: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
f960: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32  IsValid(&aMem[p2
f970: 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45  +idx]) );.    RE
f980: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b  GISTER_TRACE(p1+
f990: 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64  idx, &aMem[p1+id
f9a0: 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  x]);.    REGISTE
f9b0: 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20  R_TRACE(p2+idx, 
f9c0: 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a  &aMem[p2+idx]);.
f9d0: 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b      assert( i<pK
f9e0: 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29  eyInfo->nField )
f9f0: 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
fa00: 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
fa10: 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
fa20: 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
fa30: 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
fa40: 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
fa50: 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b  ompare(&aMem[p1+
fa60: 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  idx], &aMem[p2+i
fa70: 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20  dx], pColl);.   
fa80: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b   if( iCompare ){
fa90: 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20  .      if( bRev 
faa0: 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43  ) iCompare = -iC
fab0: 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72  ompare;.      br
fac0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
fad0: 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
fae0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
faf0: 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32  code: Jump P1 P2
fb00: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
fb10: 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  mp to the instru
fb20: 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73  ction at address
fb30: 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64   P1, P2, or P3 d
fb40: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
fb50: 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f  her.** in the mo
fb60: 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d  st recent OP_Com
fb70: 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  pare instruction
fb80: 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77   the P1 vector w
fb90: 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  as less than.** 
fba0: 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
fbb0: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32  ater than the P2
fbc0: 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74   vector, respect
fbd0: 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ively..*/.case O
fbe0: 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20  P_Jump: {       
fbf0: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
fc00: 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c  .  if( iCompare<
fc10: 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
fc20: 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p1 - 1;.  }el
fc30: 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d  se if( iCompare=
fc40: 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
fc50: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
fc60: 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  lse{.    pc = pO
fc70: 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p3 - 1;.  }. 
fc80: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
fc90: 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20  code: And P1 P2 
fca0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
fcb0: 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e  e the logical AN
fcc0: 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
fcd0: 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
fce0: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72  and P2 and.** wr
fcf0: 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ite the result i
fd00: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
fd10: 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
fd20: 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28   P1 or P2 is 0 (
fd30: 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20  false) then the 
fd40: 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e  result is 0 even
fd50: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72   if.** the other
fd60: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
fd70: 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65   A NULL and true
fd80: 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69   or two NULLs gi
fd90: 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74  ve.** a NULL out
fda0: 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  put..*/./* Opcod
fdb0: 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a  e: Or P1 P2 P3 *
fdc0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68   *.**.** Take th
fdd0: 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20  e logical OR of 
fde0: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
fdf0: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
fe00: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
fe10: 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69  e answer in regi
fe20: 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
fe30: 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50  f either P1 or P
fe40: 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72  2 is nonzero (tr
fe50: 75 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  ue) then the res
fe60: 75 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a  ult is 1 (true).
fe70: 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f  ** even if the o
fe80: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
fe90: 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20  LL.  A NULL and 
fea0: 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c  false or two NUL
feb0: 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c  Ls.** give a NUL
fec0: 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  L output..*/.cas
fed0: 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20  e OP_And:       
fee0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
fef0: 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69  s TK_AND, in1, i
ff00: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
ff10: 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20   OP_Or: {       
ff20: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ff30: 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32   TK_OR, in1, in2
ff40: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20  , out3 */.  int 
ff50: 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  v1;    /* Left o
ff60: 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53  perand:  0==FALS
ff70: 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55  E, 1==TRUE, 2==U
ff80: 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a  NKNOWN or NULL *
ff90: 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f  /.  int v2;    /
ffa0: 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a  * Right operand:
ffb0: 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52   0==FALSE, 1==TR
ffc0: 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f  UE, 2==UNKNOWN o
ffd0: 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e  r NULL */..  pIn
ffe0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
fff0: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
10000 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10010 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a   ){.    v1 = 2;.
10020 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20    }else{.    v1 
10030 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
10040 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a  Value(pIn1)!=0;.
10050 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d    }.  pIn2 = &aM
10060 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
10070 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  f( pIn2->flags &
10080 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
10090 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65   v2 = 2;.  }else
100a0 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74  {.    v2 = sqlit
100b0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
100c0 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69  In2)!=0;.  }.  i
100d0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
100e0 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74  OP_And ){.    st
100f0 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
10100 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67  ned char and_log
10110 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30  ic[] = { 0, 0, 0
10120 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c  , 0, 1, 2, 0, 2,
10130 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61   2 };.    v1 = a
10140 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32  nd_logic[v1*3+v2
10150 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
10160 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
10170 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f  igned char or_lo
10180 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20  gic[] = { 0, 1, 
10190 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31  2, 1, 1, 1, 2, 1
101a0 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
101b0 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32  or_logic[v1*3+v2
101c0 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20  ];.  }.  pOut = 
101d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
101e0 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20    if( v1==2 ){. 
101f0 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
10200 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
10210 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
10220 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a  pOut->u.i = v1;.
10230 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
10240 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
10250 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
10260 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
10270 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
10280 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
10290 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
102a0 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c  ter P1 as a bool
102b0 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72  ean value.  Stor
102c0 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e  e the.** boolean
102d0 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72   complement in r
102e0 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
102f0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
10300 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20  ister P1 is .** 
10310 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c  NULL, then a NUL
10320 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50  L is stored in P
10330 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  2..*/.case OP_No
10340 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
10350 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
10360 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32  K_NOT, in1, out2
10370 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
10380 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
10390 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
103a0 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p2];.  if( pIn1
103b0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
103c0 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
103d0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
103e0 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
103f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10400 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
10410 20 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   !sqlite3VdbeInt
10420 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20  Value(pIn1));.  
10430 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
10440 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20   Opcode: BitNot 
10450 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
10460 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
10470 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
10480 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74  ter P1 as an int
10490 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  eger.  Store the
104a0 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d  .** ones-complem
104b0 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61  ent of the P1 va
104c0 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
104d0 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c  r P2.  If P1 hol
104e0 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65  ds.** a NULL the
104f0 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  n store a NULL i
10500 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
10510 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20  _BitNot: {      
10520 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
10530 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31  s TK_BITNOT, in1
10540 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
10550 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
10560 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
10570 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
10580 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
10590 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
105a0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
105b0 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d  tNull(pOut);.  }
105c0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
105d0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
105e0 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56  (pOut, ~sqlite3V
105f0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
10600 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ));.  }.  break;
10610 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
10620 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
10630 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 69 66 20 4f  **.** Check if O
10640 50 5f 4f 6e 63 65 20 66 6c 61 67 20 50 31 20 69  P_Once flag P1 i
10650 73 20 73 65 74 2e 20 49 66 20 73 6f 2c 20 6a 75  s set. If so, ju
10660 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
10670 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  n P2. Otherwise,
10680 0a 2a 2a 20 73 65 74 20 74 68 65 20 66 6c 61 67  .** set the flag
10690 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
106a0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
106b0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
106c0 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20  se OP_Once: {   
106d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
106e0 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
106f0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46  Op->p1<p->nOnceF
10700 6c 61 67 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  lag );.  if( p->
10710 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70  aOnceFlag[pOp->p
10720 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  1] ){.    pc = p
10730 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73  Op->p2-1;.  }els
10740 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46  e{.    p->aOnceF
10750 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31  lag[pOp->p1] = 1
10760 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10770 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
10780 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
10790 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
107a0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
107b0 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
107c0 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
107d0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
107e0 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
107f0 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
10800 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
10810 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
10820 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
10830 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 6e 6f  jump if P3 is no
10840 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70  n-zero..*/./* Op
10850 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50  code: IfNot P1 P
10860 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
10870 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
10880 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
10890 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20  er P1 is False. 
108a0 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
108b0 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73   considered fals
108c0 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75  e if it has a nu
108d0 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a  meric value of z
108e0 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
108f0 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
10900 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
10910 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20  e jump if P3 is 
10920 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
10930 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20  _If:            
10940 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
10950 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  1 */.case OP_IfN
10960 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
10970 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
10980 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31  .  int c;.  pIn1
10990 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
109a0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
109b0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
109c0 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e  ){.    c = pOp->
109d0 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66  p3;.  }else{.#if
109e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
109f0 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
10a00 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64     c = sqlite3Vd
10a10 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
10a20 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63  !=0;.#else.    c
10a30 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
10a40 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  alValue(pIn1)!=0
10a50 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  .0;.#endif.    i
10a60 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
10a70 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21  OP_IfNot ) c = !
10a80 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20 29  c;.  }.  if( c )
10a90 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
10aa0 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61  p2-1;.  }.  brea
10ab0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10ac0 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20   IsNull P1 P2 * 
10ad0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
10ae0 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
10af0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
10b00 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
10b10 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20  e OP_IsNull: {  
10b20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
10b30 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20  e as TK_ISNULL, 
10b40 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
10b50 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
10b60 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
10b70 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
10b80 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 70  ull)!=0 ){.    p
10b90 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
10ba0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
10bb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e  ./* Opcode: NotN
10bc0 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
10bd0 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
10be0 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
10bf0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
10c00 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63  not NULL.  .*/.c
10c10 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20  ase OP_NotNull: 
10c20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
10c30 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55  same as TK_NOTNU
10c40 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
10c50 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
10c60 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
10c70 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
10c80 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
10c90 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
10ca0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
10cb0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10cc0 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
10cd0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  P4 P5.**.** Inte
10ce0 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74  rpret the data t
10cf0 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
10d00 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72  ints to as a str
10d10 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69  ucture built usi
10d20 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65  ng.** the MakeRe
10d30 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
10d40 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65  .  (See the Make
10d50 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f  Record opcode fo
10d60 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20  r additional.** 
10d70 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
10d80 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  t the format of 
10d90 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72  the data.)  Extr
10da0 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f  act the P2-th co
10db0 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69  lumn.** from thi
10dc0 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68  s record.  If th
10dd0 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
10de0 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c  t (P2+1) .** val
10df0 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ues in the recor
10e00 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  d, extract a NUL
10e10 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c  L..**.** The val
10e20 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20  ue extracted is 
10e30 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
10e40 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
10e50 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  the column conta
10e60 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50  ins fewer than P
10e70 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65  2 fields, then e
10e80 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20  xtract a NULL.  
10e90 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34  Or,.** if the P4
10ea0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
10eb0 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61  4_MEM use the va
10ec0 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72  lue of the P4 ar
10ed0 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65  gument as.** the
10ee0 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49   result..**.** I
10ef0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45  f the OPFLAG_CLE
10f00 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73  ARCACHE bit is s
10f10 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20  et on P5 and P1 
10f20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  is a pseudo-tabl
10f30 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65  e cursor,.** the
10f40 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74  n the cache of t
10f50 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73  he cursor is res
10f60 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72  et prior to extr
10f70 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  acting the colum
10f80 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  n..** The first 
10f90 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73  OP_Column agains
10fa0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
10fb0 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65   after the value
10fc0 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a   of the content.
10fd0 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ** register has 
10fe0 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68  changed should h
10ff0 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74  ave this bit set
11000 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
11010 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
11020 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
11030 46 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65  FARG bits are se
11040 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20  t on P5 when.** 
11050 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75  the result is gu
11060 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79  aranteed to only
11070 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
11080 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65  argument of a le
11090 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70  ngth().** or typ
110a0 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20  eof() function, 
110b0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54  respectively.  T
110c0 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61  he loading of la
110d0 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65  rge blobs can be
110e0 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20  .** skipped for 
110f0 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c  length() and all
11100 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67   content loading
11110 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20   can be skipped 
11120 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f  for typeof()..*/
11130 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a  .case OP_Column:
11140 20 7b 0a 20 20 75 33 32 20 70 61 79 6c 6f 61 64   {.  u32 payload
11150 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65  Size;   /* Numbe
11160 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
11170 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36  e record */.  i6
11180 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  4 payloadSize64;
11190 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
111a0 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
111b0 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20  d */.  int p1;  
111c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 31 20            /* P1 
111d0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63  value of the opc
111e0 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  ode */.  int p2;
111f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63              /* c
11200 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20  olumn number to 
11210 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64  retrieve */.  Vd
11220 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
11230 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
11240 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  sor */.  char *z
11250 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  Rec;        /* P
11260 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65  ointer to comple
11270 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a  te record-data *
11280 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
11290 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54  rsr;   /* The BT
112a0 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ree cursor */.  
112b0 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20  u32 *aType;     
112c0 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68     /* aType[i] h
112d0 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63  olds the numeric
112e0 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74   type of the i-t
112f0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  h column */.  u3
11300 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20  2 *aOffset;     
11310 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69   /* aOffset[i] i
11320 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72  s offset to star
11330 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d  t of data for i-
11340 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  th column */.  i
11350 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
11360 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66    /* number of f
11370 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
11380 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  ord */.  int len
11390 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
113a0 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
113b0 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
113c0 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
113d0 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
113e0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
113f0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61  counter */.  cha
11400 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20  r *zData;       
11410 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
11420 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
11430 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  ded */.  Mem *pD
11440 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57  est;        /* W
11450 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68  here to write th
11460 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75  e extracted valu
11470 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e */.  Mem sMem;
11480 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
11490 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
114a0 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
114b0 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78 3b  d */.  u8 *zIdx;
114c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
114d0 65 78 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a  ex into header *
114e0 2f 0a 20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b  /.  u8 *zEndHdr;
114f0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
11500 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20  r to first byte 
11510 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  after the header
11520 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74   */.  u32 offset
11530 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73  ;        /* Offs
11540 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  et into the data
11550 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c   */.  u32 szFiel
11560 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  d;       /* Numb
11570 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
11580 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20  he content of a 
11590 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 73  field */.  int s
115a0 7a 48 64 72 3b 20 20 20 20 20 20 20 20 20 2f 2a  zHdr;         /*
115b0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   Size of the hea
115c0 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61  der size field a
115d0 74 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72  t start of recor
115e0 64 20 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69 6c  d */.  int avail
115f0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
11600 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
11610 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a  available data *
11620 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20  /.  u32 t;      
11630 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65         /* A type
11640 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72   code from the r
11650 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a  ecord header */.
11660 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20    Mem *pReg;    
11670 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61       /* PseudoTa
11680 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  ble input regist
11690 65 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70  er */...  p1 = p
116a0 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
116b0 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30  Op->p2;.  pC = 0
116c0 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d  ;.  memset(&sMem
116d0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
116e0 29 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  ));.  assert( p1
116f0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
11700 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
11710 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
11720 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73  ->nMem );.  pDes
11730 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
11740 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
11750 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
11760 3b 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a 0a 20  ;.  zRec = 0;.. 
11770 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20 73   /* This block s
11780 65 74 73 20 74 68 65 20 76 61 72 69 61 62 6c 65  ets the variable
11790 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f 20   payloadSize to 
117a0 62 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  be the total num
117b0 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74 65  ber of.  ** byte
117c0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e  s in the record.
117d0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63 20  .  **.  ** zRec 
117e0 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65  is set to be the
117f0 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f   complete text o
11800 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20  f the record if 
11810 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  it is available.
11820 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c 65  .  ** The comple
11830 74 65 20 72 65 63 6f 72 64 20 74 65 78 74 20 69  te record text i
11840 73 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61 62  s always availab
11850 6c 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  le for pseudo-ta
11860 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68 65  bles.  ** If the
11870 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65   record is store
11880 64 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20 74  d in a cursor, t
11890 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f  he complete reco
118a0 72 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69 67  rd text.  ** mig
118b0 68 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20  ht be available 
118c0 69 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f 77  in the  pC->aRow
118d0 20 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20 6d   cache.  Or it m
118e0 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20 2a  ight not be..  *
118f0 2a 20 49 66 20 74 68 65 20 64 61 74 61 20 69 73  * If the data is
11900 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20 7a   unavailable,  z
11910 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e 55  Rec is set to NU
11920 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65  LL..  **.  ** We
11930 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74 68   also compute th
11940 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
11950 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  mns in the recor
11960 64 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73 2c  d.  For cursors,
11970 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  .  ** the number
11980 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20 73   of columns is s
11990 74 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64 62  tored in the Vdb
119a0 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20 65  eCursor.nField e
119b0 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70  lement..  */.  p
119c0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31 5d  C = p->apCsr[p1]
119d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
119e0 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  0 );.#ifndef SQL
119f0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
11a00 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20  TABLE.  assert( 
11a10 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d  pC->pVtabCursor=
11a20 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 70  =0 );.#endif.  p
11a30 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
11a40 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21  or;.  if( pCrsr!
11a50 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  =0 ){.    /* The
11a60 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65   record is store
11a70 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a 2f  d in a B-Tree */
11a80 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
11a90 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
11aa0 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72  o(pC);.    if( r
11ab0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
11ac0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
11ad0 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
11ae0 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61   ){.      payloa
11af0 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d  dSize = 0;.    }
11b00 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61 63  else if( pC->cac
11b10 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63  heStatus==p->cac
11b20 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20 70  heCtr ){.      p
11b30 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
11b40 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20  >payloadSize;.  
11b50 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61 72      zRec = (char
11b60 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  *)pC->aRow;.    
11b70 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69 73  }else if( pC->is
11b80 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 61  Index ){.      a
11b90 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
11ba0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
11bb0 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20  (pCrsr) );.     
11bc0 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
11bd0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
11be0 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
11bf0 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20  oadSize64);.    
11c00 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
11c10 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
11c20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
11c30 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
11c40 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
11c50 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72     /* sqlite3Btr
11c60 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29  eeParseCellPtr()
11c70 20 75 73 65 73 20 67 65 74 56 61 72 69 6e 74 33   uses getVarint3
11c80 32 28 29 20 74 6f 20 65 78 74 72 61 63 74 20 74  2() to extract t
11c90 68 65 0a 20 20 20 20 20 20 2a 2a 20 70 61 79 6c  he.      ** payl
11ca0 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20  oad size, so it 
11cb0 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f  is impossible fo
11cc0 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  r payloadSize64 
11cd0 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 6c  to be.      ** l
11ce0 61 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69  arger than 32 bi
11cf0 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ts. */.      ass
11d00 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a  ert( (payloadSiz
11d10 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58  e64 & SQLITE_MAX
11d20 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c  _U32)==(u64)payl
11d30 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20  oadSize64 );.   
11d40 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
11d50 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a   (u32)payloadSiz
11d60 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  e64;.    }else{.
11d70 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
11d80 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
11d90 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
11da0 3b 0a 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59  ;.      VVA_ONLY
11db0 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
11dc0 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
11dd0 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 29  r, &payloadSize)
11de0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
11df0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
11e00 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29     /* DataSize()
11e10 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a   cannot fail */.
11e20 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66      }.  }else if
11e30 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 73 65  ( ALWAYS(pC->pse
11e40 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 29 20 29  udoTableReg>0) )
11e50 7b 0a 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d  {.    pReg = &aM
11e60 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  em[pC->pseudoTab
11e70 6c 65 52 65 67 5d 3b 0a 20 20 20 20 69 66 28 20  leReg];.    if( 
11e80 70 43 2d 3e 6d 75 6c 74 69 50 73 65 75 64 6f 20  pC->multiPseudo 
11e90 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
11ea0 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
11eb0 70 79 28 70 44 65 73 74 2c 20 70 52 65 67 2b 70  py(pDest, pReg+p
11ec0 32 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  2, MEM_Ephem);. 
11ed0 20 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c       Deephemeral
11ee0 69 7a 65 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ize(pDest);.    
11ef0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
11f00 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _out;.    }.    
11f10 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c  assert( pReg->fl
11f20 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
11f30 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
11f40 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29  mIsValid(pReg) )
11f50 3b 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a  ;.    payloadSiz
11f60 65 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20  e = pReg->n;.   
11f70 20 7a 52 65 63 20 3d 20 70 52 65 67 2d 3e 7a 3b   zRec = pReg->z;
11f80 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
11f90 61 74 75 73 20 3d 20 28 70 4f 70 2d 3e 70 35 26  atus = (pOp->p5&
11fa0 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
11fb0 45 29 20 3f 20 43 41 43 48 45 5f 53 54 41 4c 45  E) ? CACHE_STALE
11fc0 20 3a 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a   : p->cacheCtr;.
11fd0 20 20 20 20 61 73 73 65 72 74 28 20 70 61 79 6c      assert( payl
11fe0 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52  oadSize==0 || zR
11ff0 65 63 21 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65  ec!=0 );.  }else
12000 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e 73 69 64 65  {.    /* Conside
12010 72 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20  r the row to be 
12020 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 70 61 79 6c  NULL */.    payl
12030 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 7d  oadSize = 0;.  }
12040 0a 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c 6f 61  ..  /* If payloa
12050 64 53 69 7a 65 20 69 73 20 30 2c 20 74 68 65 6e  dSize is 0, then
12060 20 6a 75 73 74 20 73 74 6f 72 65 20 61 20 4e 55   just store a NU
12070 4c 4c 2e 20 20 54 68 69 73 20 63 61 6e 20 68 61  LL.  This can ha
12080 70 70 65 6e 20 62 65 63 61 75 73 65 20 6f 66 0a  ppen because of.
12090 20 20 2a 2a 20 6e 75 6c 6c 52 6f 77 20 6f 72 20    ** nullRow or 
120a0 62 65 63 61 75 73 65 20 6f 66 20 61 20 63 6f 72  because of a cor
120b0 72 75 70 74 20 64 61 74 61 62 61 73 65 2e 20 2a  rupt database. *
120c0 2f 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53  /.  if( payloadS
120d0 69 7a 65 3d 3d 30 20 29 7b 0a 20 20 20 20 4d 65  ize==0 ){.    Me
120e0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
120f0 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
12100 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
12110 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 61 73 73  n_out;.  }.  ass
12120 65 72 74 28 20 64 62 2d 3e 61 4c 69 6d 69 74 5b  ert( db->aLimit[
12130 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
12140 47 54 48 5d 3e 3d 30 20 29 3b 0a 20 20 69 66 28  GTH]>=0 );.  if(
12150 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28   payloadSize > (
12160 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
12170 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
12180 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
12190 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
121a0 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69  nField = pC->nFi
121b0 65 6c 64 3b 0a 20 20 61 73 73 65 72 74 28 20 70  eld;.  assert( p
121c0 32 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20 2f  2<nField );..  /
121d0 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65  * Read and parse
121e0 20 74 68 65 20 74 61 62 6c 65 20 68 65 61 64 65   the table heade
121f0 72 2e 20 20 53 74 6f 72 65 20 74 68 65 20 72 65  r.  Store the re
12200 73 75 6c 74 73 20 6f 66 20 74 68 65 20 70 61 72  sults of the par
12210 73 65 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65  se.  ** into the
12220 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 63   record header c
12230 61 63 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74  ache fields of t
12240 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a  he cursor..  */.
12250 20 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54    aType = pC->aT
12260 79 70 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63  ype;.  if( pC->c
12270 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63  acheStatus==p->c
12280 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 61  acheCtr ){.    a
12290 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66  Offset = pC->aOf
122a0 66 73 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  fset;.  }else{. 
122b0 20 20 20 61 73 73 65 72 74 28 61 54 79 70 65 29     assert(aType)
122c0 3b 0a 20 20 20 20 61 76 61 69 6c 20 3d 20 30 3b  ;.    avail = 0;
122d0 0a 20 20 20 20 70 43 2d 3e 61 4f 66 66 73 65 74  .    pC->aOffset
122e0 20 3d 20 61 4f 66 66 73 65 74 20 3d 20 26 61 54   = aOffset = &aT
122f0 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20  ype[nField];.   
12300 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
12310 20 3d 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a   = payloadSize;.
12320 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
12330 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74  tus = p->cacheCt
12340 72 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75 72  r;..    /* Figur
12350 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20 62  e out how many b
12360 79 74 65 73 20 61 72 65 20 69 6e 20 74 68 65 20  ytes are in the 
12370 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 69 66  header */.    if
12380 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20  ( zRec ){.      
12390 7a 44 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20  zData = zRec;.  
123a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
123b0 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
123c0 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
123d0 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  = (char*)sqlite3
123e0 42 74 72 65 65 4b 65 79 46 65 74 63 68 28 70 43  BtreeKeyFetch(pC
123f0 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
12400 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12410 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72     zData = (char
12420 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  *)sqlite3BtreeDa
12430 74 61 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  taFetch(pCrsr, &
12440 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a  avail);.      }.
12450 20 20 20 20 20 20 2f 2a 20 49 66 20 4b 65 79 46        /* If KeyF
12460 65 74 63 68 28 29 2f 44 61 74 61 46 65 74 63 68  etch()/DataFetch
12470 28 29 20 6d 61 6e 61 67 65 64 20 74 6f 20 67 65  () managed to ge
12480 74 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 79  t the entire pay
12490 6c 6f 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73  load,.      ** s
124a0 61 76 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20  ave the payload 
124b0 69 6e 20 74 68 65 20 70 43 2d 3e 61 52 6f 77 20  in the pC->aRow 
124c0 63 61 63 68 65 2e 20 20 54 68 61 74 20 77 69 6c  cache.  That wil
124d0 6c 20 73 61 76 65 20 75 73 20 66 72 6f 6d 0a 20  l save us from. 
124e0 20 20 20 20 20 2a 2a 20 68 61 76 69 6e 67 20 74       ** having t
124f0 6f 20 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e 61  o make additiona
12500 6c 20 63 61 6c 6c 73 20 74 6f 20 66 65 74 63 68  l calls to fetch
12510 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72   the content por
12520 74 69 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a  tion of.      **
12530 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20   the record..   
12540 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
12550 72 74 28 20 61 76 61 69 6c 3e 3d 30 20 29 3b 0a  rt( avail>=0 );.
12560 20 20 20 20 20 20 69 66 28 20 70 61 79 6c 6f 61        if( payloa
12570 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76  dSize <= (u32)av
12580 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  ail ){.        z
12590 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20 20  Rec = zData;.   
125a0 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
125b0 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20 20  (u8*)zData;.    
125c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
125d0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20   pC->aRow = 0;. 
125e0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
125f0 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
12600 67 20 61 73 73 65 72 74 20 69 73 20 74 72 75 65  g assert is true
12610 20 69 6e 20 61 6c 6c 20 63 61 73 65 73 20 65 78   in all cases ex
12620 63 65 70 74 20 77 68 65 6e 0a 20 20 20 20 2a 2a  cept when.    **
12630 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
12640 6c 65 20 68 61 73 20 62 65 65 6e 20 63 6f 72 72  le has been corr
12650 75 70 74 65 64 20 65 78 74 65 72 6e 61 6c 6c 79  upted externally
12660 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61 73 73 65  ..    **    asse
12670 72 74 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20 61  rt( zRec!=0 || a
12680 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a  vail>=payloadSiz
12690 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29 3b  e || avail>=9 );
126a0 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72 20 3d 20   */.    szHdr = 
126b0 67 65 74 56 61 72 69 6e 74 33 32 28 28 75 38 2a  getVarint32((u8*
126c0 29 7a 44 61 74 61 2c 20 6f 66 66 73 65 74 29 3b  )zData, offset);
126d0 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  ..    /* Make su
126e0 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  re a corrupt dat
126f0 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69  abase has not gi
12700 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69  ven us an oversi
12710 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a  ze header..    *
12720 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f  * Do this now to
12730 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69   avoid an oversi
12740 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ze memory alloca
12750 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  tion..    **.   
12760 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73   ** Type entries
12770 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20   can be between 
12780 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61  1 and 5 bytes ea
12790 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35  ch.  But 4 and 5
127a0 20 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70   byte.    ** typ
127b0 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64  es use so much d
127c0 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74  ata space that t
127d0 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
127e0 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a   4096 and 32 of.
127f0 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
12800 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
12810 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
12820 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
12830 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33   from a.    ** 3
12840 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65  -byte type for e
12850 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d  ach of the maxim
12860 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75  um of 32768 colu
12870 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20  mns plus three. 
12880 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65     ** extra byte
12890 73 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72  s for the header
128a0 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20   length itself. 
128b0 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39   32768*3 + 3 = 9
128c0 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  8307..    */.   
128d0 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38   if( offset > 98
128e0 33 30 37 20 29 7b 0a 20 20 20 20 20 20 72 63 20  307 ){.      rc 
128f0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
12900 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
12910 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
12920 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 43  .    }..    /* C
12930 6f 6d 70 75 74 65 20 69 6e 20 6c 65 6e 20 74 68  ompute in len th
12940 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
12950 73 20 6f 66 20 64 61 74 61 20 77 65 20 6e 65 65  s of data we nee
12960 64 20 74 6f 20 72 65 61 64 20 69 6e 20 6f 72 64  d to read in ord
12970 65 72 0a 20 20 20 20 2a 2a 20 74 6f 20 67 65 74  er.    ** to get
12980 20 6e 46 69 65 6c 64 20 74 79 70 65 20 76 61 6c   nField type val
12990 75 65 73 2e 20 20 6f 66 66 73 65 74 20 69 73 20  ues.  offset is 
129a0 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f  an upper bound o
129b0 6e 20 74 68 69 73 2e 20 20 42 75 74 0a 20 20 20  n this.  But.   
129c0 20 2a 2a 20 6e 46 69 65 6c 64 20 6d 69 67 68 74   ** nField might
129d0 20 62 65 20 73 69 67 6e 69 66 69 63 61 6e 74 6c   be significantl
129e0 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  y less than the 
129f0 74 72 75 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  true number of c
12a00 6f 6c 75 6d 6e 73 0a 20 20 20 20 2a 2a 20 69 6e  olumns.    ** in
12a10 20 74 68 65 20 74 61 62 6c 65 2c 20 61 6e 64 20   the table, and 
12a20 69 6e 20 74 68 61 74 20 63 61 73 65 2c 20 35 2a  in that case, 5*
12a30 6e 46 69 65 6c 64 2b 33 20 6d 69 67 68 74 20 62  nField+3 might b
12a40 65 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 6f  e smaller than o
12a50 66 66 73 65 74 2e 0a 20 20 20 20 2a 2a 20 57 65  ffset..    ** We
12a60 20 77 61 6e 74 20 74 6f 20 6d 69 6e 69 6d 69 7a   want to minimiz
12a70 65 20 6c 65 6e 20 69 6e 20 6f 72 64 65 72 20 74  e len in order t
12a80 6f 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65  o limit the size
12a90 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 0a 20   of the memory. 
12aa0 20 20 20 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e     ** allocation
12ab0 2c 20 65 73 70 65 63 69 61 6c 6c 79 20 69 66 20  , especially if 
12ac0 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
12ad0 73 65 20 66 69 6c 65 20 68 61 73 20 63 61 75 73  se file has caus
12ae0 65 64 20 6f 66 66 73 65 74 0a 20 20 20 20 2a 2a  ed offset.    **
12af0 20 74 6f 20 62 65 20 6f 76 65 72 73 69 7a 65 64   to be oversized
12b00 2e 20 4f 66 66 73 65 74 20 69 73 20 6c 69 6d 69  . Offset is limi
12b10 74 65 64 20 74 6f 20 39 38 33 30 37 20 61 62 6f  ted to 98307 abo
12b20 76 65 2e 20 20 42 75 74 20 39 38 33 30 37 20 6d  ve.  But 98307 m
12b30 69 67 68 74 0a 20 20 20 20 2a 2a 20 73 74 69 6c  ight.    ** stil
12b40 6c 20 65 78 63 65 65 64 20 52 6f 62 73 6f 6e 20  l exceed Robson 
12b50 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
12b60 6e 20 6c 69 6d 69 74 73 20 6f 6e 20 73 6f 6d 65  n limits on some
12b70 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e   configurations.
12b80 0a 20 20 20 20 2a 2a 20 4f 6e 20 73 79 73 74 65  .    ** On syste
12b90 6d 73 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 74  ms that cannot t
12ba0 6f 6c 65 72 61 74 65 20 6c 61 72 67 65 20 6d 65  olerate large me
12bb0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
12bc0 2c 20 6e 46 69 65 6c 64 2a 35 2b 33 0a 20 20 20  , nField*5+3.   
12bd0 20 2a 2a 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20   ** will likely 
12be0 62 65 20 6d 75 63 68 20 73 6d 61 6c 6c 65 72 20  be much smaller 
12bf0 73 69 6e 63 65 20 6e 46 69 65 6c 64 20 77 69 6c  since nField wil
12c00 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6c 65 73 73  l likely be less
12c10 20 74 68 61 6e 0a 20 20 20 20 2a 2a 20 32 30 20   than.    ** 20 
12c20 6f 72 20 73 6f 2e 20 20 54 68 69 73 20 69 6e 73  or so.  This ins
12c30 75 72 65 73 20 74 68 61 74 20 52 6f 62 73 6f 6e  ures that Robson
12c40 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
12c50 6f 6e 20 6c 69 6d 69 74 73 20 61 72 65 0a 20 20  on limits are.  
12c60 20 20 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 65    ** not exceede
12c70 64 20 65 76 65 6e 20 66 6f 72 20 63 6f 72 72 75  d even for corru
12c80 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  pt database file
12c90 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6c 65  s..    */.    le
12ca0 6e 20 3d 20 6e 46 69 65 6c 64 2a 35 20 2b 20 33  n = nField*5 + 3
12cb0 3b 0a 20 20 20 20 69 66 28 20 6c 65 6e 20 3e 20  ;.    if( len > 
12cc0 28 69 6e 74 29 6f 66 66 73 65 74 20 29 20 6c 65  (int)offset ) le
12cd0 6e 20 3d 20 28 69 6e 74 29 6f 66 66 73 65 74 3b  n = (int)offset;
12ce0 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 4b 65 79  ..    /* The Key
12cf0 46 65 74 63 68 28 29 20 6f 72 20 44 61 74 61 46  Fetch() or DataF
12d00 65 74 63 68 28 29 20 61 62 6f 76 65 20 61 72 65  etch() above are
12d10 20 66 61 73 74 20 61 6e 64 20 77 69 6c 6c 20 67   fast and will g
12d20 65 74 20 74 68 65 20 65 6e 74 69 72 65 0a 20 20  et the entire.  
12d30 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64    ** record head
12d40 65 72 20 69 6e 20 6d 6f 73 74 20 63 61 73 65 73  er in most cases
12d50 2e 20 20 42 75 74 20 74 68 65 79 20 77 69 6c 6c  .  But they will
12d60 20 66 61 69 6c 20 74 6f 20 67 65 74 20 74 68 65   fail to get the
12d70 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a 2a   complete.    **
12d80 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 69   record header i
12d90 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  f the record hea
12da0 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 66 69 74  der does not fit
12db0 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 70 61 67   on a single pag
12dc0 65 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20  e.    ** in the 
12dd0 42 2d 54 72 65 65 2e 20 20 57 68 65 6e 20 74 68  B-Tree.  When th
12de0 61 74 20 68 61 70 70 65 6e 73 2c 20 75 73 65 20  at happens, use 
12df0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
12e00 6f 6d 42 74 72 65 65 28 29 20 74 6f 0a 20 20 20  omBtree() to.   
12e10 20 2a 2a 20 61 63 71 75 69 72 65 20 74 68 65 20   ** acquire the 
12e20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 20  complete header 
12e30 74 65 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  text..    */.   
12e40 20 69 66 28 20 21 7a 52 65 63 20 26 26 20 61 76   if( !zRec && av
12e50 61 69 6c 3c 6c 65 6e 20 29 7b 0a 20 20 20 20 20  ail<len ){.     
12e60 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30 3b   sMem.flags = 0;
12e70 0a 20 20 20 20 20 20 73 4d 65 6d 2e 64 62 20 3d  .      sMem.db =
12e80 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
12e90 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
12ea0 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c  mBtree(pCrsr, 0,
12eb0 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65   len, pC->isInde
12ec0 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  x, &sMem);.     
12ed0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
12ee0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
12ef0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
12f00 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
12f10 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a  zData = sMem.z;.
12f20 20 20 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64      }.    zEndHd
12f30 72 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61  r = (u8 *)&zData
12f40 5b 6c 65 6e 5d 3b 0a 20 20 20 20 7a 49 64 78 20  [len];.    zIdx 
12f50 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73  = (u8 *)&zData[s
12f60 7a 48 64 72 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53  zHdr];..    /* S
12f70 63 61 6e 20 74 68 65 20 68 65 61 64 65 72 20 61  can the header a
12f80 6e 64 20 75 73 65 20 69 74 20 74 6f 20 66 69 6c  nd use it to fil
12f90 6c 20 69 6e 20 74 68 65 20 61 54 79 70 65 5b 5d  l in the aType[]
12fa0 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20   and aOffset[]. 
12fb0 20 20 20 2a 2a 20 61 72 72 61 79 73 2e 20 20 61     ** arrays.  a
12fc0 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e  Type[i] will con
12fd0 74 61 69 6e 20 74 68 65 20 74 79 70 65 20 69 6e  tain the type in
12fe0 74 65 67 65 72 20 66 6f 72 20 74 68 65 20 69 2d  teger for the i-
12ff0 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e  th.    ** column
13000 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20   and aOffset[i] 
13010 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65  will contain the
13020 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
13030 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a   beginning.    *
13040 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
13050 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  to the start of 
13060 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65  the data for the
13070 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20   i-th column.   
13080 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   */.    for(i=0;
13090 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b   i<nField; i++){
130a0 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c  .      if( zIdx<
130b0 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20  zEndHdr ){.     
130c0 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
130d0 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 20 20  offset;.        
130e0 69 66 28 20 7a 49 64 78 5b 30 5d 3c 30 78 38 30  if( zIdx[0]<0x80
130f0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74 20   ){.          t 
13100 3d 20 7a 49 64 78 5b 30 5d 3b 0a 20 20 20 20 20  = zIdx[0];.     
13110 20 20 20 20 20 7a 49 64 78 2b 2b 3b 0a 20 20 20       zIdx++;.   
13120 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
13130 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 73 71        zIdx += sq
13140 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
13150 28 7a 49 64 78 2c 20 26 74 29 3b 0a 20 20 20 20  (zIdx, &t);.    
13160 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 54      }.        aT
13170 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20  ype[i] = t;.    
13180 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71      szField = sq
13190 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
131a0 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
131b0 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46     offset += szF
131c0 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66  ield;.        if
131d0 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64  ( offset<szField
131e0 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20   ){  /* True if 
131f0 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73  offset overflows
13200 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 49   */.          zI
13210 64 78 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d  dx = &zEndHdr[1]
13220 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c  ;  /* Forces SQL
13230 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75  ITE_CORRUPT retu
13240 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20  rn below */.    
13250 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
13260 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
13270 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49  se{.        /* I
13280 66 20 69 20 69 73 20 6c 65 73 73 20 74 68 61 74  f i is less that
13290 20 6e 46 69 65 6c 64 2c 20 74 68 65 6e 20 74 68   nField, then th
132a0 65 72 65 20 61 72 65 20 66 65 77 65 72 20 66 69  ere are fewer fi
132b0 65 6c 64 73 20 69 6e 20 74 68 69 73 0a 20 20 20  elds in this.   
132c0 20 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 74       ** record t
132d0 68 61 6e 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e  han SetNumColumn
132e0 73 20 69 6e 64 69 63 61 74 65 64 20 74 68 65 72  s indicated ther
132f0 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  e are columns in
13300 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20   the.        ** 
13310 74 61 62 6c 65 2e 20 53 65 74 20 74 68 65 20 6f  table. Set the o
13320 66 66 73 65 74 20 66 6f 72 20 61 6e 79 20 65 78  ffset for any ex
13330 74 72 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20  tra columns not 
13340 70 72 65 73 65 6e 74 20 69 6e 0a 20 20 20 20 20  present in.     
13350 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64     ** the record
13360 20 74 6f 20 30 2e 20 54 68 69 73 20 74 65 6c 6c   to 0. This tell
13370 73 20 63 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20  s code below to 
13380 73 74 6f 72 65 20 74 68 65 20 64 65 66 61 75 6c  store the defaul
13390 74 20 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20  t value.        
133a0 2a 2a 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ** for the colum
133b0 6e 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65 73  n instead of des
133c0 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76 61 6c  erializing a val
133d0 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  ue from the reco
133e0 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  rd..        */. 
133f0 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69         aOffset[i
13400 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  ] = 0;.      }. 
13410 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
13420 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
13430 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d 2e  sMem);.    sMem.
13440 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
13450 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77 65 20  ;..    /* If we 
13460 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20 68  have read more h
13470 65 61 64 65 72 20 64 61 74 61 20 74 68 61 6e 20  eader data than 
13480 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  was contained in
13490 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20 20   the header,.   
134a0 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65 6e   ** or if the en
134b0 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69  d of the last fi
134c0 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62  eld appears to b
134d0 65 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  e past the end o
134e0 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 65 63  f the.    ** rec
134f0 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65  ord, or if the e
13500 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66  nd of the last f
13510 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20  ield appears to 
13520 62 65 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e  be before the en
13530 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  d.    ** of the 
13540 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c  record (when all
13550 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29   fields present)
13560 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62  , then we must b
13570 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 2a  e dealing .    *
13580 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75 70 74  * with a corrupt
13590 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 2a   database..    *
135a0 2f 0a 20 20 20 20 69 66 28 20 28 7a 49 64 78 20  /.    if( (zIdx 
135b0 3e 20 7a 45 6e 64 48 64 72 29 20 7c 7c 20 28 6f  > zEndHdr) || (o
135c0 66 66 73 65 74 20 3e 20 70 61 79 6c 6f 61 64 53  ffset > payloadS
135d0 69 7a 65 29 0a 20 20 20 20 20 20 20 20 20 7c 7c  ize).         ||
135e0 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20   (zIdx==zEndHdr 
135f0 26 26 20 6f 66 66 73 65 74 21 3d 70 61 79 6c 6f  && offset!=paylo
13600 61 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20 20  adSize) ){.     
13610 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
13620 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
13630 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
13640 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  out;.    }.  }..
13650 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f 6c    /* Get the col
13660 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  umn information.
13670 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20   If aOffset[p2] 
13680 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
13690 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61 6c  n .  ** deserial
136a0 69 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66 72  ize the value fr
136b0 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20 49  om the record. I
136c0 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73  f aOffset[p2] is
136d0 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e   zero,.  ** then
136e0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65   there are not e
136f0 6e 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e 20  nough fields in 
13700 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73 61  the record to sa
13710 74 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20 72  tisfy the.  ** r
13720 65 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69 73  equest.  In this
13730 20 63 61 73 65 2c 20 73 65 74 20 74 68 65 20 76   case, set the v
13740 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20  alue NULL or to 
13750 50 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a 2a  P4 if P4 is.  **
13760 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
13770 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f  Mem object..  */
13780 0a 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 70  .  if( aOffset[p
13790 32 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  2] ){.    assert
137a0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
137b0 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20  );.    if( zRec 
137c0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73  ){.      /* This
137d0 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63   is the common c
137e0 61 73 65 20 77 68 65 72 65 20 74 68 65 20 77 68  ase where the wh
137f0 6f 6c 65 20 72 6f 77 20 66 69 74 73 20 6f 6e 20  ole row fits on 
13800 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20 2a 2f  a single page */
13810 0a 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52 65  .      VdbeMemRe
13820 6c 65 61 73 65 28 70 44 65 73 74 29 3b 0a 20 20  lease(pDest);.  
13830 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
13840 65 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29 26  erialGet((u8 *)&
13850 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32 5d  zRec[aOffset[p2]
13860 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44  ], aType[p2], pD
13870 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  est);.    }else{
13880 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 62  .      /* This b
13890 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e  ranch happens on
138a0 6c 79 20 77 68 65 6e 20 74 68 65 20 72 6f 77 20  ly when the row 
138b0 6f 76 65 72 66 6c 6f 77 73 20 6f 6e 74 6f 20 6d  overflows onto m
138c0 75 6c 74 69 70 6c 65 20 70 61 67 65 73 20 2a 2f  ultiple pages */
138d0 0a 20 20 20 20 20 20 74 20 3d 20 61 54 79 70 65  .      t = aType
138e0 5b 70 32 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  [p2];.      if( 
138f0 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
13900 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46  AG_LENGTHARG|OPF
13910 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21  LAG_TYPEOFARG))!
13920 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 28 74  =0.       && ((t
13930 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30  >=12 && (t&1)==0
13940 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20  ) || (pOp->p5 & 
13950 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
13960 29 21 3d 30 29 0a 20 20 20 20 20 20 29 7b 0a 20  )!=0).      ){. 
13970 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e         /* Conten
13980 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20  t is irrelevant 
13990 66 6f 72 20 74 68 65 20 74 79 70 65 6f 66 28 29  for the typeof()
139a0 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 66 6f   function and fo
139b0 72 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65  r.        ** the
139c0 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74   length(X) funct
139d0 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c  ion if X is a bl
139e0 6f 62 2e 20 20 53 6f 20 77 65 20 6d 69 67 68 74  ob.  So we might
139f0 20 61 73 20 77 65 6c 6c 20 75 73 65 0a 20 20 20   as well use.   
13a00 20 20 20 20 20 2a 2a 20 62 6f 67 75 73 20 63 6f       ** bogus co
13a10 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74 68 61  ntent rather tha
13a20 6e 20 72 65 61 64 69 6e 67 20 63 6f 6e 74 65 6e  n reading conten
13a30 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55  t from disk.  NU
13a40 4c 4c 20 77 6f 72 6b 73 0a 20 20 20 20 20 20 20  LL works.       
13a50 20 2a 2a 20 66 6f 72 20 74 65 78 74 20 61 6e 64   ** for text and
13a60 20 62 6c 6f 62 20 61 6e 64 20 77 68 61 74 65 76   blob and whatev
13a70 65 72 20 69 73 20 69 6e 20 74 68 65 20 70 61 79  er is in the pay
13a80 6c 6f 61 64 53 69 7a 65 36 34 20 76 61 72 69 61  loadSize64 varia
13a90 62 6c 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 77  ble.        ** w
13aa0 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76 65  ill work for eve
13ab0 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 2a 2f  rything else. */
13ac0 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
13ad0 20 74 3c 31 32 20 3f 20 28 63 68 61 72 2a 29 26   t<12 ? (char*)&
13ae0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a 20  payloadSize64 : 
13af0 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
13b00 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 71          len = sq
13b10 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
13b20 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
13b30 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
13b40 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65  mMove(&sMem, pDe
13b50 73 74 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  st);.        rc 
13b60 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
13b70 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c  FromBtree(pCrsr,
13b80 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65   aOffset[p2], le
13b90 6e 2c 20 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c  n,  pC->isIndex,
13ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bc0 20 20 20 20 20 20 26 73 4d 65 6d 29 3b 0a 20 20        &sMem);.  
13bd0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
13be0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
13bf0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
13c00 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20  umn_out;.       
13c10 20 7d 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61   }.        zData
13c20 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20   = sMem.z;.     
13c30 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
13c40 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75  VdbeSerialGet((u
13c50 38 2a 29 7a 44 61 74 61 2c 20 74 2c 20 70 44 65  8*)zData, t, pDe
13c60 73 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  st);.    }.    p
13c70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  Dest->enc = enco
13c80 64 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ding;.  }else{. 
13c90 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79     if( pOp->p4ty
13ca0 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20  pe==P4_MEM ){.  
13cb0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
13cc0 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44  emShallowCopy(pD
13cd0 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65  est, pOp->p4.pMe
13ce0 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  m, MEM_Static);.
13cf0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
13d00 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
13d10 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  pDest, MEM_Null)
13d20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
13d30 2a 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61  * If we dynamica
13d40 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70  lly allocated sp
13d50 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
13d60 64 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20 2a  data (in the.  *
13d70 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  * sqlite3VdbeMem
13d80 46 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c  FromBtree() call
13d90 20 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61   above) then tra
13da0 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66  nsfer control of
13db0 20 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61 6d   that.  ** dynam
13dc0 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
13dd0 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74   space over to t
13de0 68 65 20 70 44 65 73 74 20 73 74 72 75 63 74 75  he pDest structu
13df0 72 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70 72  re..  ** This pr
13e00 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20  events a memory 
13e10 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  copy..  */.  if(
13e20 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b   sMem.zMalloc ){
13e30 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 4d 65  .    assert( sMe
13e40 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f  m.z==sMem.zMallo
13e50 63 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  c );.    assert(
13e60 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20   !(pDest->flags 
13e70 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
13e80 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73    assert( !(pDes
13e90 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  t->flags & (MEM_
13ea0 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20 7c  Blob|MEM_Str)) |
13eb0 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d  | pDest->z==sMem
13ec0 2e 7a 20 29 3b 0a 20 20 20 20 70 44 65 73 74 2d  .z );.    pDest-
13ed0 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
13ee0 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63  Ephem|MEM_Static
13ef0 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  );.    pDest->fl
13f00 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b  ags |= MEM_Term;
13f10 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20  .    pDest->z = 
13f20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65 73  sMem.z;.    pDes
13f30 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65  t->zMalloc = sMe
13f40 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a  m.zMalloc;.  }..
13f50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
13f60 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
13f70 6c 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f 63  le(pDest);..op_c
13f80 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44  olumn_out:.  UPD
13f90 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
13fa0 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53  (pDest);.  REGIS
13fb0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
13fc0 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65  3, pDest);.  bre
13fd0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
13fe0 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32  : Affinity P1 P2
13ff0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70   * P4 *.**.** Ap
14000 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74  ply affinities t
14010 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20  o a range of P2 
14020 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
14030 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a  ng with P1..**.*
14040 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67  * P4 is a string
14050 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
14060 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65  acters long. The
14070 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
14080 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
14090 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
140a0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
140b0 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
140c0 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
140d0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
140e0 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61  the range..*/.ca
140f0 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20  se OP_Affinity: 
14100 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
14110 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20  zAffinity;   /* 
14120 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20  The affinity to 
14130 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20  be applied */.  
14140 63 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20  char cAff;      
14150 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69           /* A si
14160 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f  ngle character o
14170 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20  f affinity */.. 
14180 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
14190 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
141a0 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29  ( zAffinity!=0 )
141b0 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
141c0 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d  inity[pOp->p2]==
141d0 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
141e0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
141f0 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a  while( (cAff = *
14200 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d  (zAffinity++))!=
14210 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
14220 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
14230 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20  m[p->nMem] );.  
14240 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
14250 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
14260 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
14270 31 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66  1);.    applyAff
14280 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66  inity(pIn1, cAff
14290 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
142a0 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pIn1++;.  }.  b
142b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
142c0 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50  de: MakeRecord P
142d0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
142e0 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
142f0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
14300 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
14310 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
14320 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
14330 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
14340 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
14350 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
14360 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
14370 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
14380 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
14390 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
143a0 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
143b0 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
143c0 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
143d0 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
143e0 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
143f0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
14400 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
14410 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
14420 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
14430 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
14440 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
14450 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
14460 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
14470 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
14480 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
14490 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
144a0 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
144b0 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
144c0 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
144d0 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
144e0 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
144f0 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a  finity NONE..*/.
14500 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
14510 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
14520 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
14530 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
14540 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
14550 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
14560 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
14570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
14580 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
14590 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
145a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
145b0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
145c0 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
145d0 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
145e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
145f0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
14600 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
14610 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
14620 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
14630 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
14640 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
14650 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
14660 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14670 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
14680 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
14690 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
146a0 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
146b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
146c0 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
146d0 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
146e0 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
146f0 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
14700 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
14710 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
14720 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
14730 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
14740 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
14750 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
14760 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
14770 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
14780 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
14790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
147a0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
147b0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
147c0 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
147d0 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
147e0 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
147f0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
14800 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
14810 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
14820 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
14830 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
14840 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
14850 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
14860 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
14870 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e  Record[] */.  in
14880 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
14890 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
148a0 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20  f a field */..  
148b0 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20  /* Assuming the 
148c0 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20  record contains 
148d0 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65  N fields, the re
148e0 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b  cord format look
148f0 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73  s.  ** like this
14900 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d  :.  **.  ** ----
14910 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14920 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14930 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14940 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14950 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d  ----.  ** | hdr-
14960 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20  size | type 0 | 
14970 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74  type 1 | ... | t
14980 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20  ype N-1 | data0 
14990 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31  | ... | data N-1
149a0 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d   | .  ** -------
149b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
149c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
149d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
149e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
149f0 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61  -.  **.  ** Data
14a00 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f  (0) is taken fro
14a10 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  m register P1.  
14a20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72  Data(1) comes fr
14a30 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31  om register P1+1
14a40 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f  .  ** and so fro
14a50 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61  th..  **.  ** Ea
14a60 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73  ch type field is
14a70 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73   a varint repres
14a80 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61  enting the seria
14a90 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20  l type of the . 
14aa0 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e   ** correspondin
14ab0 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28  g data element (
14ac0 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53  see sqlite3VdbeS
14ad0 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68  erialType()). Th
14ae0 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20  e.  ** hdr-size 
14af0 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20  field is also a 
14b00 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
14b10 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  the offset from 
14b20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20  the beginning.  
14b30 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
14b40 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a   to data0..  */.
14b50 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20    nData = 0;    
14b60 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14b70 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
14b80 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20  space */.  nHdr 
14b90 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
14ba0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
14bb0 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
14bc0 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b   */.  nZero = 0;
14bd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14be0 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
14bf0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
14c00 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e  he record */.  n
14c10 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b  Field = pOp->p1;
14c20 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
14c30 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
14c40 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20  rt( nField>0 && 
14c50 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
14c60 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d 3e  ->p2+nField<=p->
14c70 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 44 61 74  nMem+1 );.  pDat
14c80 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c  a0 = &aMem[nFiel
14c90 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70  d];.  nField = p
14ca0 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20  Op->p2;.  pLast 
14cb0 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64  = &pData0[nField
14cc0 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d  -1];.  file_form
14cd0 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at = p->minWrite
14ce0 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f  FileFormat;..  /
14cf0 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f  * Identify the o
14d00 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  utput register *
14d10 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
14d20 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70  >p3<pOp->p1 || p
14d30 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b  Op->p3>=pOp->p1+
14d40 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75  pOp->p2 );.  pOu
14d50 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
14d60 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
14d70 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
14d80 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f  ..  /* Loop thro
14d90 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73  ugh the elements
14da0 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20   that will make 
14db0 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  up the record to
14dc0 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74   figure.  ** out
14dd0 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20   how much space 
14de0 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
14df0 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a  the new record..
14e00 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63 3d    */.  for(pRec=
14e10 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c  pData0; pRec<=pL
14e20 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20  ast; pRec++){.  
14e30 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
14e40 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20  alid(pRec) );.  
14e50 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20    if( zAffinity 
14e60 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  ){.      applyAf
14e70 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66  finity(pRec, zAf
14e80 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74  finity[pRec-pDat
14e90 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  a0], encoding);.
14ea0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52      }.    if( pR
14eb0 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65  ec->flags&MEM_Ze
14ec0 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20  ro && pRec->n>0 
14ed0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
14ee0 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
14ef0 62 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20  b(pRec);.    }. 
14f00 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
14f10 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
14f20 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
14f30 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c  e_format);.    l
14f40 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
14f50 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65  SerialTypeLen(se
14f60 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
14f70 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20  nData += len;.  
14f80 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65    nHdr += sqlite
14f90 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
14fa0 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28  l_type);.    if(
14fb0 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
14fc0 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
14fd0 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65   /* Only pure ze
14fe0 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20  ro-filled BLOBs 
14ff0 63 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20  can be input to 
15000 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20  this Opcode..   
15010 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20     ** We do not 
15020 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68  allow blobs with
15030 20 61 20 70 72 65 66 69 78 20 61 6e 64 20 61 20   a prefix and a 
15040 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c  zero-filled tail
15050 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f  . */.      nZero
15060 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   += pRec->u.nZer
15070 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  o;.    }else if(
15080 20 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a   len ){.      nZ
15090 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  ero = 0;.    }. 
150a0 20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65   }..  /* Add the
150b0 20 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20   initial header 
150c0 76 61 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c  varint and total
150d0 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e   the size */.  n
150e0 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d  Hdr += nVarint =
150f0 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
15100 6e 28 6e 48 64 72 29 3b 0a 20 20 69 66 28 20 6e  n(nHdr);.  if( n
15110 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
15120 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b  rintLen(nHdr) ){
15130 0a 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d  .    nHdr++;.  }
15140 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b  .  nByte = nHdr+
15150 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69  nData-nZero;.  i
15160 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69  f( nByte>db->aLi
15170 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
15180 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
15190 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
151a0 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  }..  /* Make sur
151b0 65 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  e the output reg
151c0 69 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66  ister has a buff
151d0 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20  er large enough 
151e0 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74  to store .  ** t
151f0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54  he new record. T
15200 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
15210 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20  er (pOp->p3) is 
15220 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20  not allowed to. 
15230 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68   ** be one of th
15240 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
15250 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66  s (because the f
15260 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f  ollowing call to
15270 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
15280 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64  eMemGrow() could
15290 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c   clobber the val
152a0 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ue before it is 
152b0 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66  used)..  */.  if
152c0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
152d0 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
152e0 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20  nByte, 0) ){.   
152f0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
15300 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d  }.  zNewRecord =
15310 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a   (u8 *)pOut->z;.
15320 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20  .  /* Write the 
15330 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20  record */.  i = 
15340 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77  putVarint32(zNew
15350 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20  Record, nHdr);. 
15360 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30   for(pRec=pData0
15370 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70  ; pRec<=pLast; p
15380 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72 69  Rec++){.    seri
15390 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
153a0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
153b0 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
153c0 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75 74  t);.    i += put
153d0 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65  Varint32(&zNewRe
153e0 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f  cord[i], serial_
153f0 74 79 70 65 29 3b 20 20 20 20 20 20 2f 2a 20 73  type);      /* s
15400 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20  erial type */.  
15410 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61  }.  for(pRec=pDa
15420 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74  ta0; pRec<=pLast
15430 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20 73  ; pRec++){  /* s
15440 65 72 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20 20  erial data */.  
15450 20 20 69 20 2b 3d 20 73 71 6c 69 74 65 33 56 64    i += sqlite3Vd
15460 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65  beSerialPut(&zNe
15470 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e 74  wRecord[i], (int
15480 29 28 6e 42 79 74 65 2d 69 29 2c 20 70 52 65 63  )(nByte-i), pRec
15490 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20  ,file_format);. 
154a0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d   }.  assert( i==
154b0 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65  nByte );..  asse
154c0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
154d0 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
154e0 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  m );.  pOut->n =
154f0 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
15500 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
15510 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b  _Blob | MEM_Dyn;
15520 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20  .  pOut->xDel = 
15530 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29  0;.  if( nZero )
15540 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a  {.    pOut->u.nZ
15550 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20  ero = nZero;.   
15560 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
15570 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20  MEM_Zero;.  }.  
15580 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
15590 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
155a0 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
155b0 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20   ever converted 
155c0 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47  to text */.  REG
155d0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
155e0 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50  >p3, pOut);.  UP
155f0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
15600 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
15610 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
15620 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  Count P1 P2 * * 
15630 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  *.**.** Store th
15640 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
15650 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20  ies (an integer 
15660 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61  value) in the ta
15670 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a  ble or index .**
15680 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
15690 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72  r P1 in register
156a0 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53   P2.*/.#ifndef S
156b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
156c0 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f  COUNT.case OP_Co
156d0 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  unt: {         /
156e0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
156f0 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72  e */.  i64 nEntr
15700 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  y;.  BtCursor *p
15710 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d  Crsr;..  pCrsr =
15720 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
15730 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  1]->pCursor;.  i
15740 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 29  f( ALWAYS(pCrsr)
15750 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
15760 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70  ite3BtreeCount(p
15770 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a  Crsr, &nEntry);.
15780 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e    }else{.    nEn
15790 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70  try = 0;.  }.  p
157a0 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72  Out->u.i = nEntr
157b0 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  y;.  break;.}.#e
157c0 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
157d0 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20   Savepoint P1 * 
157e0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65  * P4 *.**.** Ope
157f0 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f  n, release or ro
15800 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70  llback the savep
15810 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61  oint named by pa
15820 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65  rameter P4, depe
15830 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20  nding.** on the 
15840 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20  value of P1. To 
15850 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70  open a new savep
15860 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20  oint, P1==0. To 
15870 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
15880 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20   an.** existing 
15890 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31  savepoint, P1==1
158a0 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  , or to rollback
158b0 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76   an existing sav
158c0 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f  epoint P1==2..*/
158d0 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69  .case OP_Savepoi
158e0 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20  nt: {.  int p1; 
158f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15900 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
15910 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a   of P1 operand *
15920 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
15930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15940 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73      /* Name of s
15950 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e  avepoint */.  in
15960 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70  t nName;.  Savep
15970 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61  oint *pNew;.  Sa
15980 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
15990 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  int;.  Savepoint
159a0 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53   *pTmp;.  int iS
159b0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20  avepoint;.  int 
159c0 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  ii;..  p1 = pOp-
159d0 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70  >p1;.  zName = p
159e0 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20  Op->p4.z;..  /* 
159f0 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
15a00 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  p1 parameter is 
15a10 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74  valid. Also that
15a20 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
15a30 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61  open.  ** transa
15a40 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72  ction, then ther
15a50 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20  e cannot be any 
15a60 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a  savepoints. .  *
15a70 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  /.  assert( db->
15a80 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c  pSavepoint==0 ||
15a90 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
15aa0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
15ab0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
15ac0 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  GIN||p1==SAVEPOI
15ad0 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d  NT_RELEASE||p1==
15ae0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
15af0 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  CK );.  assert( 
15b00 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c  db->pSavepoint |
15b10 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  | db->isTransact
15b20 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ionSavepoint==0 
15b30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65  );.  assert( che
15b40 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
15b50 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  (db) );.  assert
15b60 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
15b70 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56  ;..  if( p1==SAV
15b80 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a  EPOINT_BEGIN ){.
15b90 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62      if( db->nVdb
15ba0 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
15bb0 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70    /* A new savep
15bc0 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63  oint cannot be c
15bd0 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20  reated if there 
15be0 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65  are active write
15bf0 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65   .      ** state
15c00 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e  ments (i.e. open
15c10 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72   read/write incr
15c20 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e  emental blob han
15c30 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  dles)..      */.
15c40 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
15c50 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
15c60 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
15c70 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d  open savepoint -
15c80 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
15c90 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
15ca0 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
15cb0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
15cc0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
15cd0 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74     nName = sqlit
15ce0 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65  e3Strlen30(zName
15cf0 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
15d00 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
15d10 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68  ABLE.      /* Th
15d20 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76  is call is Ok ev
15d30 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70  en if this savep
15d40 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79  oint is actually
15d50 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20   a transaction. 
15d60 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
15d70 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65  t (and therefore
15d80 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d   should not prom
15d90 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29  pt xSavepoint())
15da0 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20   callbacks..    
15db0 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20    ** If this is 
15dc0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
15dd0 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
15de0 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72  ened, it is guar
15df0 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20  anteed.      ** 
15e00 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54  that the db->aVT
15e10 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20  rans[] array is 
15e20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20  empty.  */.     
15e30 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74   assert( db->aut
15e40 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
15e50 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a  ->nVTrans==0 );.
15e60 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
15e70 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
15e80 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
15e90 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  GIN,.           
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15eb0 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
15ec0 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69  ent+db->nSavepoi
15ed0 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  nt);.      if( r
15ee0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
15ef0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
15f00 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a  _error;.#endif..
15f10 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20        /* Create 
15f20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  a new savepoint 
15f30 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20  structure. */.  
15f40 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74      pNew = sqlit
15f50 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
15f60 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69  , sizeof(Savepoi
15f70 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  nt)+nName+1);.  
15f80 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a      if( pNew ){.
15f90 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e          pNew->zN
15fa0 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70  ame = (char *)&p
15fb0 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20  New[1];.        
15fc0 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61  memcpy(pNew->zNa
15fd0 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65  me, zName, nName
15fe0 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20  +1);.    .      
15ff0 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
16000 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63   no open transac
16010 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20  tion, then mark 
16020 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61  this as a specia
16030 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72  l.        ** "tr
16040 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
16050 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20  int". */.       
16060 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d   if( db->autoCom
16070 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  mit ){.         
16080 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
16090 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64  = 0;.          d
160a0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
160b0 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20  Savepoint = 1;. 
160c0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
160d0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
160e0 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20  epoint++;.      
160f0 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20    }..        /* 
16100 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76  Link the new sav
16110 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20  epoint into the 
16120 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27  database handle'
16130 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20  s list. */.     
16140 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d     pNew->pNext =
16150 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
16160 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
16170 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a  vepoint = pNew;.
16180 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44          pNew->nD
16190 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62  eferredCons = db
161a0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
161b0 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e  .        pNew->n
161c0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
161d0 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
161e0 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
161f0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
16200 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20     iSavepoint = 
16210 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20  0;..    /* Find 
16220 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f  the named savepo
16230 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73  int. If there is
16240 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69   no such savepoi
16250 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20  nt, then an.    
16260 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  ** an error is r
16270 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75  eturned to the u
16280 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72  ser.  */.    for
16290 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69  (.      pSavepoi
162a0 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  nt = db->pSavepo
162b0 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76  int; .      pSav
162c0 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65  epoint && sqlite
162d0 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f  3StrICmp(pSavepo
162e0 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d  int->zName, zNam
162f0 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70  e);.      pSavep
16300 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e  oint = pSavepoin
16310 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a  t->pNext.    ){.
16320 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74        iSavepoint
16330 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
16340 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b  ( !pSavepoint ){
16350 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
16360 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
16370 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63  Msg, db, "no suc
16380 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22  h savepoint: %s"
16390 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
163a0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
163b0 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  R;.    }else if(
163c0 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
163d0 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  0 && p1==SAVEPOI
163e0 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
163f0 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74      /* It is not
16400 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c   possible to rel
16410 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20  ease (commit) a 
16420 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65  savepoint if the
16430 72 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a  re are .      **
16440 20 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74   active write st
16450 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20  atements..      
16460 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
16470 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
16480 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20  rrMsg, db, .    
16490 20 20 20 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65      "cannot rele
164a0 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  ase savepoint - 
164b0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
164c0 6e 20 70 72 6f 67 72 65 73 73 22 0a 20 20 20 20  n progress".    
164d0 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20    );.      rc = 
164e0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
164f0 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f   }else{..      /
16500 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
16510 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20  her or not this 
16520 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  is a transaction
16530 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73   savepoint. If s
16540 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20  o,.      ** and 
16550 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53  this is a RELEAS
16560 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20  E command, then 
16570 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
16580 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a  saction .      *
16590 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20  * is committed. 
165a0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
165b0 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f  int isTransactio
165c0 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  n = pSavepoint->
165d0 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e  pNext==0 && db->
165e0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
165f0 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66  epoint;.      if
16600 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20  ( isTransaction 
16610 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  && p1==SAVEPOINT
16620 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
16630 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71      if( (rc = sq
16640 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
16650 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
16660 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
16670 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
16680 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
16690 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
166a0 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  it = 1;.        
166b0 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
166c0 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
166d0 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20  USY ){.         
166e0 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20   p->pc = pc;.   
166f0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
16700 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
16710 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
16720 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
16730 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
16740 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
16750 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
16760 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
16770 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20  vepoint = 0;.   
16780 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b       rc = p->rc;
16790 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
167a0 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74        iSavepoint
167b0 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
167c0 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d  t - iSavepoint -
167d0 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
167e0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
167f0 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20  LLBACK ){.      
16800 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
16810 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
16820 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
16830 69 74 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c  ite3BtreeTripAll
16840 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b  Cursors(db->aDb[
16850 69 69 5d 2e 70 42 74 2c 20 53 51 4c 49 54 45 5f  ii].pBt, SQLITE_
16860 41 42 4f 52 54 29 3b 0a 20 20 20 20 20 20 20 20  ABORT);.        
16870 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
16880 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
16890 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
168a0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
168b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61  = sqlite3BtreeSa
168c0 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b  vepoint(db->aDb[
168d0 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61  ii].pBt, p1, iSa
168e0 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
168f0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
16900 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
16910 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
16920 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
16930 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16940 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
16950 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
16960 4c 4c 42 41 43 4b 20 26 26 20 28 64 62 2d 3e 66  LLBACK && (db->f
16970 6c 61 67 73 26 53 51 4c 49 54 45 5f 49 6e 74 65  lags&SQLITE_Inte
16980 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 20 29 7b  rnChanges)!=0 ){
16990 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
169a0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
169b0 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
169c0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
169d0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
169e0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
169f0 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
16a00 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61  flags = (db->fla
16a10 67 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65  gs | SQLITE_Inte
16a20 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20  rnChanges);.    
16a30 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
16a40 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64  .      /* Regard
16a50 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
16a60 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53  this is a RELEAS
16a70 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64  E or ROLLBACK, d
16a80 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20  estroy all .    
16a90 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20    ** savepoints 
16aa0 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66  nested inside of
16ab0 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62   the savepoint b
16ac0 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
16ad0 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65  . */.      while
16ae0 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
16af0 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a  !=pSavepoint ){.
16b00 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64          pTmp = d
16b10 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  b->pSavepoint;. 
16b20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
16b30 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e  point = pTmp->pN
16b40 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
16b50 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
16b60 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62  Tmp);.        db
16b70 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
16b80 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
16b90 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c  * If it is a REL
16ba0 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72  EASE, then destr
16bb0 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  oy the savepoint
16bc0 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
16bd0 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f  on .      ** too
16be0 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c  . If it is a ROL
16bf0 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73  LBACK TO, then s
16c00 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  et the number of
16c10 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20   deferred .     
16c20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76   ** constraint v
16c30 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e  iolations presen
16c40 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
16c50 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73  e to the value s
16c60 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77  tored.      ** w
16c70 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e  hen the savepoin
16c80 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20  t was created.  
16c90 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d  */.      if( p1=
16ca0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
16cb0 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  SE ){.        as
16cc0 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74  sert( pSavepoint
16cd0 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ==db->pSavepoint
16ce0 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   );.        db->
16cf0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
16d00 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a  vepoint->pNext;.
16d10 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
16d20 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70  bFree(db, pSavep
16d30 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
16d40 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
16d50 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64  n ){.          d
16d60 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
16d70 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
16d80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
16d90 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
16da0 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  s = pSavepoint->
16db0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
16dc0 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65         db->nDefe
16dd0 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53  rredImmCons = pS
16de0 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72  avepoint->nDefer
16df0 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
16e00 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21    }..      if( !
16e10 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
16e20 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
16e30 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
16e40 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65  nt(db, p1, iSave
16e50 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
16e60 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
16e70 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
16e80 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
16e90 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a     }.    }.  }..
16ea0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
16eb0 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69  pcode: AutoCommi
16ec0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
16ed0 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61  .** Set the data
16ee0 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74  base auto-commit
16ef0 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f   flag to P1 (1 o
16f00 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74  r 0). If P2 is t
16f10 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63  rue, roll.** bac
16f20 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20  k any currently 
16f30 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61  active btree tra
16f40 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68  nsactions. If th
16f50 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
16f60 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74  ve.** VMs (apart
16f70 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c   from this one),
16f80 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b   then a ROLLBACK
16f90 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49   fails.  A COMMI
16fa0 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68  T fails if.** th
16fb0 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
16fc0 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63  riting VMs or ac
16fd0 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73  tive VMs that us
16fe0 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a  e shared cache..
16ff0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
17000 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  uction causes th
17010 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f  e VM to halt..*/
17020 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d  .case OP_AutoCom
17030 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73  mit: {.  int des
17040 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
17050 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b    int iRollback;
17060 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b  .  int turnOnAC;
17070 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43  ..  desiredAutoC
17080 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b  ommit = pOp->p1;
17090 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70  .  iRollback = p
170a0 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e  Op->p2;.  turnOn
170b0 41 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f  AC = desiredAuto
170c0 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61  Commit && !db->a
170d0 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73  utoCommit;.  ass
170e0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
170f0 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73  Commit==1 || des
17100 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
17110 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
17120 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17130 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b  ==1 || iRollback
17140 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
17150 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
17160 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61  >0 );  /* At lea
17170 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69  st this one VM i
17180 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73  s active */.  as
17190 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
171a0 65 72 20 29 3b 0a 0a 23 69 66 20 30 0a 20 20 69  er );..#if 0.  i
171b0 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69  f( turnOnAC && i
171c0 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e  Rollback && db->
171d0 6e 56 64 62 65 41 63 74 69 76 65 3e 31 20 29 7b  nVdbeActive>1 ){
171e0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20  .    /* If this 
171f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
17200 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43  ements a ROLLBAC
17210 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  K and other VMs 
17220 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c  are.    ** still
17230 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20   running, and a 
17240 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
17250 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e  ctive, return an
17260 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e   error indicatin
17270 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68  g.    ** that th
17280 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74  e other VMs must
17290 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e   complete first.
172a0 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c   .    */.    sql
172b0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
172c0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
172d0 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
172e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a  transaction - ".
172f0 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
17300 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
17310 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20  ess");.    rc = 
17320 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
17330 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 69 66  else.#endif.  if
17340 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69  ( turnOnAC && !i
17350 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e  Rollback && db->
17360 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a  nVdbeWrite>0 ){.
17370 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
17380 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
17390 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61  ments a COMMIT a
173a0 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  nd other VMs are
173b0 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20   writing.    ** 
173c0 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
173d0 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
173e0 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
173f0 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
17400 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  t. .    */.    s
17410 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
17420 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
17430 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
17440 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a  transaction - ".
17450 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
17460 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
17470 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20  ess");.    rc = 
17480 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
17490 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64  else if( desired
174a0 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e  AutoCommit!=db->
174b0 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
174c0 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20    if( iRollback 
174d0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
174e0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
174f0 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73  it==1 );.      s
17500 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
17510 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f  l(db, SQLITE_ABO
17520 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20  RT_ROLLBACK);.  
17530 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
17540 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  it = 1;.    }els
17550 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69  e if( (rc = sqli
17560 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
17570 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
17580 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76   ){.      goto v
17590 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
175a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
175b0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
175c0 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  8)desiredAutoCom
175d0 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73  mit;.      if( s
175e0 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
175f0 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
17600 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20  {.        p->pc 
17610 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62  = pc;.        db
17620 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
17630 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74  u8)(1-desiredAut
17640 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20  oCommit);.      
17650 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
17660 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
17670 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
17680 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20  turn;.      }.  
17690 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
176a0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d  db->nStatement==
176b0 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
176c0 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
176d0 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  db);.    if( p->
176e0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
176f0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
17700 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c  TE_DONE;.    }el
17710 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  se{.      rc = S
17720 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
17730 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65   }.    goto vdbe
17740 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65  _return;.  }else
17750 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
17760 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
17770 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20  sg, db,.        
17780 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  (!desiredAutoCom
17790 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61  mit)?"cannot sta
177a0 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
177b0 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
177c0 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20  ction":(.       
177d0 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61   (iRollback)?"ca
177e0 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20  nnot rollback - 
177f0 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
17800 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20  s active":.     
17810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
17820 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e  annot commit - n
17830 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
17840 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20   active"));.    
17850 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53       .    rc = S
17860 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
17870 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
17880 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74  Opcode: Transact
17890 69 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ion P1 P2 * * *.
178a0 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72  **.** Begin a tr
178b0 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20  ansaction.  The 
178c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64 73  transaction ends
178d0 20 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20 6f   when a Commit o
178e0 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70  r Rollback.** op
178f0 63 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e 74 65  code is encounte
17900 72 65 64 2e 20 20 44 65 70 65 6e 64 69 6e 67 20  red.  Depending 
17910 6f 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  on the ON CONFLI
17920 43 54 20 73 65 74 74 69 6e 67 2c 20 74 68 65 0a  CT setting, the.
17930 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  ** transaction m
17940 69 67 68 74 20 61 6c 73 6f 20 62 65 20 72 6f 6c  ight also be rol
17950 6c 65 64 20 62 61 63 6b 20 69 66 20 61 6e 20 65  led back if an e
17960 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
17970 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  red..**.** P1 is
17980 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
17990 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
179a0 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61  on which the tra
179b0 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73  nsaction is.** s
179c0 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30  tarted.  Index 0
179d0 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
179e0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69  abase file and i
179f0 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a  ndex 1 is the.**
17a00 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74   file used for t
17a10 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
17a20 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f    Indices of 2 o
17a30 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20  r more are used 
17a40 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20  for.** attached 
17a50 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a  databases..**.**
17a60 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65   If P2 is non-ze
17a70 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65  ro, then a write
17a80 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
17a90 73 74 61 72 74 65 64 2e 20 20 41 20 52 45 53 45  started.  A RESE
17aa0 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20  RVED lock is.** 
17ab0 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20  obtained on the 
17ac0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68  database file wh
17ad0 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
17ae0 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
17af0 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20  d.  No.** other 
17b00 70 72 6f 63 65 73 73 20 63 61 6e 20 73 74 61 72  process can star
17b10 74 20 61 6e 6f 74 68 65 72 20 77 72 69 74 65 20  t another write 
17b20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c  transaction whil
17b30 65 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  e this transacti
17b40 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61  on is.** underwa
17b50 79 2e 20 20 53 74 61 72 74 69 6e 67 20 61 20 77  y.  Starting a w
17b60 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
17b70 20 61 6c 73 6f 20 63 72 65 61 74 65 73 20 61 20   also creates a 
17b80 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
17b90 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20 74 72 61  . A.** write tra
17ba0 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65  nsaction must be
17bb0 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20   started before 
17bc0 61 6e 79 20 63 68 61 6e 67 65 73 20 63 61 6e 20  any changes can 
17bd0 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a  be made to the.*
17be0 2a 20 64 61 74 61 62 61 73 65 2e 20 20 49 66 20  * database.  If 
17bf0 50 32 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P2 is greater th
17c00 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 32  an or equal to 2
17c10 20 74 68 65 6e 20 61 6e 20 45 58 43 4c 55 53 49   then an EXCLUSI
17c20 56 45 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 61 6c  VE lock is.** al
17c30 73 6f 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74  so obtained on t
17c40 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  he file..**.** I
17c50 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  f a write-transa
17c60 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
17c70 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73   and the Vdbe.us
17c80 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c  esStmtJournal fl
17c90 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74  ag is.** true (t
17ca0 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  his flag is set 
17cb0 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20  if the Vdbe may 
17cc0 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e  modify more than
17cd0 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79   one row and may
17ce0 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  .** throw an ABO
17cf0 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61  RT exception), a
17d00 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
17d10 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20  action may also 
17d20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f  be opened..** Mo
17d30 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c  re specifically,
17d40 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
17d50 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e  nsaction is open
17d60 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62  ed iff the datab
17d70 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
17d80 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e  n is currently n
17d90 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  ot in autocommit
17da0 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65   mode, or if the
17db0 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20  re are other.** 
17dc0 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
17dd0 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74  s. A statement t
17de0 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77  ransaction allow
17df0 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61  s the changes ma
17e00 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44  de by this.** VD
17e10 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  BE to be rolled 
17e20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  back after an er
17e30 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69  ror without havi
17e40 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20  ng to roll back 
17e50 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72  the.** entire tr
17e60 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f  ansaction. If no
17e70 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
17e80 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65  tered, the state
17e90 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
17ea0 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  .** will automat
17eb0 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68  ically commit wh
17ec0 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74  en the VDBE halt
17ed0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69  s..**.** If P2 i
17ee0 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72  s zero, then a r
17ef0 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61  ead-lock is obta
17f00 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61  ined on the data
17f10 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61  base file..*/.ca
17f20 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f  se OP_Transactio
17f30 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42  n: {.  Btree *pB
17f40 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  t;..  assert( p-
17f50 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
17f60 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
17f70 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  nly==0 || pOp->p
17f80 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  2==0 );.  assert
17f90 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
17fa0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
17fb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
17fc0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
17fd0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
17fe0 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 69 66  >p1))!=0 );.  if
17ff0 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62  ( pOp->p2 && (db
18000 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
18010 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29  _QueryOnly)!=0 )
18020 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
18030 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20  E_READONLY;.    
18040 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18050 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
18060 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
18070 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66  ->p1].pBt;..  if
18080 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20  ( pBt ){.    rc 
18090 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
180a0 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f  ginTrans(pBt, pO
180b0 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20  p->p2);.    if( 
180c0 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
180d0 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  ){.      p->pc =
180e0 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63   pc;.      p->rc
180f0 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
18100 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  USY;.      goto 
18110 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
18120 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53   }.    if( rc!=S
18130 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
18140 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
18150 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
18160 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ..    if( pOp->p
18170 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74  2 && p->usesStmt
18180 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26  Journal .     &&
18190 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   (db->autoCommit
181a0 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65  ==0 || db->nVdbe
181b0 52 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a  Read>1) .    ){.
181c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
181d0 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72  lite3BtreeIsInTr
181e0 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20  ans(pBt) );.    
181f0 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d    if( p->iStatem
18200 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ent==0 ){.      
18210 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53    assert( db->nS
18220 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64  tatement>=0 && d
18230 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30  b->nSavepoint>=0
18240 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   );.        db->
18250 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20  nStatement++; . 
18260 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65         p->iState
18270 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  ment = db->nSave
18280 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61  point + db->nSta
18290 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a  tement;.      }.
182a0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
182b0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
182c0 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42  (db, SAVEPOINT_B
182d0 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d  EGIN, p->iStatem
182e0 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66  ent-1);.      if
182f0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
18300 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
18310 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
18320 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53  nStmt(pBt, p->iS
18330 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20  tatement);.     
18340 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f   }..      /* Sto
18350 72 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76  re the current v
18360 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61  alue of the data
18370 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66  base handles def
18380 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
18390 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65  .      ** counte
183a0 72 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d  r. If the statem
183b0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
183c0 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
183d0 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a  ed back,.      *
183e0 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
183f0 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64  his counter need
18400 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64  s to be restored
18410 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20   too.  */.      
18420 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20  p->nStmtDefCons 
18430 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  = db->nDeferredC
18440 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53  ons;.      p->nS
18450 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20  tmtDefImmCons = 
18460 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
18470 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Cons;.    }.  }.
18480 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
18490 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69  pcode: ReadCooki
184a0 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
184b0 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65  *.** Read cookie
184c0 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20   number P3 from 
184d0 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
184e0 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65  write it into re
184f0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33  gister P2..** P3
18500 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
18510 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d  a version.  P3==
18520 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
18530 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d  e format..** P3=
18540 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
18550 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
18560 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  e size, and so f
18570 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a  orth.  P1==0 is.
18580 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
18590 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
185a0 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
185b0 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
185c0 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72   store.** tempor
185d0 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
185e0 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20  * There must be 
185f0 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74  a read-lock on t
18600 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74  he database (eit
18610 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
18620 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61  n.** must be sta
18630 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75  rted or there mu
18640 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75  st be an open cu
18650 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20  rsor) before.** 
18660 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69  executing this i
18670 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
18680 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69  ase OP_ReadCooki
18690 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
186a0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
186b0 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69  lease */.  int i
186c0 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Meta;.  int iDb;
186d0 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a  .  int iCookie;.
186e0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
186f0 73 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62  sReader );.  iDb
18700 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43   = pOp->p1;.  iC
18710 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b  ookie = pOp->p3;
18720 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
18730 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p3<SQLITE_N_BTRE
18740 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65  E_META );.  asse
18750 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
18760 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
18770 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69  ssert( db->aDb[i
18780 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db].pBt!=0 );.  
18790 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
187a0 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
187b0 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20  sk)1)<<iDb))!=0 
187c0 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72  );..  sqlite3Btr
187d0 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44  eeGetMeta(db->aD
187e0 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f  b[iDb].pBt, iCoo
187f0 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65  kie, (u32 *)&iMe
18800 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ta);.  pOut->u.i
18810 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61   = iMeta;.  brea
18820 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
18830 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
18840 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
18850 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ite the content 
18860 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28  of register P3 (
18870 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
18880 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e  n integer).** in
18890 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
188a0 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
188b0 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68  P1.  P2==1 is th
188c0 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
188d0 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20  .  .** P2==2 is 
188e0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
188f0 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68  mat. P2==3 is th
18900 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
18910 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
18920 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
18930 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
18940 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
18950 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
18960 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
18970 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
18980 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
18990 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
189a0 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
189b0 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
189c0 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
189d0 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
189e0 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20  OP_SetCookie: { 
189f0 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
18a00 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
18a10 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
18a20 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
18a30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
18a40 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
18a50 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
18a60 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
18a70 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
18a80 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29  ask)1)<<pOp->p1)
18a90 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
18aa0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
18ab0 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
18ac0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
18ad0 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
18ae0 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
18af0 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
18b00 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70  utexHeld(db, pOp
18b10 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70 49  ->p1, 0) );.  pI
18b20 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
18b30 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p3];.  sqlite3Vd
18b40 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
18b50 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20  pIn3);.  /* See 
18b60 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78  note about index
18b70 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f   shifting on OP_
18b80 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20  ReadCookie */.  
18b90 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18ba0 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d  eUpdateMeta(pDb-
18bb0 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28  >pBt, pOp->p2, (
18bc0 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  int)pIn3->u.i);.
18bd0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42    if( pOp->p2==B
18be0 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53  TREE_SCHEMA_VERS
18bf0 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68  ION ){.    /* Wh
18c00 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  en the schema co
18c10 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65  okie changes, re
18c20 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f  cord the new coo
18c30 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a  kie internally *
18c40 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
18c50 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
18c60 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75  e = (int)pIn3->u
18c70 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  .i;.    db->flag
18c80 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65  s |= SQLITE_Inte
18c90 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c  rnChanges;.  }el
18ca0 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  se if( pOp->p2==
18cb0 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41  BTREE_FILE_FORMA
18cc0 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f  T ){.    /* Reco
18cd0 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  rd changes in th
18ce0 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f  e file format */
18cf0 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
18d00 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  a->file_format =
18d10 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a   (u8)pIn3->u.i;.
18d20 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
18d30 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49  1==1 ){.    /* I
18d40 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72  nvalidate all pr
18d50 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
18d60 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 54  s whenever the T
18d70 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 20  EMP database.   
18d80 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68   ** schema is ch
18d90 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23  anged.  Ticket #
18da0 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69  1644 */.    sqli
18db0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
18dc0 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
18dd0 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
18de0 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 0;.  }.  break
18df0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
18e00 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31 20  VerifyCookie P1 
18e10 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
18e20 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20  Check the value 
18e30 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74 61 62 61  of global databa
18e40 73 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d  se parameter num
18e50 62 65 72 20 30 20 28 74 68 65 0a 2a 2a 20 73 63  ber 0 (the.** sc
18e60 68 65 6d 61 20 76 65 72 73 69 6f 6e 29 20 61 6e  hema version) an
18e70 64 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69  d make sure it i
18e80 73 20 65 71 75 61 6c 20 74 6f 20 50 32 20 61 6e  s equal to P2 an
18e90 64 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 67 65  d that the.** ge
18ea0 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
18eb0 20 6f 6e 20 74 68 65 20 6c 6f 63 61 6c 20 73 63   on the local sc
18ec0 68 65 6d 61 20 70 61 72 73 65 20 65 71 75 61 6c  hema parse equal
18ed0 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  s P3..**.** P1 i
18ee0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e  s the database n
18ef0 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 30  umber which is 0
18f00 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
18f10 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61  tabase file.** a
18f20 6e 64 20 31 20 66 6f 72 20 74 68 65 20 66 69 6c  nd 1 for the fil
18f30 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72  e holding tempor
18f40 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 73  ary tables and s
18f50 6f 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62 65  ome higher numbe
18f60 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69 61  r.** for auxilia
18f70 72 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a  ry databases..**
18f80 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63  .** The cookie c
18f90 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65  hanges its value
18fa0 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   whenever the da
18fb0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
18fc0 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f  anges..** This o
18fd0 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64  peration is used
18fe0 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20   to detect when 
18ff0 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20  that the cookie 
19000 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61  has changed.** a
19010 6e 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72  nd that the curr
19020 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64  ent process need
19030 73 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20  s to reread the 
19040 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69  schema..**.** Ei
19050 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69  ther a transacti
19060 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76 65  on needs to have
19070 20 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f 72   been started or
19080 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64   an OP_Open need
19090 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63 75  s.** to be execu
190a0 74 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69 73  ted (to establis
190b0 68 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20 62  h a read lock) b
190c0 65 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f 64  efore this opcod
190d0 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e  e is.** invoked.
190e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72 69  .*/.case OP_Veri
190f0 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e  fyCookie: {.  in
19100 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69  t iMeta;.  int i
19110 47 65 6e 3b 0a 20 20 42 74 72 65 65 20 2a 70 42  Gen;.  Btree *pB
19120 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t;..  assert( pO
19130 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
19140 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
19150 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
19160 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
19170 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29  ask)1)<<pOp->p1)
19180 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
19190 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
191a0 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70  utexHeld(db, pOp
191b0 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 61 73  ->p1, 0) );.  as
191c0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
191d0 65 72 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  er );.  pBt = db
191e0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
191f0 42 74 3b 0a 20 20 69 66 28 20 70 42 74 20 29 7b  Bt;.  if( pBt ){
19200 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
19210 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54  eGetMeta(pBt, BT
19220 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
19230 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ON, (u32 *)&iMet
19240 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64  a);.    iGen = d
19250 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
19260 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61  pSchema->iGenera
19270 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  tion;.  }else{. 
19280 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20     iGen = iMeta 
19290 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  = 0;.  }.  if( i
192a0 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20 7c 7c  Meta!=pOp->p2 ||
192b0 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 33 20 29   iGen!=pOp->p3 )
192c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
192d0 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
192e0 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
192f0 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53  Msg = sqlite3DbS
19300 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62  trDup(db, "datab
19310 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
19320 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a  hanged");.    /*
19330 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63   If the schema-c
19340 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64  ookie from the d
19350 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74  atabase file mat
19360 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20  ches the cookie 
19370 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77  .    ** stored w
19380 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72  ith the in-memor
19390 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  y representation
193a0 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20   of the schema, 
193b0 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65  do.    ** not re
193c0 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  load the schema 
193d0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
193e0 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20  e file..    **. 
193f0 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c     ** If virtual
19400 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75  -tables are in u
19410 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  se, this is not 
19420 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61  just an optimiza
19430 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74  tion..    ** Oft
19440 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f  en, v-tables sto
19450 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e  re their data in
19460 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61   other SQLite ta
19470 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20  bles, which.    
19480 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66  ** are queried f
19490 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74  rom within xNext
194a0 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74  () and other v-t
194b0 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69  able methods usi
194c0 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72  ng.    ** prepar
194d0 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73  ed queries. If s
194e0 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f  uch a query is o
194f0 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64  ut-of-date, we d
19500 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20  o not want to.  
19510 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65    ** discard the
19520 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
19530 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f  , as the user co
19540 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  de implementing 
19550 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62  the.    ** v-tab
19560 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f  le would have to
19570 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68   be ready for th
19580 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  e sqlite3_vtab s
19590 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a  tructure itself.
195a0 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76      ** to be inv
195b0 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65  alidated wheneve
195c0 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
195d0 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
195e0 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61  within .    ** a
195f0 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e   v-table method.
19600 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
19610 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
19620 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
19630 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29  _cookie!=iMeta )
19640 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
19650 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
19660 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
19670 7d 0a 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  }..    p->expire
19680 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20  d = 1;.    rc = 
19690 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20  SQLITE_SCHEMA;. 
196a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
196b0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65  * Opcode: OpenRe
196c0 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ad P1 P2 P3 P4 P
196d0 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  5.**.** Open a r
196e0 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
196f0 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
19700 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
19710 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
19720 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
19730 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
19740 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
19750 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
19760 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
19770 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
19780 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
19790 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
197a0 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
197b0 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
197c0 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
197d0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
197e0 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
197f0 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
19800 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
19810 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
19820 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
19830 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
19840 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
19850 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
19860 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
19870 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
19880 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
19890 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
198a0 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
198b0 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
198c0 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
198d0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
198e0 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
198f0 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
19900 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
19910 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
19920 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
19930 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
19940 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
19950 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
19960 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
19970 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
19980 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
19990 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
199a0 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
199b0 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
199c0 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
199d0 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
199e0 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
199f0 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
19a00 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
19a10 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
19a20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
19a30 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
19a40 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
19a50 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
19a60 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
19a70 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
19a80 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
19a90 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
19aa0 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
19ab0 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
19ac0 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
19ad0 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
19ae0 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
19af0 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
19b00 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
19b10 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
19b20 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
19b30 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
19b40 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
19b50 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
19b60 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
19b70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
19b80 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
19b90 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
19ba0 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
19bb0 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
19bc0 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
19bd0 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
19be0 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
19bf0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
19c00 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
19c10 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
19c20 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
19c30 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
19c40 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
19c50 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57  * See also OpenW
19c60 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  rite..*/./* Opco
19c70 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
19c80 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
19c90 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77  ** Open a read/w
19ca0 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65  rite cursor name
19cb0 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c  d P1 on the tabl
19cc0 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
19cd0 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73   root.** page is
19ce0 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d   P2.  Or if P5!=
19cf0 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  0 use the conten
19d00 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
19d10 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20   to find the.** 
19d20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a  root page..**.**
19d30 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
19d40 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
19d50 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
19d60 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
19d70 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
19d80 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
19d90 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
19da0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
19db0 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
19dc0 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
19dd0 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
19de0 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
19df0 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
19e00 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
19e10 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
19e20 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
19e30 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
19e40 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
19e50 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
19e60 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
19e70 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f   in the table, o
19e80 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67  r to the.** larg
19e90 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79  est index of any
19ea0 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74   column of the t
19eb0 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63 74  able that is act
19ec0 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a  ually used..**.*
19ed0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
19ee0 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  on works just li
19ef0 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65  ke OpenRead exce
19f00 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
19f10 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69   the cursor.** i
19f20 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64  n read/write mod
19f30 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20  e.  For a given 
19f40 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e  table, there can
19f50 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   be one or more 
19f60 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72  read-only.** cur
19f70 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65  sors or a single
19f80 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
19f90 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e  or but not both.
19fa0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
19fb0 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73  OpenRead..*/.cas
19fc0 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63  e OP_OpenRead:.c
19fd0 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ase OP_OpenWrite
19fe0 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64  : {.  int nField
19ff0 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
1a000 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b  yInfo;.  int p2;
1a010 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
1a020 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65  t wrFlag;.  Btre
1a030 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72  e *pX;.  VdbeCur
1a040 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20  sor *pCur;.  Db 
1a050 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pDb;..  assert(
1a060 20 28 70 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41   (pOp->p5&(OPFLA
1a070 47 5f 50 32 49 53 52 45 47 7c 4f 50 46 4c 41 47  G_P2ISREG|OPFLAG
1a080 5f 42 55 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d  _BULKCSR))==pOp-
1a090 3e 70 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >p5 );.  assert(
1a0a0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1a0b0 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f  _OpenWrite || pO
1a0c0 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73  p->p5==0 );.  as
1a0d0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1a0e0 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  er );.  assert( 
1a0f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1a100 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 2d 3e 72  OpenRead || p->r
1a110 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20  eadOnly==0 );.. 
1a120 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20   if( p->expired 
1a130 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
1a140 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62 72  TE_ABORT;.    br
1a150 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65  eak;.  }..  nFie
1a160 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e  ld = 0;.  pKeyIn
1a170 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70  fo = 0;.  p2 = p
1a180 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20  Op->p2;.  iDb = 
1a190 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
1a1a0 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
1a1b0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1a1c0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
1a1d0 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
1a1e0 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b  )1)<<iDb))!=0 );
1a1f0 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
1a200 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70  b[iDb];.  pX = p
1a210 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72  Db->pBt;.  asser
1a220 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66  t( pX!=0 );.  if
1a230 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1a240 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20  P_OpenWrite ){. 
1a250 20 20 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20     wrFlag = 1;. 
1a260 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
1a270 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
1a280 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b  d(db, iDb, 0) );
1a290 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53  .    if( pDb->pS
1a2a0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1a2b0 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at < p->minWrite
1a2c0 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20  FileFormat ){.  
1a2d0 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46      p->minWriteF
1a2e0 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d  ileFormat = pDb-
1a2f0 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
1a300 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  ormat;.    }.  }
1a310 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67  else{.    wrFlag
1a320 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
1a330 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1a340 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20  _P2ISREG ){.    
1a350 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a  assert( p2>0 );.
1a360 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d      assert( p2<=
1a370 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 70  p->nMem );.    p
1a380 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  In2 = &aMem[p2];
1a390 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
1a3a0 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b  IsValid(pIn2) );
1a3b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49  .    assert( (pI
1a3c0 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
1a3d0 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73  Int)!=0 );.    s
1a3e0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
1a3f0 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
1a400 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e     p2 = (int)pIn
1a410 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54  2->u.i;.    /* T
1a420 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61  he p2 value alwa
1a430 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20  ys comes from a 
1a440 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54  prior OP_CreateT
1a450 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a  able opcode and.
1a460 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f      ** that opco
1a470 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73  de will always s
1a480 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20  et the p2 value 
1a490 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20  to 2 or more or 
1a4a0 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a  else fail..    *
1a4b0 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20  * If there were 
1a4c0 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70  a failure, the p
1a4d0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
1a4e0 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c  t would have hal
1a4f0 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72  ted.    ** befor
1a500 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20  e reaching this 
1a510 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a  instruction. */.
1a520 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 70 32      if( NEVER(p2
1a530 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63  <2) ) {.      rc
1a540 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
1a550 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f  T_BKPT;.      go
1a560 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1a570 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
1a580 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
1a590 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1a5a0 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d  {.    pKeyInfo =
1a5b0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1a5c0 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 2d  o;.    pKeyInfo-
1a5d0 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62  >enc = ENC(p->db
1a5e0 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  );.    nField = 
1a5f0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
1a600 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  +1;.  }else if( 
1a610 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1a620 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
1a630 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1a640 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1a650 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70  Op->p1>=0 );.  p
1a660 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
1a670 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1a680 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29   nField, iDb, 1)
1a690 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20  ;.  if( pCur==0 
1a6a0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1a6b0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
1a6c0 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72   1;.  pCur->isOr
1a6d0 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 72 63 20  dered = 1;.  rc 
1a6e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1a6f0 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46  rsor(pX, p2, wrF
1a700 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70  lag, pKeyInfo, p
1a710 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  Cur->pCursor);. 
1a720 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20   pCur->pKeyInfo 
1a730 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  = pKeyInfo;.  as
1a740 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c  sert( OPFLAG_BUL
1a750 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b  KCSR==BTREE_BULK
1a760 4c 4f 41 44 20 29 3b 0a 20 20 73 71 6c 69 74 65  LOAD );.  sqlite
1a770 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74  3BtreeCursorHint
1a780 73 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c  s(pCur->pCursor,
1a790 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
1a7a0 41 47 5f 42 55 4c 4b 43 53 52 29 29 3b 0a 0a 20  AG_BULKCSR));.. 
1a7b0 20 2f 2a 20 53 69 6e 63 65 20 69 74 20 70 65 72   /* Since it per
1a7c0 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20  forms no memory 
1a7d0 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f  allocation or IO
1a7e0 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65  , the only value
1a7f0 20 74 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74   that.  ** sqlit
1a800 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20  e3BtreeCursor() 
1a810 6d 61 79 20 72 65 74 75 72 6e 20 69 73 20 53 51  may return is SQ
1a820 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61 73  LITE_OK. */.  as
1a830 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
1a840 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 53 65 74  _OK );..  /* Set
1a850 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1a860 69 73 54 61 62 6c 65 20 61 6e 64 20 69 73 49 6e  isTable and isIn
1a870 64 65 78 20 76 61 72 69 61 62 6c 65 73 2e 20 50  dex variables. P
1a880 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
1a890 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20   of.  ** SQLite 
1a8a0 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66  used to check if
1a8b0 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66   the root-page f
1a8c0 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61  lags were sane a
1a8d0 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a  t this point.  *
1a8e0 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74  * and report dat
1a8f0 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
1a900 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f   if they were no
1a910 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63  t, but this chec
1a920 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65  k has.  ** since
1a930 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
1a940 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f  btree layer.  */
1a950 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62    .  pCur->isTab
1a960 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65  le = pOp->p4type
1a970 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20  !=P4_KEYINFO;.  
1a980 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20  pCur->isIndex = 
1a990 21 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 3b 0a  !pCur->isTable;.
1a9a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1a9b0 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d  pcode: OpenEphem
1a9c0 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  eral P1 P2 * P4 
1a9d0 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P5.**.** Open a 
1a9e0 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f  new cursor P1 to
1a9f0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1aa00 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1aa10 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e  r is always open
1aa20 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76  ed read/write ev
1aa30 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61  en if .** the ma
1aa40 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72  in database is r
1aa50 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65  ead-only.  The e
1aa60 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c  phemeral.** tabl
1aa70 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
1aa80 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
1aa90 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
1aaa0 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  osed..**.** P2 i
1aab0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1aac0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65  columns in the e
1aad0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a  phemeral table..
1aae0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f  ** The cursor po
1aaf0 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20  ints to a BTree 
1ab00 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61  table if P4==0 a
1ab10 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e  nd to a BTree in
1ab20 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20  dex.** if P4 is 
1ab30 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73  not 0.  If P4 is
1ab40 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f   not NULL, it po
1ab50 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66  ints to a KeyInf
1ab60 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74  o structure.** t
1ab70 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
1ab80 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69  format of keys i
1ab90 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a  n the index..**.
1aba0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1abb0 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f  as once called O
1abc0 70 65 6e 54 65 6d 70 2e 20 20 42 75 74 20 74 68  penTemp.  But th
1abd0 61 74 20 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f  at created.** co
1abe0 6e 66 75 73 69 6f 6e 20 62 65 63 61 75 73 65 20  nfusion because 
1abf0 74 68 65 20 74 65 72 6d 20 22 74 65 6d 70 20 74  the term "temp t
1ac00 61 62 6c 65 22 2c 20 6d 69 67 68 74 20 72 65 66  able", might ref
1ac10 65 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20  er either.** to 
1ac20 61 20 54 45 4d 50 20 74 61 62 6c 65 20 61 74 20  a TEMP table at 
1ac30 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f  the SQL level, o
1ac40 72 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 70 65  r to a table ope
1ac50 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f  ned by.** this o
1ac60 70 63 6f 64 65 2e 20 20 54 68 65 6e 20 74 68 69  pcode.  Then thi
1ac70 73 20 6f 70 63 6f 64 65 20 77 61 73 20 63 61 6c  s opcode was cal
1ac80 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20 20  l OpenVirtual.  
1ac90 42 75 74 0a 2a 2a 20 74 68 61 74 20 63 72 65 61  But.** that crea
1aca0 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69  ted confusion wi
1acb0 74 68 20 74 68 65 20 77 68 6f 6c 65 20 76 69 72  th the whole vir
1acc0 74 75 61 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e  tual-table idea.
1acd0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  .**.** The P5 pa
1ace0 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61  rameter can be a
1acf0 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52   mask of the BTR
1ad00 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  EE_* flags defin
1ad10 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68  ed.** in btree.h
1ad20 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63  .  These flags c
1ad30 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f  ontrol aspects o
1ad40 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  f the operation 
1ad50 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e  of.** the btree.
1ad60 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54    The BTREE_OMIT
1ad70 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52  _JOURNAL and BTR
1ad80 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20  EE_SINGLE flags 
1ad90 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74  are.** added aut
1ada0 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f  omatically..*/./
1adb0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75  * Opcode: OpenAu
1adc0 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20  toindex P1 P2 * 
1add0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4 *.**.** This 
1ade0 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65  opcode works the
1adf0 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e   same as OP_Open
1ae00 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68  Ephemeral.  It h
1ae10 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e  as a.** differen
1ae20 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e  t name to distin
1ae30 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20 20  guish its use.  
1ae40 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75  Tables created u
1ae50 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20  sing.** by this 
1ae60 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1ae70 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69  sed for automati
1ae80 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72  cally created tr
1ae90 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63  ansient.** indic
1aea0 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a  es in joins..*/.
1aeb0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f  case OP_OpenAuto
1aec0 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f  index: .case OP_
1aed0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b  OpenEphemeral: {
1aee0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1aef0 43 78 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  Cx;.  static con
1af00 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20  st int vfsFlags 
1af10 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  = .      SQLITE_
1af20 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c  OPEN_READWRITE |
1af30 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1af40 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20  EN_CREATE |.    
1af50 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58    SQLITE_OPEN_EX
1af60 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20  CLUSIVE |.      
1af70 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45  SQLITE_OPEN_DELE
1af80 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20  TEONCLOSE |.    
1af90 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52    SQLITE_OPEN_TR
1afa0 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61  ANSIENT_DB;..  a
1afb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1afc0 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1afd0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1afe0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1aff0 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70   -1, 1);.  if( p
1b000 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1b010 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1b020 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  Row = 1;.  rc = 
1b030 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e  sqlite3BtreeOpen
1b040 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62  (db->pVfs, 0, db
1b050 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20  , &pCx->pBt, .  
1b060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b070 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54        BTREE_OMIT
1b080 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45  _JOURNAL | BTREE
1b090 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70  _SINGLE | pOp->p
1b0a0 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20  5, vfsFlags);.  
1b0b0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1b0c0 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
1b0d0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
1b0e0 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31  rans(pCx->pBt, 1
1b0f0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
1b100 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1b110 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
1b120 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
1b130 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
1b140 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
1b150 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
1b160 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74  reateTable() wit
1b170 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42  h the BTREE_BLOB
1b180 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a  KEY flag before.
1b190 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69      ** opening i
1b1a0 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  t. If a transien
1b1b0 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69  t table is requi
1b1c0 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68  red, just use th
1b1d0 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74  e.    ** automat
1b1e0 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1b1f0 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70  able with root-p
1b200 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49  age 1 (an BLOB_I
1b210 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20  NTKEY table)..  
1b220 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70    */.    if( pOp
1b230 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b  ->p4.pKeyInfo ){
1b240 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b  .      int pgno;
1b250 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1b260 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1b270 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20  EYINFO );.      
1b280 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b290 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78  eCreateTable(pCx
1b2a0 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54  ->pBt, &pgno, BT
1b2b0 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f  REE_BLOBKEY | pO
1b2c0 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69  p->p5); .      i
1b2d0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1b2e0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1b2f0 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52  rt( pgno==MASTER
1b300 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20  _ROOT+1 );.     
1b310 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1b320 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1b330 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20  pBt, pgno, 1, . 
1b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1b360 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34  KeyInfo*)pOp->p4
1b370 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72  .z, pCx->pCursor
1b380 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e  );.        pCx->
1b390 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1b3a0 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
1b3b0 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e       pCx->pKeyIn
1b3c0 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d  fo->enc = ENC(p-
1b3d0 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  >db);.      }.  
1b3e0 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1b3f0 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1b400 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1b410 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1b420 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f  Cx->pBt, MASTER_
1b430 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d  ROOT, 1, 0, pCx-
1b440 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1b450 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1b460 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  1;.    }.  }.  p
1b470 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  Cx->isOrdered = 
1b480 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f  (pOp->p5!=BTREE_
1b490 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 70 43  UNORDERED);.  pC
1b4a0 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43  x->isIndex = !pC
1b4b0 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72  x->isTable;.  br
1b4c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1b4d0 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31  e: SorterOpen P1
1b4e0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
1b4f0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
1b500 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45  ks like OP_OpenE
1b510 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20  phemeral except 
1b520 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a  that it opens.**
1b530 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1b540 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69  ex that is speci
1b550 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64  fically designed
1b560 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a   to sort large.*
1b570 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61  * tables using a
1b580 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65  n external merge
1b590 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e  -sort algorithm.
1b5a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
1b5b0 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  erOpen: {.  Vdbe
1b5c0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
1b5d0 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1b5e0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1b5f0 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29   pOp->p2, -1, 1)
1b600 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1b610 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1b620 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1b630 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1b640 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  ;.  pCx->pKeyInf
1b650 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e  o->enc = ENC(p->
1b660 64 62 29 3b 0a 20 20 70 43 78 2d 3e 69 73 53 6f  db);.  pCx->isSo
1b670 72 74 65 72 20 3d 20 31 3b 0a 20 20 72 63 20 3d  rter = 1;.  rc =
1b680 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
1b690 65 72 49 6e 69 74 28 64 62 2c 20 70 43 78 29 3b  erInit(db, pCx);
1b6a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1b6b0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75  Opcode: OpenPseu
1b6c0 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  do P1 P2 P3 * P5
1b6d0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
1b6e0 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f  w cursor that po
1b6f0 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74  ints to a fake t
1b700 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
1b710 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ns a single.** r
1b720 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ow of data.  The
1b730 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74   content of that
1b740 20 6f 6e 65 20 72 6f 77 20 69 6e 20 74 68 65 20   one row in the 
1b750 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72  content of memor
1b760 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  y.** register P2
1b770 20 77 68 65 6e 20 50 35 3d 3d 30 2e 20 20 49 6e   when P5==0.  In
1b780 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75   other words, cu
1b790 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20  rsor P1 becomes 
1b7a0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
1b7b0 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f   .** MEM_Blob co
1b7c0 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20  ntent contained 
1b7d0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
1b7e0 20 57 68 65 6e 20 50 35 3d 3d 31 2c 20 74 68 65   When P5==1, the
1b7f0 6e 20 74 68 65 0a 2a 2a 20 72 6f 77 20 69 73 20  n the.** row is 
1b800 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 50  represented by P
1b810 33 20 63 6f 6e 73 65 63 75 74 69 76 65 20 72 65  3 consecutive re
1b820 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
1b830 67 20 77 69 74 68 20 50 32 2e 0a 2a 2a 0a 2a 2a  g with P2..**.**
1b840 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   A pseudo-table 
1b850 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20  created by this 
1b860 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
1b870 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a  o hold a single.
1b880 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72  ** row output fr
1b890 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f  om the sorter so
1b8a0 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61   that the row ca
1b8b0 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20  n be decomposed 
1b8c0 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75  into.** individu
1b8d0 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67  al columns using
1b8e0 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
1b8f0 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43  pcode.  The OP_C
1b900 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20  olumn opcode.** 
1b910 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73  is the only curs
1b920 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77  or opcode that w
1b930 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75  orks with a pseu
1b940 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
1b950 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P3 is the number
1b960 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
1b970 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77  e records that w
1b980 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79  ill be stored by
1b990 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74  .** the pseudo-t
1b9a0 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
1b9b0 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20  _OpenPseudo: {. 
1b9c0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1b9d0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1b9e0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p1>=0 );.  pCx
1b9f0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1ba00 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1ba10 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20  p->p3, -1, 0);. 
1ba20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1ba30 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1ba40 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1ba50 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c   pCx->pseudoTabl
1ba60 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  eReg = pOp->p2;.
1ba70 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1ba80 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64   1;.  pCx->isInd
1ba90 65 78 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 6d  ex = 0;.  pCx->m
1baa0 75 6c 74 69 50 73 65 75 64 6f 20 3d 20 70 4f 70  ultiPseudo = pOp
1bab0 2d 3e 70 35 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p5;.  break;.}
1bac0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f  ../* Opcode: Clo
1bad0 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  se P1 * * * *.**
1bae0 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73  .** Close a curs
1baf0 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  or previously op
1bb00 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20  ened as P1.  If 
1bb10 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72  P1 is not.** cur
1bb20 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69  rently open, thi
1bb30 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
1bb40 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
1bb50 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20  e OP_Close: {.  
1bb60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1bb70 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1bb80 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71  >nCursor );.  sq
1bb90 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72  lite3VdbeFreeCur
1bba0 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b  sor(p, p->apCsr[
1bbb0 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e  pOp->p1]);.  p->
1bbc0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d  apCsr[pOp->p1] =
1bbd0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
1bbe0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1bbf0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
1bc00 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1bc10 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1bc20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1bc30 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1bc40 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1bc50 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1bc60 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74  register P3 as t
1bc70 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73  he key.  If curs
1bc80 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1bc90 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1bca0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1bcb0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1bcc0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1bcd0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1bce0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1bcf0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1bd00 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1bd10 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1bd20 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1bd30 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1bd40 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1bd50 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
1bd60 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1bd70 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1bd80 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1bd90 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e  .** greater than
1bda0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1bdb0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1bdc0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1bdd0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1bde0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1bdf0 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69   NotFound, Disti
1be00 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65  nct, SeekLt, See
1be10 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGt, SeekLe.*/./
1be20 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 74  * Opcode: SeekGt
1be30 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1be40 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1be50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1be60 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1be70 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1be80 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1be90 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1bea0 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1beb0 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1bec0 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1bed0 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1bee0 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1bef0 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1bf00 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1bf10 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1bf20 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1bf30 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1bf40 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1bf50 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
1bf60 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1bf70 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
1bf80 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
1bf90 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
1bfa0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1bfb0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1bfc0 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a  greater than .**
1bfd0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1bfe0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1bff0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1c000 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1c010 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
1c020 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c  istinct, SeekLt,
1c030 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1c040 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1c050 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  ekLt P1 P2 P3 P4
1c060 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72   * .**.** If cur
1c070 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1c080 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1c090 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1c0a0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1c0b0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1c0c0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1c0d0 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1c0e0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1c0f0 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1c100 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1c110 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1c120 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1c130 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1c140 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1c150 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1c160 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1c170 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1c180 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1c190 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1c1a0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1c1b0 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
1c1c0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1c1d0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1c1e0 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74   less than .** t
1c1f0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1c200 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1c210 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1c220 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1c230 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
1c240 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53  tinct, SeekGt, S
1c250 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
1c260 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1c270 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Le P1 P2 P3 P4 *
1c280 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1c290 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1c2a0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1c2b0 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1c2c0 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1c2d0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1c2e0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1c2f0 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1c300 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1c310 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1c320 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1c330 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1c340 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1c350 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1c360 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1c370 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1c380 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1c390 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1c3a0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1c3b0 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
1c3c0 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
1c3d0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1c3e0 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1c3f0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1c400 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73   records .** les
1c410 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1c420 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1c430 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1c440 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1c450 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1c460 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1c470 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47   Distinct, SeekG
1c480 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1c490 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  t.*/.case OP_See
1c4a0 6b 4c 74 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLt:         /* 
1c4b0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1c4c0 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20  e OP_SeekLe:    
1c4d0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1c4e0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1c4f0 6b 47 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kGe:         /* 
1c500 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1c510 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20  e OP_SeekGt: {  
1c520 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1c530 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a  3 */.  int res;.
1c540 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65    int oc;.  Vdbe
1c550 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e  Cursor *pC;.  Un
1c560 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
1c570 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1c580 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f  i64 iKey;      /
1c590 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61  * The rowid we a
1c5a0 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f  re to seek to */
1c5b0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1c5c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1c5d0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1c5e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c5f0 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70  2!=0 );.  pC = p
1c600 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1c610 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1c620 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1c630 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
1c640 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
1c650 28 20 4f 50 5f 53 65 65 6b 4c 65 20 3d 3d 20 4f  ( OP_SeekLe == O
1c660 50 5f 53 65 65 6b 4c 74 2b 31 20 29 3b 0a 20 20  P_SeekLt+1 );.  
1c670 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1c680 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 32  e == OP_SeekLt+2
1c690 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1c6a0 5f 53 65 65 6b 47 74 20 3d 3d 20 4f 50 5f 53 65  _SeekGt == OP_Se
1c6b0 65 6b 4c 74 2b 33 20 29 3b 0a 20 20 61 73 73 65  ekLt+3 );.  asse
1c6c0 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
1c6d0 64 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  d );.  if( ALWAY
1c6e0 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  S(pC->pCursor!=0
1c6f0 29 20 29 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f  ) ){.    oc = pO
1c700 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70  p->opcode;.    p
1c710 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1c720 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61      if( pC->isTa
1c730 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ble ){.      /* 
1c740 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20  The input value 
1c750 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f  in P3 might be o
1c760 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65  f any type: inte
1c770 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e  ger, real, strin
1c780 67 2c 0a 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62  g,.      ** blob
1c790 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20  , or NULL.  But 
1c7a0 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61  it needs to be a
1c7b0 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65  n integer before
1c7c0 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 20   we can do.     
1c7d0 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f   ** the seek, so
1c7e0 20 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20   covert it. */. 
1c7f0 20 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65       pIn3 = &aMe
1c800 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
1c810 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
1c820 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20  finity(pIn3);.  
1c830 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74      iKey = sqlit
1c840 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
1c850 49 6e 33 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  In3);.      pC->
1c860 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1c870 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ;..      /* If t
1c880 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c  he P3 value coul
1c890 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  d not be convert
1c8a0 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
1c8b0 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 20  er without.     
1c8c0 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f   ** loss of info
1c8d0 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70  rmation, then sp
1c8e0 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67  ecial processing
1c8f0 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20   is required... 
1c900 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  */.      if( (pI
1c910 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1c920 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
1c930 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1c940 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
1c950 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
1c960 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1c970 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  ue cannot be con
1c980 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20  verted into any 
1c990 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72  kind of a number
1c9a0 2c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74  ,.          ** t
1c9b0 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20  hen the seek is 
1c9c0 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f  not possible, so
1c9d0 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
1c9e0 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f           pc = pO
1c9f0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
1ca00 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1ca10 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a      }.        /*
1ca20 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69   If we reach thi
1ca30 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68  s point, then th
1ca40 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20  e P3 value must 
1ca50 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20  be a floating.  
1ca60 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e        ** point n
1ca70 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  umber. */.      
1ca80 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d    assert( (pIn3-
1ca90 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
1caa0 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20  l)!=0 );..      
1cab0 20 20 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c    if( iKey==SMAL
1cac0 4c 45 53 54 5f 49 4e 54 36 34 20 26 26 20 28 70  LEST_INT64 && (p
1cad0 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69  In3->r<(double)i
1cae0 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30  Key || pIn3->r>0
1caf0 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  ) ){.          /
1cb00 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69  * The P3 value i
1cb10 73 20 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d  s too large in m
1cb20 61 67 6e 69 74 75 64 65 20 74 6f 20 62 65 20 65  agnitude to be e
1cb30 78 70 72 65 73 73 65 64 20 61 73 20 61 6e 0a 20  xpressed as an. 
1cb40 20 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65           ** inte
1cb50 67 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ger. */.        
1cb60 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20    res = 1;.     
1cb70 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72       if( pIn3->r
1cb80 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
1cb90 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65    if( oc>=OP_See
1cba0 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74 28 20  kGe ){  assert( 
1cbb0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c  oc==OP_SeekGe ||
1cbc0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29   oc==OP_SeekGt )
1cbd0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1cbe0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1cbf0 65 46 69 72 73 74 28 70 43 2d 3e 70 43 75 72 73  eFirst(pC->pCurs
1cc00 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
1cc10 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
1cc20 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1cc30 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1cc40 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
1cc50 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 65    }.          }e
1cc60 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
1cc70 20 69 66 28 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b   if( oc<=OP_Seek
1cc80 4c 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f  Le ){  assert( o
1cc90 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20  c==OP_SeekLt || 
1cca0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b  oc==OP_SeekLe );
1ccb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
1ccc0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1ccd0 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Last(pC->pCursor
1cce0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1ccf0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1cd00 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1cd10 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1cd20 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  or;.            
1cd30 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  }.          }.  
1cd40 20 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20          if( res 
1cd50 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
1cd60 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1cd70 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
1cd80 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1cd90 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
1cda0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c  oc==OP_SeekLt ||
1cdb0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29   oc==OP_SeekGe )
1cdc0 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55  {.          /* U
1cdd0 73 65 20 74 68 65 20 63 65 69 6c 69 6e 67 28 29  se the ceiling()
1cde0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e   function to con
1cdf0 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a  vert real->int *
1ce00 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  /.          if( 
1ce10 70 49 6e 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c  pIn3->r > (doubl
1ce20 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b  e)iKey ) iKey++;
1ce30 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1ce40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
1ce50 20 74 68 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e   the floor() fun
1ce60 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74  ction to convert
1ce70 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20   real->int */.  
1ce80 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1ce90 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c  oc==OP_SeekLe ||
1cea0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29   oc==OP_SeekGt )
1ceb0 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
1cec0 70 49 6e 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c  pIn3->r < (doubl
1ced0 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b  e)iKey ) iKey--;
1cee0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1cef0 20 7d 20 0a 20 20 20 20 20 20 72 63 20 3d 20 73   } .      rc = s
1cf00 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1cf10 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1cf20 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69  ursor, 0, (u64)i
1cf30 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
1cf40 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1cf50 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1cf60 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1cf70 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1cf80 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73   }.      if( res
1cf90 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ==0 ){.        p
1cfa0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1cfb0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  = 1;.        pC-
1cfc0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65  >lastRowid = iKe
1cfd0 79 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  y;.      }.    }
1cfe0 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 46 69 65  else{.      nFie
1cff0 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1d000 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1d010 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1d020 54 33 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73  T32 );.      ass
1d030 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b  ert( nField>0 );
1d040 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  .      r.pKeyInf
1d050 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
1d060 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64  ;.      r.nField
1d070 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a   = (u16)nField;.
1d080 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  .      /* The ne
1d090 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20  xt line of code 
1d0a0 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c  computes as foll
1d0b0 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72  ows, only faster
1d0c0 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 69 66 28  :.      **   if(
1d0d0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c   oc==OP_SeekGt |
1d0e0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20  | oc==OP_SeekLe 
1d0f0 29 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  ){.      **     
1d100 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
1d110 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20  ED_INCRKEY;.    
1d120 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20    **   }else{.  
1d130 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61      **     r.fla
1d140 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 2a 2a  gs = 0;.      **
1d150 20 20 20 7d 0a 20 20 20 20 20 20 2a 2f 0a 20 20     }.      */.  
1d160 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 28 75      r.flags = (u
1d170 38 29 28 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52  8)(UNPACKED_INCR
1d180 4b 45 59 20 2a 20 28 31 20 26 20 28 6f 63 20 2d  KEY * (1 & (oc -
1d190 20 4f 50 5f 53 65 65 6b 4c 74 29 29 29 3b 0a 20   OP_SeekLt)));. 
1d1a0 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21       assert( oc!
1d1b0 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 72 2e  =OP_SeekGt || r.
1d1c0 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f  flags==UNPACKED_
1d1d0 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 20  INCRKEY );.     
1d1e0 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1d1f0 53 65 65 6b 4c 65 20 7c 7c 20 72 2e 66 6c 61 67  SeekLe || r.flag
1d200 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52  s==UNPACKED_INCR
1d210 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61 73 73  KEY );.      ass
1d220 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1d230 47 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30  Ge || r.flags==0
1d240 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1d250 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 74 20  ( oc!=OP_SeekLt 
1d260 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b  || r.flags==0 );
1d270 0a 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d  ..      r.aMem =
1d280 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1d290 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1d2a0 45 42 55 47 0a 20 20 20 20 20 20 7b 20 69 6e 74  EBUG.      { int
1d2b0 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
1d2c0 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
1d2d0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1d2e0 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
1d2f0 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 45  }.#endif.      E
1d300 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d  xpandBlob(r.aMem
1d310 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
1d320 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1d330 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1d340 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  rsor, &r, 0, 0, 
1d350 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
1d360 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1d370 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
1d380 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1d390 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
1d3a0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1d3b0 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  d = 0;.    }.   
1d3c0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1d3d0 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
1d3e0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1d3f0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64  ACHE_STALE;.#ifd
1d400 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
1d410 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63     sqlite3_searc
1d420 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  h_count++;.#endi
1d430 66 0a 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50  f.    if( oc>=OP
1d440 5f 53 65 65 6b 47 65 20 29 7b 20 20 61 73 73 65  _SeekGe ){  asse
1d450 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  rt( oc==OP_SeekG
1d460 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  e || oc==OP_Seek
1d470 47 74 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Gt );.      if( 
1d480 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res<0 || (res==0
1d490 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   && oc==OP_SeekG
1d4a0 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  t) ){.        rc
1d4b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   = sqlite3BtreeN
1d4c0 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ext(pC->pCursor,
1d4d0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1d4e0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1d4f0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1d500 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1d510 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1d520 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20  Valid = 0;.     
1d530 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1d540 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  res = 0;.      }
1d550 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1d560 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
1d570 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f  _SeekLt || oc==O
1d580 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20  P_SeekLe );.    
1d590 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28    if( res>0 || (
1d5a0 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
1d5b0 5f 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20  _SeekLt) ){.    
1d5c0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1d5d0 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
1d5e0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1d5f0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
1d600 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1d610 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1d620 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70  error;.        p
1d630 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1d640 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
1d650 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 72 65 73  {.        /* res
1d660 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69   might be negati
1d670 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74  ve because the t
1d680 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20  able is empty.  
1d690 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 20  Check to.       
1d6a0 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20   ** see if this 
1d6b0 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20  is the case..   
1d6c0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
1d6d0 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72  res = sqlite3Btr
1d6e0 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f  eeEof(pC->pCurso
1d6f0 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
1d700 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  }.    assert( pO
1d710 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 69  p->p2>0 );.    i
1d720 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
1d730 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1d740 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1d750 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
1d760 70 65 6e 73 20 77 68 65 6e 20 61 74 74 65 6d 70  pens when attemp
1d770 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65  ting to open the
1d780 20 73 71 6c 69 74 65 33 5f 6d 61 73 74 65 72 20   sqlite3_master 
1d790 74 61 62 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72  table.    ** for
1d7a0 20 72 65 61 64 20 61 63 63 65 73 73 20 72 65 74   read access ret
1d7b0 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54  urns SQLITE_EMPT
1d7c0 59 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  Y. In this case 
1d7d0 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20 74 61  always.    ** ta
1d7e0 6b 65 20 74 68 65 20 6a 75 6d 70 20 28 73 69 6e  ke the jump (sin
1d7f0 63 65 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  ce there are no 
1d800 72 65 63 6f 72 64 73 20 69 6e 20 74 68 65 20 74  records in the t
1d810 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
1d820 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1d830 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
1d840 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1d850 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  eek P1 P2 * * *.
1d860 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f  **.** P1 is an o
1d870 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f 72  pen table cursor
1d880 20 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f 77   and P2 is a row
1d890 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72 72  id integer.  Arr
1d8a0 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74  ange.** for P1 t
1d8b0 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20 69  o move so that i
1d8c0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1d8d0 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20 50  rowid given by P
1d8e0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  2..**.** This is
1d8f0 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66 65   actually a defe
1d900 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68  rred seek.  Noth
1d910 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70  ing actually hap
1d920 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68  pens until.** th
1d930 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64  e cursor is used
1d940 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72   to read a recor
1d950 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66  d.  That way, if
1d960 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63   no reads.** occ
1d970 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61  ur, no unnecessa
1d980 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a  ry I/O happens..
1d990 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a  */.case OP_Seek:
1d9a0 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a   {    /* in2 */.
1d9b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1d9c0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1d9d0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1d9e0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1d9f0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1da00 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1da10 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1da20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70  if( ALWAYS(pC->p
1da30 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20  Cursor!=0) ){.  
1da40 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1da50 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d  Table );.    pC-
1da60 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1da70 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
1da80 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 70 43 2d  Op->p2];.    pC-
1da90 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
1daa0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
1dab0 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  lue(pIn2);.    p
1dac0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1dad0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  = 0;.    pC->def
1dae0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b  erredMoveto = 1;
1daf0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1db00 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46    ../* Opcode: F
1db10 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
1db20 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d   *.**.** If P4==
1db30 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1db40 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1db50 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1db60 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1db70 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1db80 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1db90 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1dba0 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1dbb0 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1dbc0 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73  cord..**.** Curs
1dbd0 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
1dbe0 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
1dbf0 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
1dc00 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
1dc10 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69  P4.** is a prefi
1dc20 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
1dc30 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
1dc40 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61   is made to P2 a
1dc50 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74  nd.** P1 is left
1dc60 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1dc70 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
1dc80 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
1dc90 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  otFound P1 P2 P3
1dca0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50   P4 *.**.** If P
1dcb0 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
1dcc0 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1dcd0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1dce0 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
1dcf0 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
1dd00 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
1dd10 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
1dd20 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
1dd30 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
1dd40 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
1dd50 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
1dd60 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
1dd70 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
1dd80 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
1dd90 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74  and P4.** is not
1dda0 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61   the prefix of a
1ddb0 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
1ddc0 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
1ddd0 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31  de to P2.  If P1
1dde0 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69   .** does contai
1ddf0 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65  n an entry whose
1de00 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20   prefix matches 
1de10 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64  the P3/P4 record
1de20 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a   then control.**
1de30 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74   falls through t
1de40 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
1de50 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73  uction and P1 is
1de60 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1de70 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e  t the.** matchin
1de80 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53  g entry..**.** S
1de90 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1dea0 4e 6f 74 45 78 69 73 74 73 2c 20 49 73 55 6e 69  NotExists, IsUni
1deb0 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  que.*/.case OP_N
1dec0 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f  otFound:       /
1ded0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1dee0 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20  ase OP_Found: { 
1def0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1df00 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72  in3 */.  int alr
1df10 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 56 64  eadyExists;.  Vd
1df20 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1df30 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20  int res;.  char 
1df40 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b  *pFree;.  Unpack
1df50 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65  edRecord *pIdxKe
1df60 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  y;.  UnpackedRec
1df70 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54  ord r;.  char aT
1df80 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69  empRec[ROUND8(si
1df90 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63  zeof(UnpackedRec
1dfa0 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d  ord)) + sizeof(M
1dfb0 65 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69 66  em)*3 + 7];..#if
1dfc0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1dfd0 20 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f    sqlite3_found_
1dfe0 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
1dff0 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  .  alreadyExists
1e000 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
1e010 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1e020 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1e030 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1e040 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1e050 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  T32 );.  pC = p-
1e060 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1e070 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1e080 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
1e090 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
1e0a0 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43  f( ALWAYS(pC->pC
1e0b0 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 0a 20 20  ursor!=0) ){..  
1e0c0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1e0d0 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20  Table==0 );.    
1e0e0 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  if( pOp->p4.i>0 
1e0f0 29 7b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49  ){.      r.pKeyI
1e100 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
1e110 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65  fo;.      r.nFie
1e120 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
1e130 34 2e 69 3b 0a 20 20 20 20 20 20 72 2e 61 4d 65  4.i;.      r.aMe
1e140 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66  m = pIn3;.#ifdef
1e150 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1e160 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72      { int i; for
1e170 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
1e180 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
1e190 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
1e1a0 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
1e1b0 66 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20  f.      r.flags 
1e1c0 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
1e1d0 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 70  X_MATCH;.      p
1e1e0 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20  IdxKey = &r;.   
1e1f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 49   }else{.      pI
1e200 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56  dxKey = sqlite3V
1e210 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64  dbeAllocUnpacked
1e220 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20 20  Record(.        
1e230 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20    pC->pKeyInfo, 
1e240 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66  aTempRec, sizeof
1e250 28 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46 72  (aTempRec), &pFr
1e260 65 65 0a 20 20 20 20 20 20 29 3b 20 0a 20 20 20  ee.      ); .   
1e270 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d     if( pIdxKey==
1e280 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1e290 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1e2a0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1e2b0 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 61  _Blob );.      a
1e2c0 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
1e2d0 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d  ags & MEM_Zero)=
1e2e0 3d 30 20 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c  =0 );  /* zerobl
1e2f0 6f 62 73 20 61 6c 72 65 61 64 79 20 65 78 70 61  obs already expa
1e300 6e 64 65 64 20 2a 2f 0a 20 20 20 20 20 20 73 71  nded */.      sq
1e310 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55  lite3VdbeRecordU
1e320 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e  npack(pC->pKeyIn
1e330 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e  fo, pIn3->n, pIn
1e340 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a  3->z, pIdxKey);.
1e350 20 20 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66        pIdxKey->f
1e360 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44  lags |= UNPACKED
1e370 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20  _PREFIX_MATCH;. 
1e380 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71     }.    rc = sq
1e390 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1e3a0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1e3b0 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30  rsor, pIdxKey, 0
1e3c0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1e3d0 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30  if( pOp->p4.i==0
1e3e0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1e3f0 33 44 62 46 72 65 65 28 64 62 2c 20 70 46 72 65  3DbFree(db, pFre
1e400 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  e);.    }.    if
1e410 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1e420 29 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ){.      break;.
1e430 20 20 20 20 7d 0a 20 20 20 20 61 6c 72 65 61 64      }.    alread
1e440 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d  yExists = (res==
1e450 30 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65  0);.    pC->defe
1e460 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1e470 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
1e480 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1e490 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  E;.  }.  if( pOp
1e4a0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75  ->opcode==OP_Fou
1e4b0 6e 64 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c  nd ){.    if( al
1e4c0 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63  readyExists ) pc
1e4d0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1e4e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28    }else{.    if(
1e4f0 20 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20   !alreadyExists 
1e500 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d  ) pc = pOp->p2 -
1e510 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
1e520 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
1e530 73 55 6e 69 71 75 65 20 50 31 20 50 32 20 50 33  sUnique P1 P2 P3
1e540 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73   P4 *.**.** Curs
1e550 6f 72 20 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e  or P1 is open on
1e560 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65   an index b-tree
1e570 20 2d 20 74 68 61 74 20 69 73 20 74 6f 20 73 61   - that is to sa
1e580 79 2c 20 61 20 62 74 72 65 65 20 77 68 69 63 68  y, a btree which
1e590 0a 2a 2a 20 6e 6f 20 64 61 74 61 20 61 6e 64 20  .** no data and 
1e5a0 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 61 72  where the key ar
1e5b0 65 20 72 65 63 6f 72 64 73 20 67 65 6e 65 72 61  e records genera
1e5c0 74 65 64 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65  ted by OP_MakeRe
1e5d0 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 74 68 65  cord with.** the
1e5e0 20 6c 69 73 74 20 66 69 65 6c 64 20 62 65 69 6e   list field bein
1e5f0 67 20 74 68 65 20 69 6e 74 65 67 65 72 20 52 4f  g the integer RO
1e600 57 49 44 20 6f 66 20 74 68 65 20 65 6e 74 72 79  WID of the entry
1e610 20 74 68 61 74 20 74 68 65 20 69 6e 64 65 78 0a   that the index.
1e620 2a 2a 20 65 6e 74 72 79 20 72 65 66 65 72 73 20  ** entry refers 
1e630 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  to..**.** The P3
1e640 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69   register contai
1e650 6e 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ns an integer re
1e660 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 43 61 6c  cord number. Cal
1e670 6c 20 74 68 69 73 20 72 65 63 6f 72 64 20 0a 2a  l this record .*
1e680 2a 20 6e 75 6d 62 65 72 20 52 2e 20 52 65 67 69  * number R. Regi
1e690 73 74 65 72 20 50 34 20 69 73 20 74 68 65 20 66  ster P4 is the f
1e6a0 69 72 73 74 20 69 6e 20 61 20 73 65 74 20 6f 66  irst in a set of
1e6b0 20 4e 20 63 6f 6e 74 69 67 75 6f 75 73 20 72 65   N contiguous re
1e6c0 67 69 73 74 65 72 73 0a 2a 2a 20 74 68 61 74 20  gisters.** that 
1e6d0 6d 61 6b 65 20 75 70 20 61 6e 20 75 6e 70 61 63  make up an unpac
1e6e0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 20 74 68  ked index key th
1e6f0 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 77  at can be used w
1e700 69 74 68 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  ith cursor P1..*
1e710 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e  * The value of N
1e720 20 63 61 6e 20 62 65 20 69 6e 66 65 72 72 65 64   can be inferred
1e730 20 66 72 6f 6d 20 74 68 65 20 63 75 72 73 6f 72   from the cursor
1e740 2e 20 4e 20 69 6e 63 6c 75 64 65 73 20 74 68 65  . N includes the
1e750 20 72 6f 77 69 64 0a 2a 2a 20 76 61 6c 75 65 20   rowid.** value 
1e760 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20  appended to the 
1e770 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  end of the index
1e780 20 72 65 63 6f 72 64 2e 20 54 68 69 73 20 72 6f   record. This ro
1e790 77 69 64 20 76 61 6c 75 65 20 6d 61 79 0a 2a 2a  wid value may.**
1e7a0 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 74   or may not be t
1e7b0 68 65 20 73 61 6d 65 20 61 73 20 52 2e 0a 2a 2a  he same as R..**
1e7c0 0a 2a 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68  .** If any of th
1e7d0 65 20 4e 20 72 65 67 69 73 74 65 72 73 20 62 65  e N registers be
1e7e0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 72 65 67  ginning with reg
1e7f0 69 73 74 65 72 20 50 34 20 63 6f 6e 74 61 69 6e  ister P4 contain
1e800 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c 75  s a NULL.** valu
1e810 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  e, jump immediat
1e820 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
1e830 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 69 73   Otherwise, this
1e840 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 68 65   instruction che
1e850 63 6b 73 20 69 66 20 63 75 72 73 6f 72 20 50 31  cks if cursor P1
1e860 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 6e 74   contains an ent
1e870 72 79 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20  ry.** where the 
1e880 66 69 72 73 74 20 28 4e 2d 31 29 20 66 69 65 6c  first (N-1) fiel
1e890 64 73 20 6d 61 74 63 68 20 62 75 74 20 74 68 65  ds match but the
1e8a0 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61 74 20   rowid value at 
1e8b0 74 68 65 20 65 6e 64 0a 2a 2a 20 6f 66 20 74 68  the end.** of th
1e8c0 65 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  e index entry is
1e8d0 20 6e 6f 74 20 52 2e 20 49 66 20 74 68 65 72 65   not R. If there
1e8e0 20 69 73 20 6e 6f 20 73 75 63 68 20 65 6e 74 72   is no such entr
1e8f0 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a 75 6d 70 73  y, control jumps
1e900 0a 2a 2a 20 74 6f 20 69 6e 73 74 72 75 63 74 69  .** to instructi
1e910 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  on P2. Otherwise
1e920 2c 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  , the rowid of t
1e930 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69  he conflicting i
1e940 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20 69 73  ndex.** entry is
1e950 20 63 6f 70 69 65 64 20 74 6f 20 72 65 67 69 73   copied to regis
1e960 74 65 72 20 50 33 20 61 6e 64 20 63 6f 6e 74 72  ter P3 and contr
1e970 6f 6c 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68  ol falls through
1e980 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20   to the next.** 
1e990 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
1e9a0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
1e9b0 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
1e9c0 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20  , Found.*/.case 
1e9d0 4f 50 5f 49 73 55 6e 69 71 75 65 3a 20 7b 20 20  OP_IsUnique: {  
1e9e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1e9f0 6e 33 20 2a 2f 0a 20 20 75 31 36 20 69 69 3b 0a  n3 */.  u16 ii;.
1ea00 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1ea10 78 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  x;.  BtCursor *p
1ea20 43 72 73 72 3b 0a 20 20 75 31 36 20 6e 46 69 65  Crsr;.  u16 nFie
1ea30 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61 4d 78 3b 0a  ld;.  Mem *aMx;.
1ea40 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1ea50 20 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   r;             
1ea60 20 20 20 20 20 2f 2a 20 42 2d 54 72 65 65 20 69       /* B-Tree i
1ea70 6e 64 65 78 20 73 65 61 72 63 68 20 6b 65 79 20  ndex search key 
1ea80 2a 2f 0a 20 20 69 36 34 20 52 3b 20 20 20 20 20  */.  i64 R;     
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaa0 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69 64          /* Rowid
1eab0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1eac0 74 65 72 20 50 33 20 2a 2f 0a 0a 20 20 70 49 6e  ter P3 */..  pIn
1ead0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1eae0 33 5d 3b 0a 20 20 61 4d 78 20 3d 20 26 61 4d 65  3];.  aMx = &aMe
1eaf0 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20  m[pOp->p4.i];.  
1eb00 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  /* Assert that t
1eb10 68 65 20 76 61 6c 75 65 73 20 6f 66 20 70 61 72  he values of par
1eb20 61 6d 65 74 65 72 73 20 50 31 20 61 6e 64 20 50  ameters P1 and P
1eb30 34 20 61 72 65 20 69 6e 20 72 61 6e 67 65 2e 20  4 are in range. 
1eb40 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
1eb50 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1eb60 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
1eb70 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70  pOp->p4.i>0 && p
1eb80 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65  Op->p4.i<=p->nMe
1eb90 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  m );.  assert( p
1eba0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1ebb0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1ebc0 29 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68  );..  /* Find th
1ebd0 65 20 69 6e 64 65 78 20 63 75 72 73 6f 72 2e 20  e index cursor. 
1ebe0 2a 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70  */.  pCx = p->ap
1ebf0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1ec00 61 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66  assert( pCx->def
1ec10 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
1ec20 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73  ;.  pCx->seekRes
1ec30 75 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e  ult = 0;.  pCx->
1ec40 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1ec50 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72  CHE_STALE;.  pCr
1ec60 73 72 20 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f  sr = pCx->pCurso
1ec70 72 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20  r;..  /* If any 
1ec80 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  of the values ar
1ec90 65 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65  e NULL, take the
1eca0 20 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65   jump. */.  nFie
1ecb0 6c 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ld = pCx->pKeyIn
1ecc0 66 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f  fo->nField;.  fo
1ecd0 72 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c  r(ii=0; ii<nFiel
1ece0 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66  d; ii++){.    if
1ecf0 28 20 61 4d 78 5b 69 69 5d 2e 66 6c 61 67 73 20  ( aMx[ii].flags 
1ed00 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1ed10 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1ed20 20 2d 20 31 3b 0a 20 20 20 20 20 20 70 43 72 73   - 1;.      pCrs
1ed30 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 62 72 65  r = 0;.      bre
1ed40 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
1ed50 61 73 73 65 72 74 28 20 28 61 4d 78 5b 6e 46 69  assert( (aMx[nFi
1ed60 65 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  eld].flags & MEM
1ed70 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20 20  _Null)==0 );..  
1ed80 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a  if( pCrsr!=0 ){.
1ed90 20 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20      /* Populate 
1eda0 74 68 65 20 69 6e 64 65 78 20 73 65 61 72 63 68  the index search
1edb0 20 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72 2e 70   key. */.    r.p
1edc0 4b 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d 3e 70  KeyInfo = pCx->p
1edd0 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
1ede0 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 20 2b  Field = nField +
1edf0 20 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73 20   1;.    r.flags 
1ee00 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
1ee10 58 5f 53 45 41 52 43 48 3b 0a 20 20 20 20 72 2e  X_SEARCH;.    r.
1ee20 61 4d 65 6d 20 3d 20 61 4d 78 3b 0a 23 69 66 64  aMem = aMx;.#ifd
1ee30 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1ee40 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72      { int i; for
1ee50 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
1ee60 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
1ee70 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
1ee80 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
1ee90 66 0a 0a 20 20 20 20 2f 2a 20 45 78 74 72 61 63  f..    /* Extrac
1eea0 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 52  t the value of R
1eeb0 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
1eec0 33 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  3. */.    sqlite
1eed0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
1eee0 66 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 52 20  fy(pIn3);.    R 
1eef0 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20  = pIn3->u.i;..  
1ef00 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
1ef10 42 2d 54 72 65 65 20 69 6e 64 65 78 2e 20 49 66  B-Tree index. If
1ef20 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20   no conflicting 
1ef30 72 65 63 6f 72 64 20 69 73 20 66 6f 75 6e 64 2c  record is found,
1ef40 20 6a 75 6d 70 0a 20 20 20 20 2a 2a 20 74 6f 20   jump.    ** to 
1ef50 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 63  P2. Otherwise, c
1ef60 6f 70 79 20 74 68 65 20 72 6f 77 69 64 20 6f 66  opy the rowid of
1ef70 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67   the conflicting
1ef80 20 72 65 63 6f 72 64 20 74 6f 0a 20 20 20 20 2a   record to.    *
1ef90 2a 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e  * register P3 an
1efa0 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  d fall through t
1efb0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
1efc0 75 63 74 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20  uction.  */.    
1efd0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1efe0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1eff0 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
1f000 20 26 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c   &pCx->seekResul
1f010 74 29 3b 0a 20 20 20 20 69 66 28 20 28 72 2e 66  t);.    if( (r.f
1f020 6c 61 67 73 20 26 20 55 4e 50 41 43 4b 45 44 5f  lags & UNPACKED_
1f030 50 52 45 46 49 58 5f 53 45 41 52 43 48 29 20 7c  PREFIX_SEARCH) |
1f040 7c 20 72 2e 72 6f 77 69 64 3d 3d 52 20 29 7b 0a  | r.rowid==R ){.
1f050 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1f060 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  p2 - 1;.    }els
1f070 65 7b 0a 20 20 20 20 20 20 70 49 6e 33 2d 3e 75  e{.      pIn3->u
1f080 2e 69 20 3d 20 72 2e 72 6f 77 69 64 3b 0a 20 20  .i = r.rowid;.  
1f090 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
1f0a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
1f0b0 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50  otExists P1 P2 P
1f0c0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20  3 * *.**.** Use 
1f0d0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
1f0e0 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 6e  egister P3 as an
1f0f0 20 69 6e 74 65 67 65 72 20 6b 65 79 2e 20 20 49   integer key.  I
1f100 66 20 61 20 72 65 63 6f 72 64 20 0a 2a 2a 20 77  f a record .** w
1f110 69 74 68 20 74 68 61 74 20 6b 65 79 20 64 6f 65  ith that key doe
1f120 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74  s not exist in t
1f130 61 62 6c 65 20 6f 66 20 50 31 2c 20 74 68 65 6e  able of P1, then
1f140 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a   jump to P2. .**
1f150 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 64   If the record d
1f160 6f 65 73 20 65 78 69 73 74 2c 20 74 68 65 6e 20  oes exist, then 
1f170 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20 54  fall through.  T
1f180 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
1f190 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74  t .** pointing t
1f1a0 6f 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20  o the record if 
1f1b0 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a  it exists..**.**
1f1c0 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
1f1d0 62 65 74 77 65 65 6e 20 74 68 69 73 20 6f 70 65  between this ope
1f1e0 72 61 74 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f  ration and NotFo
1f1f0 75 6e 64 20 69 73 20 74 68 61 74 20 74 68 69 73  und is that this
1f200 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 61 73  .** operation as
1f210 73 75 6d 65 73 20 74 68 65 20 6b 65 79 20 69 73  sumes the key is
1f220 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20   an integer and 
1f230 74 68 61 74 20 50 31 20 69 73 20 61 20 74 61 62  that P1 is a tab
1f240 6c 65 20 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f  le whereas.** No
1f250 74 46 6f 75 6e 64 20 61 73 73 75 6d 65 73 20 6b  tFound assumes k
1f260 65 79 20 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e  ey is a blob con
1f270 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 4d 61  structed from Ma
1f280 6b 65 52 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20  keRecord and.** 
1f290 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a  P1 is an index..
1f2a0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1f2b0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1f2c0 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73   IsUnique.*/.cas
1f2d0 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
1f2e0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1f2f0 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43  , in3 */.  VdbeC
1f300 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
1f310 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1f320 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69  int res;.  u64 i
1f330 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26  Key;..  pIn3 = &
1f340 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1f350 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1f360 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1f370 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1f380 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1f390 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1f3a0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1f3b0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1f3c0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1f3d0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1f3e0 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
1f3f0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
1f400 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  eg==0 );.  pCrsr
1f410 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
1f420 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72    if( ALWAYS(pCr
1f430 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 65  sr!=0) ){.    re
1f440 73 20 3d 20 30 3b 0a 20 20 20 20 69 4b 65 79 20  s = 0;.    iKey 
1f450 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn3->u.i;.   
1f460 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f470 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1f480 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c  (pCrsr, 0, iKey,
1f490 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70   0, &res);.    p
1f4a0 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70  C->lastRowid = p
1f4b0 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 70 43  In3->u.i;.    pC
1f4c0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1f4d0 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20   res==0 ?1:0;.  
1f4e0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1f4f0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
1f500 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1f510 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 64 65  TALE;.    pC->de
1f520 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1f530 3b 0a 20 20 20 20 69 66 28 20 72 65 73 21 3d 30  ;.    if( res!=0
1f540 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1f550 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1f560 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
1f570 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b  widIsValid==0 );
1f580 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 73  .    }.    pC->s
1f590 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b  eekResult = res;
1f5a0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
1f5b0 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68   This happens wh
1f5c0 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20 74 6f  en an attempt to
1f5d0 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63 75 72   open a read cur
1f5e0 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20 20 20  sor on the .    
1f5f0 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ** sqlite_master
1f600 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73 20 53   table returns S
1f610 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20 20 20  QLITE_EMPTY..   
1f620 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   */.    pc = pOp
1f630 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73  ->p2 - 1;.    as
1f640 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
1f650 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20  sValid==0 );.   
1f660 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1f670 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 0;.  }.  break
1f680 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1f690 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a  Sequence P1 P2 *
1f6a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20   * *.**.** Find 
1f6b0 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62  the next availab
1f6c0 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  le sequence numb
1f6d0 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  er for cursor P1
1f6e0 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73  ..** Write the s
1f6f0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69  equence number i
1f700 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
1f710 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65  .** The sequence
1f720 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63   number on the c
1f730 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65  ursor is increme
1f740 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a  nted after this.
1f750 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
1f760 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71   .*/.case OP_Seq
1f770 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  uence: {        
1f780 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
1f790 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
1f7a0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1f7b0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1f7c0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1f7d0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1f7e0 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  1]!=0 );.  pOut-
1f7f0 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b  >u.i = p->apCsr[
1f800 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75  pOp->p1]->seqCou
1f810 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  nt++;.  break;.}
1f820 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  .../* Opcode: Ne
1f830 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20  wRowid P1 P2 P3 
1f840 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20  * *.**.** Get a 
1f850 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f  new integer reco
1f860 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61  rd number (a.k.a
1f870 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61   "rowid") used a
1f880 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74  s the key to a t
1f890 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63  able..** The rec
1f8a0 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f  ord number is no
1f8b0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
1f8c0 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68  d as a key in th
1f8d0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61  e database.** ta
1f8e0 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20  ble that cursor 
1f8f0 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54  P1 points to.  T
1f900 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75  he new record nu
1f910 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a  mber is written.
1f920 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65  ** written to re
1f930 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1f940 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33   If P3>0 then P3
1f950 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
1f960 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
1f970 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68   of this VDBE th
1f980 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65  at holds .** the
1f990 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75   largest previou
1f9a0 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65  sly generated re
1f9b0 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20  cord number. No 
1f9c0 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
1f9d0 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65  rs are.** allowe
1f9e0 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  d to be less tha
1f9f0 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68  n this value. Wh
1fa00 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65  en this value re
1fa10 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75  aches its maximu
1fa20 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45  m, .** an SQLITE
1fa30 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67  _FULL error is g
1fa40 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33  enerated. The P3
1fa50 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64   register is upd
1fa60 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a  ated with the '.
1fa70 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ** generated rec
1fa80 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73  ord number. This
1fa90 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73   P3 mechanism is
1faa0 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d   used to help im
1fab0 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41  plement the.** A
1fac0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61  UTOINCREMENT fea
1fad0 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
1fae0 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20  _NewRowid: {    
1faf0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1fb00 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1fb10 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
1fb20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
1fb30 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65   rowid */.  Vdbe
1fb40 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
1fb50 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20     /* Cursor of 
1fb60 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65  table to get the
1fb70 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
1fb80 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
1fb90 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
1fba0 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74   of an sqlite3Bt
1fbb0 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69  reeLast() */.  i
1fbc0 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20  nt cnt;         
1fbd0 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
1fbe0 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
1fbf0 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73  mber of searches
1fc00 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
1fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fc20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1fc30 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66   largest rowid f
1fc40 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
1fc50 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
1fc60 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20  *pFrame;     /* 
1fc70 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44  Root frame of VD
1fc80 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a  BE */..  v = 0;.
1fc90 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73    res = 0;.  ass
1fca0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1fcb0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1fcc0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1fcd0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1fce0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1fcf0 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  =0 );.  if( NEVE
1fd00 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30  R(pC->pCursor==0
1fd10 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  ) ){.    /* The 
1fd20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  zero initializat
1fd30 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c  ion above is all
1fd40 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20   that is needed 
1fd50 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
1fd60 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69  /* The next rowi
1fd70 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  d or record numb
1fd80 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65  er (different te
1fd90 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65  rms for the same
1fda0 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69  .    ** thing) i
1fdb0 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20  s obtained in a 
1fdc0 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74  two-step algorit
1fdd0 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  hm..    **.    *
1fde0 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d  * First we attem
1fdf0 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  pt to find the l
1fe00 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
1fe10 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e  rowid and add on
1fe20 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74  e.    ** to that
1fe30 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61  .  But if the la
1fe40 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
1fe50 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20  owid is already 
1fe60 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20  the maximum.    
1fe70 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ** positive inte
1fe80 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20  ger, we have to 
1fe90 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
1fea0 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a  the second.    *
1feb0 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20  * probabilistic 
1fec0 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a  algorithm.    **
1fed0 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f  .    ** The seco
1fee0 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  nd algorithm is 
1fef0 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69  to select a rowi
1ff00 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
1ff10 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74  see if.    ** it
1ff20 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20   already exists 
1ff30 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
1ff40 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  f it does not ex
1ff50 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20  ist, we have.   
1ff60 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20   ** succeeded.  
1ff70 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f  If the random ro
1ff80 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  wid does exist, 
1ff90 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20  we select a new 
1ffa0 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74  one.    ** and t
1ffb0 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20  ry again, up to 
1ffc0 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a  100 times..    *
1ffd0 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  /.    assert( pC
1ffe0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69  ->isTable );..#i
1fff0 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49  fdef SQLITE_32BI
20000 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69  T_ROWID.#   defi
20010 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37  ne MAX_ROWID 0x7
20020 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20  fffffff.#else.  
20030 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c    /* Some compil
20040 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
20050 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20  ut constants of 
20060 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66  the form 0x7ffff
20070 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20  fffffffffff..   
20080 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c   ** Others compl
20090 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66  ain about 0x7fff
200a0 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e  fffffffffffffLL.
200b0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
200c0 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20  macro seems.    
200d0 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68  ** to provide th
200e0 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65  e constant while
200f0 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70   making all comp
20100 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20  ilers happy..   
20110 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d   */.#   define M
20120 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28  AX_ROWID  (i64)(
20130 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66   (((u64)0x7fffff
20140 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29  ff)<<32) | (u64)
20150 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e  0xffffffff ).#en
20160 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43  dif..    if( !pC
20170 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
20180 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71   ){.      v = sq
20190 6c 69 74 65 33 42 74 72 65 65 47 65 74 43 61 63  lite3BtreeGetCac
201a0 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75  hedRowid(pC->pCu
201b0 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 69 66 28  rsor);.      if(
201c0 20 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20   v==0 ){.       
201d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
201e0 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73  eeLast(pC->pCurs
201f0 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
20200 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
20210 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
20220 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
20230 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
20240 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
20250 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20   res ){.        
20260 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d    v = 1;   /* IM
20270 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34  P: R-61914-48074
20280 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   */.        }els
20290 65 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  e{.          ass
202a0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
202b0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
202c0 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20  C->pCursor) );. 
202d0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
202e0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
202f0 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
20300 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73  v);.          as
20310 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
20320 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e  _OK );   /* Cann
20330 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e  ot fail followin
20340 67 20 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  g BtreeLast() */
20350 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 76  .          if( v
20360 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20  >=MAX_ROWID ){. 
20370 20 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75             pC->u
20380 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20  seRandomRowid = 
20390 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  1;.          }el
203a0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
203b0 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  v++;   /* IMP: R
203c0 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a  -29538-34987 */.
203d0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
203e0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23      }.      }..#
203f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
20400 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
20410 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
20420 70 33 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  p3 ){.        /*
20430 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
20440 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
20450 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
20460 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
20470 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p3>0 );.        
20480 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
20490 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 70  .          for(p
204a0 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
204b0 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
204c0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
204d0 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20  >pParent);.     
204e0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
204f0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
20500 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
20510 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  /.          asse
20520 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72  rt( pOp->p3<=pFr
20530 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  ame->nMem );.   
20540 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70         pMem = &p
20550 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
20560 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65  >p3];.        }e
20570 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  lse{.          /
20580 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
20590 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
205a0 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
205b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
205c0 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
205d0 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d  ;.          pMem
205e0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
205f0 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 6d 65 6d  ];.          mem
20600 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
20610 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20   pMem);.        
20620 7d 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  }.        assert
20630 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65  ( memIsValid(pMe
20640 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 52  m) );..        R
20650 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
20660 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20  p->p3, pMem);.  
20670 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
20680 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
20690 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 61 73  Mem);.        as
206a0 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
206b0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
206c0 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20   );  /* mem(P3) 
206d0 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
206e0 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
206f0 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52  pMem->u.i==MAX_R
20700 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52  OWID || pC->useR
20710 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
20720 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
20730 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
20740 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33  MP: R-12275-6133
20750 38 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 67  8 */.          g
20760 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
20770 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
20780 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3c  }.        if( v<
20790 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20  pMem->u.i+1 ){. 
207a0 20 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65           v = pMe
207b0 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20  m->u.i + 1;.    
207c0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 4d      }.        pM
207d0 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20  em->u.i = v;.   
207e0 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
207f0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53     sqlite3BtreeS
20800 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43  etCachedRowid(pC
20810 2d 3e 70 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58  ->pCursor, v<MAX
20820 5f 52 4f 57 49 44 20 3f 20 76 2b 31 20 3a 20 30  _ROWID ? v+1 : 0
20830 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
20840 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
20850 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  wid ){.      /* 
20860 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
20870 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31  F: R-07677-41881
20880 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   If the largest 
20890 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20 74  ROWID is equal t
208a0 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c  o the.      ** l
208b0 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  argest possible 
208c0 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37 32  integer (9223372
208d0 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68  036854775807) th
208e0 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  en the database.
208f0 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20        ** engine 
20900 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70  starts picking p
20910 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61 74  ositive candidat
20920 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64  e ROWIDs at rand
20930 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a  om until.      *
20940 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74  * it finds one t
20950 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69  hat is not previ
20960 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20  ously used. */. 
20970 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
20980 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57  ->p3==0 );  /* W
20990 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72  e cannot be in r
209a0 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65  andom rowid mode
209b0 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20   if this is.    
209c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209d0 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41           ** an A
209e0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
209f0 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20  le. */.      /* 
20a00 6f 6e 20 74 68 65 20 66 69 72 73 74 20 61 74 74  on the first att
20a10 65 6d 70 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20  empt, simply do 
20a20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20 70 72  one more than pr
20a30 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20  evious */.      
20a40 76 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  v = lastRowid;. 
20a50 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52       v &= (MAX_R
20a60 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73  OWID>>1); /* ens
20a70 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e  ure doesn't go n
20a80 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20  egative */.     
20a90 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20   v++; /* ensure 
20aa0 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20  non-zero */.    
20ab0 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20    cnt = 0;.     
20ac0 20 77 68 69 6c 65 28 20 20 20 28 28 72 63 20 3d   while(   ((rc =
20ad0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
20ae0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
20af0 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34  pCursor, 0, (u64
20b00 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  )v,.            
20b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b30 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d       0, &res))==
20b40 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20  SQLITE_OK).     
20b50 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d         && (res==
20b60 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  0).            &
20b70 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a  & (++cnt<100)){.
20b80 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69          /* colli
20b90 73 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68  sion - try anoth
20ba0 65 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20  er random rowid 
20bb0 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  */.        sqlit
20bc0 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69  e3_randomness(si
20bd0 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20  zeof(v), &v);.  
20be0 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20        if( cnt<5 
20bf0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
20c00 74 72 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64  try "small" rand
20c10 6f 6d 20 72 6f 77 69 64 73 20 66 6f 72 20 74 68  om rowids for th
20c20 65 20 69 6e 69 74 69 61 6c 20 61 74 74 65 6d 70  e initial attemp
20c30 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ts */.          
20c40 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20  v &= 0xffffff;. 
20c50 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
20c60 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41          v &= (MA
20c70 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20  X_ROWID>>1); /* 
20c80 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67  ensure doesn't g
20c90 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20  o negative */.  
20ca0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
20cb0 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e  v++; /* ensure n
20cc0 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20  on-zero */.     
20cd0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d   }.      if( rc=
20ce0 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65  =SQLITE_OK && re
20cf0 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
20d00 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
20d10 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38  ;   /* IMP: R-38
20d20 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20  219-53002 */.   
20d30 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
20d40 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
20d50 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
20d60 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45  rt( v>0 );  /* E
20d70 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30  V: R-40812-03570
20d80 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43   */.    }.    pC
20d90 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
20da0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65   0;.    pC->defe
20db0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
20dc0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
20dd0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
20de0 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  E;.  }.  pOut->u
20df0 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
20e00 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
20e10 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50  nsert P1 P2 P3 P
20e20 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  4 P5.**.** Write
20e30 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74   an entry into t
20e40 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73  he table of curs
20e50 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e  or P1.  A new en
20e60 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65  try is.** create
20e70 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20  d if it doesn't 
20e80 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72  already exist or
20e90 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e   the data for an
20ea0 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74   existing.** ent
20eb0 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65  ry is overwritte
20ec0 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20  n.  The data is 
20ed0 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c  the value MEM_Bl
20ee0 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ob stored in reg
20ef0 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  ister.** number 
20f00 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73  P2. The key is s
20f10 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
20f20 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75  r P3. The key mu
20f30 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49  st.** be a MEM_I
20f40 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nt..**.** If the
20f50 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
20f60 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
20f70 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
20f80 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
20f90 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
20fa0 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20  otherwise not). 
20fb0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
20fc0 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66  ASTROWID flag of
20fd0 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74   P5 is set,.** t
20fe0 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f  hen rowid is sto
20ff0 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65  red for subseque
21000 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65  nt return by the
21010 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74  .** sqlite3_last
21020 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
21030 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77  function (otherw
21040 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69  ise it is unmodi
21050 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  fied)..**.** If 
21060 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  the OPFLAG_USESE
21070 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66  EKRESULT flag of
21080 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 69   P5 is set and i
21090 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a  f the result of.
210a0 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b  ** the last seek
210b0 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e   operation (OP_N
210c0 6f 74 45 78 69 73 74 73 29 20 77 61 73 20 61 20  otExists) was a 
210d0 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68  success, then th
210e0 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20  is.** operation 
210f0 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74  will not attempt
21100 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70   to find the app
21110 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65 66  ropriate row bef
21120 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65  ore doing.** the
21130 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c   insert but will
21140 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69   instead overwri
21150 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  te the row that 
21160 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
21170 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
21180 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61  ing to.  Presuma
21190 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f  bly, the prior O
211a0 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f  P_NotExists opco
211b0 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64  de.** has alread
211c0 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65  y positioned the
211d0 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c   cursor correctl
211e0 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f  y.  This is an o
211f0 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  ptimization.** t
21200 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f  hat boosts perfo
21210 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69  rmance by avoidi
21220 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65  ng redundant see
21230 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ks..**.** If the
21240 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
21250 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
21260 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  en this opcode i
21270 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20  s part of an.** 
21280 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e  UPDATE operation
21290 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66  .  Otherwise (if
212a0 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65   the flag is cle
212b0 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70  ar) then this op
212c0 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20  code.** is part 
212d0 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65  of an INSERT ope
212e0 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66  ration.  The dif
212f0 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20  ference is only 
21300 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20  important to.** 
21310 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e  the update hook.
21320 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72  .**.** Parameter
21330 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f   P4 may point to
21340 20 61 20 54 61 62 6c 65 20 73 74 72 75 63 74 75   a Table structu
21350 72 65 2c 20 6f 72 20 6d 61 79 20 62 65 20 4e 55  re, or may be NU
21360 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 0a 2a 2a  LL. If it is .**
21370 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
21380 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
21390 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65  (sqlite3.xUpdate
213a0 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76  Callback) is inv
213b0 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69  oked .** followi
213c0 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20  ng a successful 
213d0 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57  insert..**.** (W
213e0 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20  ARNING/TODO: If 
213f0 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63  P1 is a pseudo-c
21400 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20  ursor and P2 is 
21410 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61  dynamically.** a
21420 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f  llocated, then o
21430 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69  wnership of P2 i
21440 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f  s transferred to
21450 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73   the pseudo-curs
21460 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74  or.** and regist
21470 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70  er P2 becomes ep
21480 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65  hemeral.  If the
21490 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67   cursor is chang
214a0 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  ed, the.** value
214b0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
214c0 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65  will then change
214d0 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69  .  Make sure thi
214e0 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61  s does not.** ca
214f0 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  use any problems
21500 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  .).**.** This in
21510 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
21520 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20  orks on tables. 
21530 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   The equivalent 
21540 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66  instruction.** f
21550 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50  or indices is OP
21560 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f  _IdxInsert..*/./
21570 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74  * Opcode: Insert
21580 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20  Int P1 P2 P3 P4 
21590 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
215a0 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
215b0 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70   OP_Insert excep
215c0 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 69  t that the key i
215d0 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  s the.** integer
215e0 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74   value P3, not t
215f0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
21600 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20 69  integer stored i
21610 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
21620 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74  /.case OP_Insert
21630 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  : .case OP_Inser
21640 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tInt: {.  Mem *p
21650 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d  Data;       /* M
21660 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
21670 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63  data for the rec
21680 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
21690 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65  ed */.  Mem *pKe
216a0 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  y;        /* MEM
216b0 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65   cell holding ke
216c0 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  y  for the recor
216d0 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b  d */.  i64 iKey;
216e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
216f0 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72  integer ROWID or
21700 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65 63   key for the rec
21710 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
21720 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ed */.  VdbeCurs
21730 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72  or *pC;   /* Cur
21740 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74  sor to table int
21750 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69  o which insert i
21760 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  s written */.  i
21770 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20  nt nZero;       
21780 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
21790 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65  ro-bytes to appe
217a0 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b  nd */.  int seek
217b0 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73  Result;   /* Res
217c0 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65  ult of prior see
217d0 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45  k or 0 if no USE
217e0 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
217f0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
21800 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61  *zDb;  /* databa
21810 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62  se name - used b
21820 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  y the update hoo
21830 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  k */.  Table *pT
21840 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c  ab;      /* Tabl
21850 65 20 73 74 72 75 63 74 75 72 65 20 2d 20 75 73  e structure - us
21860 65 64 20 62 79 20 75 70 64 61 74 65 20 61 6e 64  ed by update and
21870 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
21880 73 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20  s */.  int op;  
21890 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f           /* Opco
218a0 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f  de for update ho
218b0 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ok: SQLITE_UPDAT
218c0 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45  E or SQLITE_INSE
218d0 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d  RT */..  pData =
218e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
218f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21900 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
21910 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
21920 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
21930 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20  lid(pData) );.  
21940 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
21950 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
21960 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
21970 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
21980 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
21990 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
219a0 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
219b0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
219c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
219d0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
219e0 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70  LE || pOp->p4typ
219f0 65 3d 3d 50 34 5f 4e 4f 54 55 53 45 44 20 29 3b  e==P4_NOTUSED );
21a00 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
21a10 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61  E(pOp->p2, pData
21a20 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  );..  if( pOp->o
21a30 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
21a40 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26   ){.    pKey = &
21a50 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
21a60 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d     assert( pKey-
21a70 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
21a80 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
21a90 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29  memIsValid(pKey)
21aa0 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
21ab0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
21ac0 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20  pKey);.    iKey 
21ad0 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d  = pKey->u.i;.  }
21ae0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
21af0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
21b00 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20  P_InsertInt );. 
21b10 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70     iKey = pOp->p
21b20 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f  3;.  }..  if( pO
21b30 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
21b40 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54  BLE && HAS_UPDAT
21b50 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20  E_HOOK(db) ){.  
21b60 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
21b70 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73  Table );.    ass
21b80 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
21b90 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  );.    zDb = db-
21ba0 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
21bb0 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  ame;.    pTab = 
21bc0 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20  pOp->p4.pTab;.  
21bd0 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35    op = ((pOp->p5
21be0 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
21bf0 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44  TE) ? SQLITE_UPD
21c00 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53  ATE : SQLITE_INS
21c10 45 52 54 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65  ERT);.  }..#ifde
21c20 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
21c30 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
21c40 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70   /* Invoke the p
21c50 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20  re-update hook, 
21c60 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66 28 20  if any */.  if( 
21c70 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61  db->xPreUpdateCa
21c80 6c 6c 62 61 63 6b 20 0a 20 20 20 26 26 20 70 4f  llback .   && pO
21c90 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
21ca0 42 4c 45 0a 20 20 20 26 26 20 28 21 28 70 4f 70  BLE.   && (!(pOp
21cb0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
21cc0 55 50 44 41 54 45 29 20 7c 7c 20 70 43 2d 3e 72  UPDATE) || pC->r
21cd0 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 29 0a  owidIsValid==0).
21ce0 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33    ){.    sqlite3
21cf0 56 64 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f  VdbePreUpdateHoo
21d00 6b 28 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f  k(p, pC, SQLITE_
21d10 49 4e 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61  INSERT, zDb, pTa
21d20 62 2c 20 69 4b 65 79 2c 20 70 4f 70 2d 3e 70 32  b, iKey, pOp->p2
21d30 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
21d40 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
21d50 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
21d60 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
21d70 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
21d80 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29  FLAG_LASTROWID )
21d90 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
21da0 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65   lastRowid = iKe
21db0 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  y;.  if( pData->
21dc0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
21dd0 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a   ){.    pData->z
21de0 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d   = 0;.    pData-
21df0 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  >n = 0;.  }else{
21e00 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61  .    assert( pDa
21e10 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ta->flags & (MEM
21e20 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29  _Blob|MEM_Str) )
21e30 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75  ;.  }.  seekResu
21e40 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
21e50 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
21e60 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
21e70 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
21e80 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
21e90 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
21ea0 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61     nZero = pData
21eb0 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c  ->u.nZero;.  }el
21ec0 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20  se{.    nZero = 
21ed0 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  0;.  }.  sqlite3
21ee0 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f  BtreeSetCachedRo
21ef0 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  wid(pC->pCursor,
21f00 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   0);.  rc = sqli
21f10 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
21f20 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69  C->pCursor, 0, i
21f30 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Key,.           
21f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
21f50 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e  Data->z, pData->
21f60 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20  n, nZero,.      
21f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f80 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50      pOp->p5 & OP
21f90 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65 65  FLAG_APPEND, see
21fa0 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70  kResult.  );.  p
21fb0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
21fc0 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  = 0;.  pC->defer
21fd0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
21fe0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
21ff0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
22000 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
22010 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
22020 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
22030 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
22040 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43   && db->xUpdateC
22050 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
22060 70 34 2e 7a 20 29 7b 0a 20 20 20 20 64 62 2d 3e  p4.z ){.    db->
22070 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
22080 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
22090 6f 70 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a  op, zDb, pTab->z
220a0 4e 61 6d 65 2c 20 69 4b 65 79 29 3b 0a 20 20 7d  Name, iKey);.  }
220b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
220c0 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50  Opcode: Delete P
220d0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
220e0 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65  ** Delete the re
220f0 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68  cord at which th
22100 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63  e P1 cursor is c
22110 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
22120 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72  g..**.** The cur
22130 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74  sor will be left
22140 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74   pointing at eit
22150 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20  her the next or 
22160 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20  the previous.** 
22170 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61  record in the ta
22180 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65  ble. If it is le
22190 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
221a0 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20  he next record, 
221b0 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74  then.** the next
221c0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
221d0 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f  n will be a no-o
221e0 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73 20  p.  Hence it is 
221f0 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20  OK to delete.** 
22200 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69  a record from wi
22210 74 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f  thin an Next loo
22220 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  p..**.** If the 
22230 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
22240 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73 65 74  lag of P2 is set
22250 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
22260 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
22270 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
22280 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a  therwise not)..*
22290 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74  *.** P1 must not
222a0 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   be pseudo-table
222b0 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20  .  It has to be 
222c0 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74  a real table wit
222d0 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f  h.** multiple ro
222e0 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  ws..**.** If P4 
222f0 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e  is not NULL then
22300 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   it points to a 
22310 54 61 62 6c 65 20 73 74 72 75 74 75 72 65 2e 20  Table struture. 
22320 49 6e 20 74 68 69 73 20 63 61 73 65 20 65 69 74  In this case eit
22330 68 65 72 20 0a 2a 2a 20 74 68 65 20 75 70 64 61  her .** the upda
22340 74 65 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65  te or pre-update
22350 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c 20   hook, or both, 
22360 6d 61 79 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20  may be invoked. 
22370 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
22380 73 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  st.** have been 
22390 70 6f 73 69 74 69 6f 6e 65 64 20 75 73 69 6e 67  positioned using
223a0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69   OP_NotFound pri
223b0 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74  or to invoking t
223c0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 20 0a 2a  his opcode in .*
223d0 2a 20 74 68 69 73 20 63 61 73 65 2e 20 53 70 65  * this case. Spe
223e0 63 69 66 69 63 61 6c 6c 79 2c 20 69 66 20 6f 6e  cifically, if on
223f0 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c  e is configured,
22400 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 20   the pre-update 
22410 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20 69 6e 76 6f  hook is .** invo
22420 6b 65 64 20 69 66 20 50 34 20 69 73 20 6e 6f 74  ked if P4 is not
22430 20 4e 55 4c 4c 2e 20 54 68 65 20 75 70 64 61 74   NULL. The updat
22440 65 2d 68 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b 65  e-hook is invoke
22450 64 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66  d if one is conf
22460 69 67 75 72 65 64 2c 20 0a 2a 2a 20 50 34 20 69  igured, .** P4 i
22470 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64 20  s not NULL, and 
22480 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
22490 47 45 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  GE flag is set i
224a0 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  n P2..**.** If t
224b0 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
224c0 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  TE flag is set i
224d0 6e 20 50 32 2c 20 74 68 65 6e 20 50 33 20 63 6f  n P2, then P3 co
224e0 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
224f0 73 73 0a 2a 2a 20 6f 66 20 74 68 65 20 6d 65 6d  ss.** of the mem
22500 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f  ory cell that co
22510 6e 74 61 69 6e 73 20 74 68 65 20 76 61 6c 75 65  ntains the value
22520 20 74 68 61 74 20 74 68 65 20 72 6f 77 69 64 20   that the rowid 
22530 6f 66 20 74 68 65 20 72 6f 77 20 77 69 6c 6c 0a  of the row will.
22540 2a 2a 20 62 65 20 73 65 74 20 74 6f 20 62 79 20  ** be set to by 
22550 74 68 65 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63  the update..*/.c
22560 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b  ase OP_Delete: {
22570 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20 56  .  i64 iKey;.  V
22580 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
22590 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
225a0 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  ;.  Table *pTab;
225b0 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a  .  int opflags;.
225c0 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70  .  opflags = pOp
225d0 2d 3e 70 32 3b 0a 20 20 69 4b 65 79 20 3d 20 30  ->p2;.  iKey = 0
225e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
225f0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22600 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
22610 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22620 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22630 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
22640 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
22650 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c  or!=0 );  /* Onl
22660 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61 6c  y valid for real
22670 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75   tables, no pseu
22680 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73  dotables */.  as
22690 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
226a0 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70  e==P4_TABLE || p
226b0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4e  Op->p4type==P4_N
226c0 4f 54 55 53 45 44 20 29 3b 0a 0a 20 20 2f 2a 20  OTUSED );..  /* 
226d0 54 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f 70  The OP_Delete op
226e0 63 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c  code always foll
226f0 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78 69  ows an OP_NotExi
22700 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20 6f  sts or OP_Last o
22710 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  r.  ** OP_Column
22720 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62   on the same tab
22730 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69  le without any i
22740 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72 61  ntervening opera
22750 74 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a 20  tions that.  ** 
22760 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69 6e  might move or in
22770 76 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72  validate the cur
22780 73 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72 73  sor.  Hence curs
22790 6f 72 20 70 43 20 69 73 20 61 6c 77 61 79 73 20  or pC is always 
227a0 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74 6f  pointing.  ** to
227b0 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 64   the row to be d
227c0 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73  eleted and the s
227d0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
227e0 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74 69  Moveto() operati
227f0 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69 73  on.  ** below is
22800 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70 20   always a no-op 
22810 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e  and cannot fail.
22820 20 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69 74    We will run it
22830 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68 2c   anyhow, though,
22840 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20 61  .  ** to guard a
22850 67 61 69 6e 73 74 20 66 75 74 75 72 65 20 63 68  gainst future ch
22860 61 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f 64  anges to the cod
22870 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20 2a  e generator..  *
22880 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  */.  assert( pC-
22890 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
228a0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
228b0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
228c0 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
228d0 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
228e0 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  _OK) ) goto abor
228f0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
22900 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64  .  /* If the upd
22910 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d  ate-hook or pre-
22920 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c  update-hook will
22930 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74   be invoked, set
22940 20 69 4b 65 79 20 74 6f 20 0a 20 20 2a 2a 20 74   iKey to .  ** t
22950 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
22960 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65 74 65  row being delete
22970 64 2e 20 53 65 74 20 7a 44 62 20 61 6e 64 20 7a  d. Set zDb and z
22980 54 61 62 20 61 73 20 77 65 6c 6c 2e 0a 20 20 2a  Tab as well..  *
22990 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  /.  if( pOp->p4.
229a0 7a 20 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f  z && HAS_UPDATE_
229b0 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20  HOOK(db) ){.    
229c0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
229d0 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
229e0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
229f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
22a00 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 3b  >rowidIsValid );
22a10 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20 73    /* lastRowid s
22a20 65 74 20 62 79 20 70 72 65 76 69 6f 75 73 20 4f  et by previous O
22a30 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20  P_NotFound */.  
22a40 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73    iKey = pC->las
22a50 74 52 6f 77 69 64 3b 0a 20 20 20 20 7a 44 62 20  tRowid;.    zDb 
22a60 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44  = db->aDb[pC->iD
22a70 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 70 54  b].zName;.    pT
22a80 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61  ab = pOp->p4.pTa
22a90 62 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53  b;.  }..#ifdef S
22aa0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
22ab0 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a  UPDATE_HOOK.  /*
22ac0 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d   Invoke the pre-
22ad0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
22ae0 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
22af0 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65  ( db->xPreUpdate
22b00 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
22b10 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73  >p4.z ){.    ass
22b20 65 72 74 28 20 21 28 6f 70 66 6c 61 67 73 20 26  ert( !(opflags &
22b30 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
22b40 29 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e  ) || (aMem[pOp->
22b50 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  p3].flags & MEM_
22b60 49 6e 74 29 20 29 3b 0a 20 20 20 20 73 71 6c 69  Int) );.    sqli
22b70 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65  te3VdbePreUpdate
22b80 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20  Hook(p, pC,.    
22b90 20 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20 4f      (opflags & O
22ba0 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
22bb0 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
22bc0 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c  : SQLITE_DELETE,
22bd0 20 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70   .        zDb, p
22be0 54 61 62 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20  Tab, iKey,.     
22bf0 20 20 20 70 4f 70 2d 3e 70 33 0a 20 20 20 20 29     pOp->p3.    )
22c00 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
22c10 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50  if( opflags & OP
22c20 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72  FLAG_ISNOOP ) br
22c30 65 61 6b 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42  eak;..  sqlite3B
22c40 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
22c50 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
22c60 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  0);.  rc = sqlit
22c70 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
22c80 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  ->pCursor);.  pC
22c90 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
22ca0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
22cb0 2f 2a 20 55 70 64 61 74 65 20 74 68 65 20 63 68  /* Update the ch
22cc0 61 6e 67 65 2d 63 6f 75 6e 74 65 72 20 61 6e 64  ange-counter and
22cd0 20 69 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   invoke the upda
22ce0 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
22cf0 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f 70  red. */.  if( op
22d00 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 4e  flags & OPFLAG_N
22d10 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 70 2d  CHANGE ){.    p-
22d20 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20  >nChange++;.    
22d30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
22d40 7a 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  z );.    if( rc=
22d50 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
22d60 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
22d70 6b 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78  k ){.      db->x
22d80 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
22d90 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53  b->pUpdateArg, S
22da0 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44  QLITE_DELETE, zD
22db0 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 69  b, pTab->zName,i
22dc0 4b 65 79 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Key);.    }.  }.
22dd0 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70    break;.}./* Op
22de0 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74  code: ResetCount
22df0 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
22e00 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   The value of th
22e10 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
22e20 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68   is copied to th
22e30 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
22e40 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e  e.** change coun
22e50 74 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79  ter (returned by
22e60 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c   subsequent call
22e70 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61  s to sqlite3_cha
22e80 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e  nges())..** Then
22e90 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61   the VMs interna
22ea0 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  l change counter
22eb0 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a   resets to 0..**
22ec0 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
22ed0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
22ee0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  s..*/.case OP_Re
22ef0 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71  setCount: {.  sq
22f00 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
22f10 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
22f20 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  ge);.  p->nChang
22f30 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
22f40 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
22f50 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50  rterCompare P1 P
22f60 32 20 50 33 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  2 P3.**.** P1 is
22f70 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
22f80 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
22f90 6f 6e 20 63 6f 6d 70 61 72 65 73 20 74 68 65 20  on compares the 
22fa0 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 0a  record blob in .
22fb0 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 20 77  ** register P3 w
22fc0 69 74 68 20 74 68 65 20 65 6e 74 72 79 20 74 68  ith the entry th
22fd0 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 63 75  at the sorter cu
22fe0 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70  rsor currently p
22ff0 6f 69 6e 74 73 20 74 6f 2e 0a 2a 2a 20 49 66 2c  oints to..** If,
23000 20 65 78 63 6c 75 64 69 6e 67 20 74 68 65 20 72   excluding the r
23010 6f 77 69 64 20 66 69 65 6c 64 73 20 61 74 20 74  owid fields at t
23020 68 65 20 65 6e 64 2c 20 74 68 65 20 74 77 6f 20  he end, the two 
23030 72 65 63 6f 72 64 73 20 61 72 65 20 61 20 6d 61  records are a ma
23040 74 63 68 2c 0a 2a 2a 20 66 61 6c 6c 20 74 68 72  tch,.** fall thr
23050 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
23060 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 4f 74   instruction. Ot
23070 68 65 72 77 69 73 65 2c 20 6a 75 6d 70 20 74 6f  herwise, jump to
23080 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
23090 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
230a0 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56  erCompare: {.  V
230b0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
230c0 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43 20   int res;..  pC 
230d0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
230e0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
230f0 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
23100 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
23110 70 2d 3e 70 33 5d 3b 0a 20 20 72 63 20 3d 20 73  p->p3];.  rc = s
23120 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
23130 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33  Compare(pC, pIn3
23140 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
23150 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
23160 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20  Op->p2-1;.  }.  
23170 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70  break;.};../* Op
23180 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61  code: SorterData
23190 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
231a0 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
231b0 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 75  gister P2 the cu
231c0 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74  rrent sorter dat
231d0 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72  a for sorter cur
231e0 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
231f0 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b  OP_SorterData: {
23200 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
23210 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  C;..  pOut = &aM
23220 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
23230 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
23240 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
23250 20 70 43 2d 3e 69 73 53 6f 72 74 65 72 20 29 3b   pC->isSorter );
23260 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
23270 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28  dbeSorterRowkey(
23280 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65  pC, pOut);.  bre
23290 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
232a0 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
232b0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
232c0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
232d0 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
232e0 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72  row data for cur
232f0 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
23300 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
23310 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
23320 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
23330 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
23340 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
23350 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
23360 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
23370 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
23380 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
23390 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
233a0 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
233b0 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
233c0 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
233d0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
233e0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
233f0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  */./* Opcode: Ro
23400 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  wKey P1 P2 * * *
23410 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
23420 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
23430 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b  e complete row k
23440 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  ey for cursor P1
23450 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f  ..** There is no
23460 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
23470 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a  of the data.  .*
23480 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70  * The key is cop
23490 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 33 20  ied onto the P3 
234a0 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79  register exactly
234b0 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f   as .** it is fo
234c0 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  und in the datab
234d0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
234e0 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  If the P1 cursor
234f0 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e   must be pointin
23500 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  g to a valid row
23510 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77   (not a NULL row
23520 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74  ).** of a real t
23530 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
23540 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  do-table..*/.cas
23550 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73  e OP_RowKey:.cas
23560 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a  e OP_RowData: {.
23570 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
23580 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
23590 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20  rsr;.  u32 n;.  
235a0 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74  i64 n64;..  pOut
235b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
235c0 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
235d0 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
235e0 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20  .  /* Note that 
235f0 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61  RowKey and RowDa
23600 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78  ta are really ex
23610 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69  actly the same i
23620 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20  nstruction */.  
23630 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23640 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23650 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
23660 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
23670 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23680 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 30 20  pC->isSorter==0 
23690 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
236a0 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d  >isTable || pOp-
236b0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44  >opcode!=OP_RowD
236c0 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ata );.  assert(
236d0 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20   pC->isIndex || 
236e0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
236f0 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
23700 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
23710 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c  assert( pC->null
23720 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Row==0 );.  asse
23730 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
23740 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
23750 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
23760 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  or!=0 );.  pCrsr
23770 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
23780 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
23790 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
237a0 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 0a 20  lid(pCrsr) );.. 
237b0 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65   /* The OP_RowKe
237c0 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61  y and OP_RowData
237d0 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20   opcodes always 
237e0 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69  follow OP_NotExi
237f0 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52  sts or.  ** OP_R
23800 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69  ewind/Op_Next wi
23810 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e  th no intervenin
23820 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74  g instructions t
23830 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69  hat might invali
23840 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75  date.  ** the cu
23850 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 74 68 65  rsor.  Hence the
23860 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74   following sqlit
23870 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
23880 74 6f 28 29 20 63 61 6c 6c 20 69 73 20 61 6c 77  to() call is alw
23890 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70  ays.  ** a no-op
238a0 20 61 6e 64 20 63 61 6e 20 6e 65 76 65 72 20 66   and can never f
238b0 61 69 6c 2e 20 20 42 75 74 20 77 65 20 6c 65 61  ail.  But we lea
238c0 76 65 20 69 74 20 69 6e 20 70 6c 61 63 65 20 61  ve it in place a
238d0 73 20 61 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f  s a safety..  */
238e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
238f0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
23900 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
23910 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
23920 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45  to(pC);.  if( NE
23930 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f  VER(rc!=SQLITE_O
23940 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  K) ) goto abort_
23950 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
23960 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78   if( pC->isIndex
23970 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
23980 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a  !pC->isTable );.
23990 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
239a0 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b  =) sqlite3BtreeK
239b0 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e  eySize(pCrsr, &n
239c0 36 34 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  64);.    assert(
239d0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
239e0 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63  ;    /* True bec
239f0 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f  ause of CursorMo
23a00 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76  veto() call abov
23a10 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34  e */.    if( n64
23a20 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
23a30 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
23a40 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
23a50 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
23a60 20 20 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a    n = (u32)n64;.
23a70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 56 41    }else{.    VVA
23a80 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
23a90 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65  te3BtreeDataSize
23aa0 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20  (pCrsr, &n);.   
23ab0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
23ac0 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20  ITE_OK );    /* 
23ad0 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f  DataSize() canno
23ae0 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66  t fail */.    if
23af0 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69  ( n>(u32)db->aLi
23b00 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
23b10 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
23b20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
23b30 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
23b40 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
23b50 6f 77 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29  ow(pOut, n, 0) )
23b60 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
23b70 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e  m;.  }.  pOut->n
23b80 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79   = n;.  MemSetTy
23b90 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
23ba0 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43  _Blob);.  if( pC
23bb0 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20  ->isIndex ){.   
23bc0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
23bd0 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20  eeKey(pCrsr, 0, 
23be0 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d  n, pOut->z);.  }
23bf0 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
23c00 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28  qlite3BtreeData(
23c10 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
23c20 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75  t->z);.  }.  pOu
23c30 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
23c40 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73  UTF8;  /* In cas
23c50 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76  e the blob is ev
23c60 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20  er cast to text 
23c70 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  */.  UPDATE_MAX_
23c80 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
23c90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
23ca0 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20  pcode: Rowid P1 
23cb0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
23cc0 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72  tore in register
23cd0 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77   P2 an integer w
23ce0 68 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20  hich is the key 
23cf0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
23d00 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73  ry that.** P1 is
23d10 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
23d20 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61   to..**.** P1 ca
23d30 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f  n be either an o
23d40 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72  rdinary table or
23d50 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
23d60 2e 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f  .  There used to
23d70 0a 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74  .** be a separat
23d80 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f  e OP_VRowid opco
23d90 64 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20  de for use with 
23da0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20  virtual tables, 
23db0 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20  but this.** one 
23dc0 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73  opcode now works
23dd0 20 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20   for both table 
23de0 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  types..*/.case O
23df0 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  P_Rowid: {      
23e00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
23e10 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
23e20 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
23e30 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71  C;.  i64 v;.  sq
23e40 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
23e50 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
23e60 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
23e70 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  le;..  assert( p
23e80 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23e90 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23ea0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23eb0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23ec0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23ed0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
23ee0 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
23ef0 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  || pC->nullRow )
23f00 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c  ;.  if( pC->null
23f10 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  Row ){.    pOut-
23f20 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
23f30 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  l;.    break;.  
23f40 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65  }else if( pC->de
23f50 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a  ferredMoveto ){.
23f60 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65      v = pC->move
23f70 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65  toTarget;.#ifnde
23f80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
23f90 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c  RTUALTABLE.  }el
23fa0 73 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62  se if( pC->pVtab
23fb0 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56  Cursor ){.    pV
23fc0 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43  tab = pC->pVtabC
23fd0 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
23fe0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
23ff0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
24000 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
24010 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72  >xRowid );.    r
24020 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  c = pModule->xRo
24030 77 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72  wid(pC->pVtabCur
24040 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 69 6d  sor, &v);.    im
24050 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70  portVtabErrMsg(p
24060 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66  , pVtab);.#endif
24070 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
24080 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
24090 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
240a0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
240b0 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
240c0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
240d0 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
240e0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
240f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
24100 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72  r;.    if( pC->r
24110 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20  owidIsValid ){. 
24120 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73       v = pC->las
24130 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73  tRowid;.    }els
24140 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
24150 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
24160 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
24170 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  v);.      assert
24180 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
24190 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f  );  /* Always so
241a0 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
241b0 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65  orMoveto() above
241c0 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   */.    }.  }.  
241d0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
241e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
241f0 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
24200 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
24210 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
24220 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
24230 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
24240 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
24250 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
24260 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
24270 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
24280 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
24290 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
242a0 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
242b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
242c0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
242d0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
242e0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
242f0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
24300 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24310 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
24320 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
24330 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
24340 6c 69 64 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  lid = 0;.  asser
24350 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 7c  t( pC->pCursor |
24360 7c 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  | pC->pVtabCurso
24370 72 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70  r );.  if( pC->p
24380 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71  Cursor ){.    sq
24390 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 43  lite3BtreeClearC
243a0 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f  ursor(pC->pCurso
243b0 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  r);.  }.  break;
243c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .}../* Opcode: L
243d0 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ast P1 P2 * * *.
243e0 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
243f0 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
24400 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
24410 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
24420 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
24430 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20  fer to the last 
24440 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
24450 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
24460 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
24470 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
24480 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
24490 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
244a0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
244b0 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
244c0 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
244d0 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
244e0 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
244f0 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
24500 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
24510 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73  ..*/.case OP_Las
24520 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
24530 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
24540 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
24550 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
24560 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
24570 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24580 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
24590 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
245a0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
245b0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
245c0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
245d0 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20  >pCursor;.  res 
245e0 3d 20 30 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  = 0;.  if( ALWAY
245f0 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20  S(pCrsr!=0) ){. 
24600 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
24610 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20  treeLast(pCrsr, 
24620 26 72 65 73 29 3b 0a 20 20 7d 0a 20 20 70 43 2d  &res);.  }.  pC-
24630 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
24640 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  es;.  pC->deferr
24650 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
24660 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
24670 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
24680 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
24690 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70  STALE;.  if( pOp
246a0 2d 3e 70 32 3e 30 20 26 26 20 72 65 73 20 29 7b  ->p2>0 && res ){
246b0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
246c0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
246d0 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
246e0 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20  e: Sort P1 P2 * 
246f0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
24700 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74  pcode does exact
24710 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
24720 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65  g as OP_Rewind e
24730 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74  xcept that.** it
24740 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75   increments an u
24750 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62  ndocumented glob
24760 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  al variable used
24770 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a   for testing..**
24780 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61  .** Sorting is a
24790 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77  ccomplished by w
247a0 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69  riting records i
247b0 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e  nto a sorting in
247c0 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77  dex,.** then rew
247d0 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65  inding that inde
247e0 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74  x and playing it
247f0 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e   back from begin
24800 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20  ning to.** end. 
24810 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53   We use the OP_S
24820 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65  ort opcode inste
24830 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20  ad of OP_Rewind 
24840 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77  to do the.** rew
24850 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74  inding so that t
24860 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
24870 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65  le will be incre
24880 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65  mented and.** re
24890 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63  gression tests c
248a0 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  an determine whe
248b0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
248c0 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20  optimizer is.** 
248d0 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69  correctly optimi
248e0 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a  zing out sorts..
248f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
24900 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d  rSort:    /* jum
24910 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  p */.case OP_Sor
24920 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
24930 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
24940 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
24950 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b  te3_sort_count++
24960 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  ;.  sqlite3_sear
24970 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64  ch_count--;.#end
24980 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  if.  p->aCounter
24990 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
249a0 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20 20  US_SORT-1]++;.  
249b0 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
249c0 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a  into OP_Rewind *
249d0 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  /.}./* Opcode: R
249e0 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20  ewind P1 P2 * * 
249f0 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
24a00 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
24a10 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e  d or Column or N
24a20 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
24a30 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
24a40 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69 72  refer to the fir
24a50 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
24a60 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
24a70 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
24a80 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
24a90 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50  x is empty and P
24aa0 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  2>0, then jump i
24ab0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
24ac0 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20  ..** If P2 is 0 
24ad0 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  or if the table 
24ae0 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
24af0 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
24b00 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
24b10 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
24b20 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
24b30 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20  Rewind: {       
24b40 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
24b50 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
24b60 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
24b70 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
24b80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
24b90 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
24ba0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
24bb0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
24bc0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
24bd0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
24be0 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d  ( pC->isSorter==
24bf0 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
24c00 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a  _SorterSort) );.
24c10 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 69 66 28    res = 1;.  if(
24c20 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b   isSorter(pC) ){
24c30 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
24c40 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e  3VdbeSorterRewin
24c50 64 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b  d(db, pC, &res);
24c60 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43  .  }else{.    pC
24c70 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
24c80 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  r;.    assert( p
24c90 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d  Crsr );.    rc =
24ca0 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72   sqlite3BtreeFir
24cb0 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
24cc0 0a 20 20 20 20 70 43 2d 3e 61 74 46 69 72 73 74  .    pC->atFirst
24cd0 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a   = res==0 ?1:0;.
24ce0 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
24cf0 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
24d00 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
24d10 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
24d20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
24d30 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70  lid = 0;.  }.  p
24d40 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
24d50 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20  )res;.  assert( 
24d60 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
24d70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
24d80 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
24d90 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
24da0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
24db0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  ../* Opcode: Nex
24dc0 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a  t P1 P2 * P4 P5.
24dd0 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75  **.** Advance cu
24de0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
24df0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
24e00 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70   next key/data p
24e10 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
24e20 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
24e30 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
24e40 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ore key/value pa
24e50 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
24e60 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
24e70 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
24e80 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
24e90 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63  he cursor advanc
24ea0 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  e was successful
24eb0 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
24ec0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
24ed0 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  ** The P1 cursor
24ee0 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72   must be for a r
24ef0 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
24f00 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
24f10 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
24f20 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
24f30 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
24f40 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
24f50 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
24f60 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a  treeNext()..**.*
24f70 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74  * If P5 is posit
24f80 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70  ive and the jump
24f90 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20   is taken, then 
24fa0 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a  event counter.**
24fb0 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20   number P5-1 in 
24fc0 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
24fd0 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d  tement is increm
24fe0 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ented..**.** See
24ff0 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f   also: Prev.*/./
25000 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50  * Opcode: Prev P
25010 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a  1 P2 * * P5.**.*
25020 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
25030 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
25040 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
25050 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
25060 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
25070 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
25080 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
25090 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
250a0 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
250b0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
250c0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
250d0 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
250e0 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
250f0 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
25100 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
25110 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
25120 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
25130 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
25140 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
25150 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
25160 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
25170 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
25180 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
25190 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
251a0 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
251b0 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 29  3BtreePrevious()
251c0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
251d0 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68   positive and th
251e0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
251f0 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e   then event coun
25200 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35  ter.** number P5
25210 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  -1 in the prepar
25220 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
25230 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a  incremented..*/.
25240 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65  case OP_SorterNe
25250 78 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  xt:    /* jump *
25260 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20  /.case OP_Prev: 
25270 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
25280 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
25290 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
252a0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
252b0 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
252c0 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
252d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
252e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
252f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
25300 3e 70 35 3c 3d 41 72 72 61 79 53 69 7a 65 28 70  >p5<=ArraySize(p
25310 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20  ->aCounter) );. 
25320 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
25330 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
25340 43 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61  C==0 ){.    brea
25350 6b 3b 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65  k;  /* See ticke
25360 74 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20  t #2273 */.  }. 
25370 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53   assert( pC->isS
25380 6f 72 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63  orter==(pOp->opc
25390 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 4e 65  ode==OP_SorterNe
253a0 78 74 29 20 29 3b 0a 20 20 69 66 28 20 69 73 53  xt) );.  if( isS
253b0 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20  orter(pC) ){.   
253c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
253d0 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 4e  code==OP_SorterN
253e0 65 78 74 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ext );.    rc = 
253f0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
25400 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72  rNext(db, pC, &r
25410 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  es);.  }else{.  
25420 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 61    res = 1;.    a
25430 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
25440 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
25450 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
25460 70 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 61  pCursor );.    a
25470 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
25480 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70  de!=OP_Next || p
25490 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
254a0 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78  =sqlite3BtreeNex
254b0 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  t );.    assert(
254c0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
254d0 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Prev || pOp->p4
254e0 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
254f0 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20  e3BtreePrevious 
25500 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4f 70 2d  );.    rc = pOp-
25510 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d  >p4.xAdvance(pC-
25520 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
25530 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  .  }.  pC->nullR
25540 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
25550 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
25560 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
25570 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
25580 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
25590 2d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  - 1;.    if( pOp
255a0 2d 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74  ->p5 ) p->aCount
255b0 65 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b  er[pOp->p5-1]++;
255c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
255d0 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  EST.    sqlite3_
255e0 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
255f0 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d  #endif.  }.  pC-
25600 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
25610 30 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f  0;.  goto check_
25620 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
25630 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
25640 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
25650 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  * P5.**.** Regis
25660 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20  ter P2 holds an 
25670 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
25680 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
25690 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
256a0 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
256b0 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
256c0 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
256d0 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74  e index P1.  Dat
256e0 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20  a for the entry 
256f0 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33  is nil..**.** P3
25700 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20   is a flag that 
25710 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20  provides a hint 
25720 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61  to the b-tree la
25730 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a  yer that this.**
25740 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c   insert is likel
25750 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
25760 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  d..**.** This in
25770 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
25780 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73  orks for indices
25790 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
257a0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
257b0 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f   for tables is O
257c0 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73  P_Insert..*/.cas
257d0 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  e OP_SorterInser
257e0 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  t:       /* in2 
257f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e  */.case OP_IdxIn
25800 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  sert: {        /
25810 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43  * in2 */.  VdbeC
25820 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
25830 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
25840 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73  int nKey;.  cons
25850 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20  t char *zKey;.. 
25860 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
25870 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
25880 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
25890 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
258a0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
258b0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
258c0 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72  rt( pC->isSorter
258d0 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
258e0 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29  OP_SorterInsert)
258f0 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d   );.  pIn2 = &aM
25900 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
25910 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61  ssert( pIn2->fla
25920 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
25930 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
25940 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c  Cursor;.  if( AL
25950 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29  WAYS(pCrsr!=0) )
25960 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
25970 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
25980 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42      rc = ExpandB
25990 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 20 20 69  lob(pIn2);.    i
259a0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
259b0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 69 73   ){.      if( is
259c0 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
259d0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
259e0 65 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74  e3VdbeSorterWrit
259f0 65 28 64 62 2c 20 70 43 2c 20 70 49 6e 32 29 3b  e(db, pC, pIn2);
25a00 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
25a10 20 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e        nKey = pIn
25a20 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 7a 4b  2->n;.        zK
25a30 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20  ey = pIn2->z;.  
25a40 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
25a50 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
25a60 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c  rsr, zKey, nKey,
25a70 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e   "", 0, 0, pOp->
25a80 70 33 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  p3, .           
25a90 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
25aa0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
25ab0 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
25ac0 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20  ult : 0).       
25ad0 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20       );.        
25ae0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
25af0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
25b00 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 63 61 63  .        pC->cac
25b10 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
25b20 5f 53 54 41 4c 45 3b 0a 20 20 20 20 20 20 7d 0a  _STALE;.      }.
25b30 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
25b40 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
25b50 20 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32   IdxDelete P1 P2
25b60 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   P3 * *.**.** Th
25b70 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20  e content of P3 
25b80 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
25b90 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50  ng at register P
25ba0 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70  2 form.** an unp
25bb0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
25bc0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d   This opcode rem
25bd0 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20  oves that entry 
25be0 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64  from the .** ind
25bf0 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ex opened by cur
25c00 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
25c10 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a  OP_IdxDelete: {.
25c20 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
25c30 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
25c40 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
25c50 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
25c60 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
25c70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73  Op->p3>0 );.  as
25c80 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
25c90 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  && pOp->p2+pOp->
25ca0 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  p3<=p->nMem+1 );
25cb0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25cc0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
25cd0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
25ce0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
25cf0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
25d00 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
25d10 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
25d20 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  r;.  if( ALWAYS(
25d30 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
25d40 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
25d50 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
25d60 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
25d70 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66  pOp->p3;.    r.f
25d80 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e  lags = 0;.    r.
25d90 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
25da0 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p2];.#ifdef SQ
25db0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
25dc0 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
25dd0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
25de0 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
25df0 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
25e00 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
25e10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
25e20 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
25e30 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
25e40 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
25e50 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
25e60 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
25e70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
25e80 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 29  reeDelete(pCrsr)
25e90 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  ;.    }.    asse
25ea0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
25eb0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
25ec0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
25ed0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
25ee0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
25ef0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f  /* Opcode: IdxRo
25f00 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
25f10 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
25f20 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
25f30 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
25f40 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
25f50 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  in the record at
25f60 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74  .** the end of t
25f70 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69  he index key poi
25f80 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f  nted to by curso
25f90 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65  r P1.  This inte
25fa0 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  ger should be.**
25fb0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
25fc0 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f  e table entry to
25fd0 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65   which this inde
25fe0 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a  x entry points..
25ff0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
26000 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72  Rowid, MakeRecor
26010 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  d..*/.case OP_Id
26020 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  xRowid: {       
26030 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
26040 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42  rerelease */.  B
26050 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
26060 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
26070 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a  ;.  i64 rowid;..
26080 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26090 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
260a0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
260b0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
260c0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
260d0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
260e0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
260f0 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
26100 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66  = MEM_Null;.  if
26110 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d  ( ALWAYS(pCrsr!=
26120 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  0) ){.    rc = s
26130 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
26140 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20  Moveto(pC);.    
26150 69 66 28 20 4e 45 56 45 52 28 72 63 29 20 29 20  if( NEVER(rc) ) 
26160 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
26170 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 61 73 73  o_error;.    ass
26180 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
26190 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
261a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
261b0 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20  Table==0 );.    
261c0 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77  if( !pC->nullRow
261d0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
261e0 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
261f0 69 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72  id(db, pCrsr, &r
26200 6f 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28  owid);.      if(
26210 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
26220 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
26230 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
26240 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
26250 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77   pOut->u.i = row
26260 69 64 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  id;.      pOut->
26270 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
26280 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
26290 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
262a0 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33  : IdxGE P1 P2 P3
262b0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65   P4 P5.**.** The
262c0 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
262d0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
262e0 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
262f0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
26300 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
26310 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70  the ROWID.  Comp
26320 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
26330 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
26340 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
26350 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
26360 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
26370 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e  ing the ROWID on
26380 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
26390 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
263a0 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
263b0 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
263c0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
263d0 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
263e0 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
263f0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
26400 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
26410 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
26420 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P5 is non-zer
26430 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76  o then the key v
26440 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65  alue is increase
26450 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20  d by an epsilon 
26460 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65  .** prior to the
26470 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
26480 69 73 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f  is make the opco
26490 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78  de work like Idx
264a0 47 54 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61  GT except.** tha
264b0 74 20 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f  t if the key fro
264c0 6d 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  m register P3 is
264d0 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
264e0 20 6b 65 79 20 69 6e 20 74 68 65 20 63 75 72 73   key in the curs
264f0 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  or,.** the resul
26500 74 20 69 73 20 66 61 6c 73 65 20 77 68 65 72 65  t is false where
26510 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74  as it would be t
26520 72 75 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a  rue with IdxGT..
26530 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
26540 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xLT P1 P2 P3 P4 
26550 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  P5.**.** The P4 
26560 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
26570 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
26580 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
26590 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
265a0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
265b0 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
265c0 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
265d0 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
265e0 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
265f0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
26600 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
26610 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  the ROWID on the
26620 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
26630 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
26640 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
26650 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
26660 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
26670 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
26680 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
26690 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
266a0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
266b0 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68  5 is non-zero th
266c0 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  en the key value
266d0 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79   is increased by
266e0 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f   an epsilon prio
266f0 72 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d  r .** to the com
26700 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d  parison.  This m
26710 61 6b 65 73 20 74 68 65 20 6f 70 63 6f 64 65 20  akes the opcode 
26720 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e  work like IdxLE.
26730 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c  .*/.case OP_IdxL
26740 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
26750 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
26760 64 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20 2f  dxGE: {        /
26770 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
26780 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
26790 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
267a0 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
267b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
267c0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
267d0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
267e0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
267f0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
26800 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
26810 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
26820 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
26830 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29  C->pCursor!=0) )
26840 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
26850 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
26860 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
26870 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
26880 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
26890 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
268a0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
268b0 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   );.    r.pKeyIn
268c0 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
268d0 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
268e0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
268f0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
26900 35 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61  5 ){.      r.fla
26910 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e  gs = UNPACKED_IN
26920 43 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44  CRKEY | UNPACKED
26930 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20  _PREFIX_MATCH;. 
26940 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
26950 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
26960 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b  ED_PREFIX_MATCH;
26970 0a 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65  .    }.    r.aMe
26980 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
26990 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
269a0 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e  E_DEBUG.    { in
269b0 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
269c0 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
269d0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
269e0 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
269f0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 63   }.#endif.    rc
26a00 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
26a10 78 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 2c 20  xKeyCompare(pC, 
26a20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69  &r, &res);.    i
26a30 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
26a40 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20  OP_IdxLT ){.    
26a50 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20    res = -res;.  
26a60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
26a70 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
26a80 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a  de==OP_IdxGE );.
26a90 20 20 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 20        res++;.   
26aa0 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30   }.    if( res>0
26ab0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
26ac0 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20 20  Op->p2 - 1 ;.   
26ad0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
26ae0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
26af0 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a  stroy P1 P2 P3 *
26b00 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
26b10 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  an entire databa
26b20 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
26b30 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
26b40 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
26b50 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76  e.** file is giv
26b60 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  en by P1..**.** 
26b70 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
26b80 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20  destroyed is in 
26b90 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
26ba0 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e  e file if P3==0.
26bb0 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68    If.** P3==1 th
26bc0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  en the table to 
26bd0 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  be clear is in t
26be0 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
26bf0 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68  abase file.** th
26c00 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  at is used to st
26c10 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  ore tables creat
26c20 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  e using CREATE T
26c30 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a  EMPORARY TABLE..
26c40 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  **.** If AUTOVAC
26c50 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74  UUM is enabled t
26c60 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62  hen it is possib
26c70 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20  le that another 
26c80 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67  root page.** mig
26c90 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f  ht be moved into
26ca0 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74   the newly delet
26cb0 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  ed root page in 
26cc0 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c  order to keep al
26cd0 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20  l.** root pages 
26ce0 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68  contiguous at th
26cf0 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
26d00 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
26d10 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75  e former.** valu
26d20 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61  e of the root pa
26d30 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20  ge that moved - 
26d40 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65  its value before
26d50 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72   the move occurr
26d60 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65  ed -.** is store
26d70 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
26d80 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a  .  If no page .*
26d90 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72  * movement was r
26da0 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65  equired (because
26db0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
26dc0 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72   dropped was alr
26dd0 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73  eady .** the las
26de0 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74  t one in the dat
26df0 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65  abase) then a ze
26e00 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
26e10 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
26e20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
26e30 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61   disabled then a
26e40 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20   zero is stored 
26e50 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
26e60 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
26e70 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50  Clear.*/.case OP
26e80 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20  _Destroy: {     
26e90 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
26ea0 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76  se */.  int iMov
26eb0 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a  ed;.  int iCnt;.
26ec0 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20    Vdbe *pVdbe;. 
26ed0 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73   int iDb;..  ass
26ee0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
26ef0 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53  ==0 );.#ifndef S
26f00 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
26f10 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d  ALTABLE.  iCnt =
26f20 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d   0;.  for(pVdbe=
26f30 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65  db->pVdbe; pVdbe
26f40 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d  ; pVdbe = pVdbe-
26f50 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28  >pNext){.    if(
26f60 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56   pVdbe->magic==V
26f70 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26  DBE_MAGIC_RUN &&
26f80 20 70 56 64 62 65 2d 3e 62 49 73 52 65 61 64 65   pVdbe->bIsReade
26f90 72 20 0a 20 20 20 20 20 26 26 20 70 56 64 62 65  r .     && pVdbe
26fa0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32  ->inVtabMethod<2
26fb0 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30   && pVdbe->pc>=0
26fc0 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69   .    ){.      i
26fd0 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  Cnt++;.    }.  }
26fe0 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20  .#else.  iCnt = 
26ff0 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3b 0a 23  db->nVdbeRead;.#
27000 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c  endif.  pOut->fl
27010 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
27020 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a    if( iCnt>1 ){.
27030 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
27040 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65  LOCKED;.    p->e
27050 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f  rrorAction = OE_
27060 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Abort;.  }else{.
27070 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70      iDb = pOp->p
27080 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  3;.    assert( i
27090 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73  Cnt==1 );.    as
270a0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
270b0 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
270c0 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b  )1)<<iDb))!=0 );
270d0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
270e0 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28  3BtreeDropTable(
270f0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
27100 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76  , pOp->p1, &iMov
27110 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ed);.    pOut->f
27120 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
27130 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
27140 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20  iMoved;.#ifndef 
27150 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
27160 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72  VACUUM.    if( r
27170 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
27180 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20  iMoved!=0 ){.   
27190 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61     sqlite3RootPa
271a0 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c  geMoved(db, iDb,
271b0 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31   iMoved, pOp->p1
271c0 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  );.      /* All 
271d0 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61  OP_Destroy opera
271e0 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74  tions occur on t
271f0 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f  he same btree */
27200 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
27210 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
27220 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68  t==0 || resetSch
27230 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b  emaOnFault==iDb+
27240 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74  1 );.      reset
27250 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
27260 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e  iDb+1;.    }.#en
27270 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
27280 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
27290 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a  lear P1 P2 P3.**
272a0 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
272b0 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
272c0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
272d0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
272e0 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65  t page.** in the
272f0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
27300 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20  s given by P1.  
27310 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74  But, unlike Dest
27320 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72  roy, do not.** r
27330 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20  emove the table 
27340 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68  or index from th
27350 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
27360 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
27370 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20   being clear is 
27380 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
27390 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d  base file if P2=
273a0 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31  =0.  If.** P2==1
273b0 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
273c0 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
273d0 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
273e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
273f0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
27400 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
27410 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
27420 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
27430 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E..**.** If the 
27440 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P3 value is non-
27450 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74  zero, then the t
27460 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f  able referred to
27470 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69   must be an.** i
27480 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20  ntkey table (an 
27490 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  SQL table, not a
274a0 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69  n index). In thi
274b0 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63  s case the row c
274c0 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20  hange .** count 
274d0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
274e0 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
274f0 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
27500 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
27510 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72   .** If P3 is gr
27520 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
27530 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
27540 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
27550 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f  er P3 is.** also
27560 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
27570 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
27580 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
27590 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a  being cleared..*
275a0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44  *.** See also: D
275b0 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f  estroy.*/.case O
275c0 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74  P_Clear: {.  int
275d0 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43   nChange;. .  nC
275e0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73  hange = 0;.  ass
275f0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
27600 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
27610 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
27620 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
27630 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a  pOp->p2))!=0 );.
27640 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
27650 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20  reeClearTable(. 
27660 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70       db->aDb[pOp
27670 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  ->p2].pBt, pOp->
27680 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26  p1, (pOp->p3 ? &
27690 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29  nChange : 0).  )
276a0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20  ;.  if( pOp->p3 
276b0 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  ){.    p->nChang
276c0 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  e += nChange;.  
276d0 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20    if( pOp->p3>0 
276e0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
276f0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
27700 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
27710 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
27720 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
27730 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
27740 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e  aMem[pOp->p3].u.
27750 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  i += nChange;.  
27760 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
27770 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
27780 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50 32  reateTable P1 P2
27790 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c   * * *.**.** All
277a0 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  ocate a new tabl
277b0 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  e in the main da
277c0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
277d0 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
277e0 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
277f0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
27800 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
27810 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
27820 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
27830 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
27840 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
27850 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
27860 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a  egister P2.**.**
27870 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
27880 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20  between a table 
27890 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20  and an index is 
278a0 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d  this:  A table m
278b0 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d  ust.** have a 4-
278c0 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79  byte integer key
278d0 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72   and can have ar
278e0 62 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41  bitrary data.  A
278f0 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61  n index.** has a
27900 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20  n arbitrary key 
27910 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a  but no data..**.
27920 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65  ** See also: Cre
27930 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f  ateIndex.*/./* O
27940 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64  pcode: CreateInd
27950 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ex P1 P2 * * *.*
27960 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20  *.** Allocate a 
27970 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65  new index in the
27980 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
27990 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
279a0 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69  in the.** auxili
279b0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
279c0 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
279d0 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
279e0 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
279f0 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f  .  Write the roo
27a00 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t page number of
27a10 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
27a20 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
27a30 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f  P2..**.** See do
27a40 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f  cumentation on O
27a50 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f  P_CreateTable fo
27a60 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
27a70 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
27a80 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78  e OP_CreateIndex
27a90 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  :            /* 
27aa0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
27ab0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
27ac0 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20  eTable: {       
27ad0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
27ae0 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70  lease */.  int p
27af0 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73  gno;.  int flags
27b00 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
27b10 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65  pgno = 0;.  asse
27b20 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
27b30 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
27b40 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
27b50 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
27b60 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
27b70 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
27b80 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
27b90 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
27ba0 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
27bb0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
27bc0 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
27bd0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
27be0 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20  =OP_CreateTable 
27bf0 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20  ){.    /* flags 
27c00 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20  = BTREE_INTKEY; 
27c10 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  */.    flags = B
27c20 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d  TREE_INTKEY;.  }
27c30 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20  else{.    flags 
27c40 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b  = BTREE_BLOBKEY;
27c50 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
27c60 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
27c70 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70  ble(pDb->pBt, &p
27c80 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70  gno, flags);.  p
27c90 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b  Out->u.i = pgno;
27ca0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
27cb0 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68  Opcode: ParseSch
27cc0 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ema P1 * * P4 *.
27cd0 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70  **.** Read and p
27ce0 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73  arse all entries
27cf0 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
27d00 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66  _MASTER table of
27d10 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20   database P1.** 
27d20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57  that match the W
27d30 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20  HERE clause P4. 
27d40 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
27d50 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70  de invokes the p
27d60 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20  arser to create 
27d70 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  a new virtual ma
27d80 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72  chine,.** then r
27d90 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74  uns the new virt
27da0 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74  ual machine.  It
27db0 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e   is thus a re-en
27dc0 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f  trant opcode..*/
27dd0 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63  .case OP_ParseSc
27de0 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44  hema: {.  int iD
27df0 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b;.  const char 
27e00 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72  *zMaster;.  char
27e10 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61   *zSql;.  InitDa
27e20 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20  ta initData;..  
27e30 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20  /* Any prepared 
27e40 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
27e50 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f  nvokes this opco
27e60 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74  de will hold mut
27e70 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65  exes.  ** on eve
27e80 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20  ry btree.  This 
27e90 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74  is a prerequisit
27ea0 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a  e for invoking .
27eb0 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74    ** sqlite3Init
27ec0 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f  Callback()..  */
27ed0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
27ee0 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30  EBUG.  for(iDb=0
27ef0 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69  ; iDb<db->nDb; i
27f00 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  Db++){.    asser
27f10 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c  t( iDb==1 || sql
27f20 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75  ite3BtreeHoldsMu
27f30 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  tex(db->aDb[iDb]
27f40 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e  .pBt) );.  }.#en
27f50 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70  dif..  iDb = pOp
27f60 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
27f70 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
27f80 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
27f90 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  t( DbHasProperty
27fa0 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68  (db, iDb, DB_Sch
27fb0 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20  emaLoaded) );.  
27fc0 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20  /* Used to be a 
27fd0 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b  conditional */ {
27fe0 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53  .    zMaster = S
27ff0 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29  CHEMA_TABLE(iDb)
28000 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64  ;.    initData.d
28010 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74  b = db;.    init
28020 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e  Data.iDb = pOp->
28030 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  p1;.    initData
28040 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e  .pzErrMsg = &p->
28050 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71  zErrMsg;.    zSq
28060 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  l = sqlite3MPrin
28070 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53  tf(db,.       "S
28080 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74  ELECT name, root
28090 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27  page, sql FROM '
280a0 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 20  %q'.%s WHERE %s 
280b0 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c  ORDER BY rowid",
280c0 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  .       db->aDb[
280d0 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73  iDb].zName, zMas
280e0 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ter, pOp->p4.z);
280f0 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30  .    if( zSql==0
28100 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
28110 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
28120 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
28130 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62  sert( db->init.b
28140 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  usy==0 );.      
28150 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
28160 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74  1;.      initDat
28170 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  a.rc = SQLITE_OK
28180 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
28190 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
281a0 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  d );.      rc = 
281b0 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
281c0 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e   zSql, sqlite3In
281d0 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69  itCallback, &ini
281e0 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  tData, 0);.     
281f0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
28200 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61  OK ) rc = initDa
28210 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c  ta.rc;.      sql
28220 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
28230 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  Sql);.      db->
28240 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20  init.busy = 0;. 
28250 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
28260 63 20 29 20 73 71 6c 69 74 65 33 52 65 73 65 74  c ) sqlite3Reset
28270 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
28280 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 69 66  ection(db);.  if
28290 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ( rc==SQLITE_NOM
282a0 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  EM ){.    goto n
282b0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65  o_mem;.  }.  bre
282c0 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65  ak;  .}..#if !de
282d0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
282e0 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70  T_ANALYZE)./* Op
282f0 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73  code: LoadAnalys
28300 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  is P1 * * * *.**
28310 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c  .** Read the sql
28320 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
28330 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20  for database P1 
28340 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e  and load the con
28350 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20  tent.** of that 
28360 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69  table into the i
28370 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61  nternal index ha
28380 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  sh table.  This 
28390 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68  will cause.** th
283a0 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65  e analysis to be
283b0 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61   used when prepa
283c0 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75  ring all subsequ
283d0 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a  ent queries..*/.
283e0 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c  case OP_LoadAnal
283f0 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74  ysis: {.  assert
28400 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
28410 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
28420 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
28430 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62  3AnalysisLoad(db
28440 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72  , pOp->p1);.  br
28450 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20  eak;  .}.#endif 
28460 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
28470 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
28480 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
28490 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a  DropTable P1 * *
284a0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
284b0 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
284c0 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
284d0 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
284e0 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
284f0 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20   table named P4 
28500 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
28510 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
28520 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a  after a table.**
28530 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f   is dropped in o
28540 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65  rder to keep the
28550 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
28560 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
28570 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
28580 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
28590 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
285a0 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a  se OP_DropTable:
285b0 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
285c0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
285d0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
285e0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
285f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
28600 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20   DropIndex P1 * 
28610 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
28620 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
28630 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
28640 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
28650 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
28660 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34  e index named P4
28670 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
28680 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
28690 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a   after an index.
286a0 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e  ** is dropped in
286b0 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
286c0 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
286d0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
286e0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
286f0 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
28700 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
28710 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65  case OP_DropInde
28720 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  x: {.  sqlite3Un
28730 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
28740 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  ex(db, pOp->p1, 
28750 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
28760 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28770 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50  e: DropTrigger P
28780 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
28790 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
287a0 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
287b0 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
287c0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
287d0 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61  * the trigger na
287e0 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
287f0 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
28800 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
28810 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f  rigger.** is dro
28820 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  pped in order to
28830 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
28840 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
28850 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
28860 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
28870 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
28880 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
28890 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20  ropTrigger: {.  
288a0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
288b0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62  DeleteTrigger(db
288c0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
288d0 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
288e0 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  }...#ifndef SQLI
288f0 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
28900 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64  Y_CHECK./* Opcod
28910 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50  e: IntegrityCk P
28920 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a  1 P2 P3 * P5.**.
28930 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69  ** Do an analysi
28940 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
28950 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  ly open database
28960 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72  .  Store in.** r
28970 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74  egister P1 the t
28980 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20  ext of an error 
28990 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69  message describi
289a0 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  ng any problems.
289b0 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65  .** If no proble
289c0 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74  ms are found, st
289d0 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65  ore a NULL in re
289e0 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
289f0 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33   The register P3
28a00 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61   contains the ma
28a10 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
28a20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a  allowed errors..
28a30 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50  ** At most reg(P
28a40 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62  3) errors will b
28a50 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49  e reported..** I
28a60 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
28a70 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70  he analysis stop
28a80 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67  s as soon as reg
28a90 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20  (P1) errors are 
28aa0 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50  .** seen.  Reg(P
28ab0 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69  1) is updated wi
28ac0 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  th the number of
28ad0 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
28ae0 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  g..**.** The roo
28af0 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f  t page numbers o
28b00 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20  f all tables in 
28b10 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65  the database are
28b20 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72   integer.** stor
28b30 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20 72  ed in reg(P1), r
28b40 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50 31  eg(P1+1), reg(P1
28b50 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65  +2), ....  There
28b60 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a 2a   are P2 tables.*
28b70 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49  * total..**.** I
28b80 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
28b90 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64  , the check is d
28ba0 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c  one on the auxil
28bb0 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  iary database.**
28bc0 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d   file, not the m
28bd0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
28be0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
28bf0 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
28c00 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e  implement the in
28c10 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72  tegrity_check pr
28c20 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  agma..*/.case OP
28c30 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a  _IntegrityCk: {.
28c40 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20    int nRoot;    
28c50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
28c60 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20  ables to check. 
28c70 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74   (Number of root
28c80 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e   pages.) */.  in
28c90 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a  t *aRoot;     /*
28ca0 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61   Array of rootpa
28cb0 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74  ge numbers for t
28cc0 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63  ables to be chec
28cd0 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20  ked */.  int j; 
28ce0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
28cf0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e   counter */.  in
28d00 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a  t nErr;       /*
28d10 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
28d20 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20  s reported */.  
28d30 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20  char *z;        
28d40 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65  /* Text of the e
28d50 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20  rror report */. 
28d60 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20   Mem *pnErr;    
28d70 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65   /* Register kee
28d80 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72  ping track of er
28d90 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a  rors remaining *
28da0 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
28db0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e  bIsReader );.  n
28dc0 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  Root = pOp->p2;.
28dd0 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
28de0 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73  0 );.  aRoot = s
28df0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
28e00 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74  w(db, sizeof(int
28e10 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20  )*(nRoot+1) );. 
28e20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20   if( aRoot==0 ) 
28e30 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61  goto no_mem;.  a
28e40 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
28e50 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
28e60 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20  nMem );.  pnErr 
28e70 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
28e80 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
28e90 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  rr->flags & MEM_
28ea0 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Int)!=0 );.  ass
28eb0 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
28ec0 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
28ed0 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
28ee0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
28ef0 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d  p->p1];.  for(j=
28f00 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29  0; j<nRoot; j++)
28f10 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d  {.    aRoot[j] =
28f20 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62   (int)sqlite3Vdb
28f30 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b  eIntValue(&pIn1[
28f40 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74  j]);.  }.  aRoot
28f50 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  [j] = 0;.  asser
28f60 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
28f70 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
28f80 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
28f90 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70  (((yDbMask)1)<<p
28fa0 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20  Op->p5))!=0 );. 
28fb0 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
28fc0 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
28fd0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
28fe0 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f  .pBt, aRoot, nRo
28ff0 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
29000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29010 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
29020 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
29030 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
29040 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72  , aRoot);.  pnEr
29050 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a  r->u.i -= nErr;.
29060 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
29070 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
29080 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
29090 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
290a0 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
290b0 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
290c0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
290d0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
290e0 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
290f0 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
29100 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
29110 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
29120 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
29130 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
29140 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
29150 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
29160 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
29170 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
29180 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
29190 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
291a0 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
291b0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
291c0 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72  sert the integer
291d0 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72   value held by r
291e0 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20  egister P2 into 
291f0 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a  a boolean index.
29200 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ** held in regis
29210 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ter P1..**.** An
29220 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73   assertion fails
29230 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e   if P2 is not an
29240 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
29250 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20  e OP_RowSetAdd: 
29260 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20  {       /* in1, 
29270 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in2 */.  pIn1 = 
29280 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
29290 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
292a0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
292b0 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
292c0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
292d0 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
292e0 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
292f0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
29300 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
29310 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
29320 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
29330 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
29340 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
29350 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77    }.  sqlite3Row
29360 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
29370 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d  u.pRowSet, pIn2-
29380 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  >u.i);.  break;.
29390 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
293a0 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50  wSetRead P1 P2 P
293b0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72  3 * *.**.** Extr
293c0 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
293d0 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
293e0 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
293f0 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
29400 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
29410 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
29420 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
29430 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
29440 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
29450 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
29460 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
29470 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
29480 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
29490 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
294a0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
294b0 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  al;..  pIn1 = &a
294c0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
294d0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
294e0 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
294f0 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  0 .   || sqlite3
29500 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d  RowSetNext(pIn1-
29510 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c  >u.pRowSet, &val
29520 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a  )==0.  ){.    /*
29530 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64   The boolean ind
29540 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20  ex is empty */. 
29550 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
29560 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
29570 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
29580 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   - 1;.  }else{. 
29590 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61     /* A value wa
295a0 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68  s pulled from th
295b0 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 73  e index */.    s
295c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
295d0 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
295e0 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a  >p3], val);.  }.
295f0 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
29600 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
29610 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
29620 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34  Test P1 P2 P3 P4
29630 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
29640 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  P3 is assumed to
29650 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69   hold a 64-bit i
29660 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66  nteger value. If
29670 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
29680 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65  contains a RowSe
29690 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61  t object and tha
296a0 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  t RowSet object 
296b0 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20  contains.** the 
296c0 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33  value held in P3
296d0 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74  , jump to regist
296e0 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  er P2. Otherwise
296f0 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20  , insert the.** 
29700 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e  integer in P3 in
29710 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e  to the RowSet an
29720 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f  d continue on to
29730 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63   the.** next opc
29740 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  ode..**.** The R
29750 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20  owSet object is 
29760 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68  optimized for th
29770 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63  e case where suc
29780 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20  cessive sets.** 
29790 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65  of integers, whe
297a0 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74  re each set cont
297b0 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74  ains no duplicat
297c0 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20  es. Each set.** 
297d0 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65  of values is ide
297e0 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69  ntified by a uni
297f0 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68  que P4 value. Th
29800 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d  e first set.** m
29810 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20  ust have P4==0, 
29820 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34  the final set P4
29830 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65  =-1.  P4 must be
29840 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a   either -1 or.**
29850 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20   non-negative.  
29860 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  For non-negative
29870 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e   values of P4 on
29880 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a  ly the lower 4.*
29890 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69  * bits are signi
298a0 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  ficant..**.** Th
298b0 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69  is allows optimi
298c0 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65  zations: (a) whe
298d0 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73  n P4==0 there is
298e0 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74   no need to test
298f0 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f  .** the rowset o
29900 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73  bject for P3, as
29910 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
29920 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e  d not to contain
29930 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e   it,.** (b) when
29940 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73   P4==-1 there is
29950 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65   no need to inse
29960 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73  rt the value, as
29970 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65   it will.** neve
29980 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c  r be tested for,
29990 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20   and (c) when a 
299a0 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61  value that is pa
299b0 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a  rt of set X is.*
299c0 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72  * inserted, ther
299d0 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
299e0 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66  search to see if
299f0 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
29a00 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
29a10 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  y inserted as pa
29a20 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c  rt of set X (onl
29a30 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76  y if it was prev
29a40 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74  iously.** insert
29a50 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f  ed as part of so
29a60 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a  me other set)..*
29a70 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
29a80 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Test: {         
29a90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
29aa0 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
29ab0 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69  .  int iSet;.  i
29ac0 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49  nt exists;..  pI
29ad0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
29ae0 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
29af0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
29b00 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  iSet = pOp->p4.i
29b10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
29b20 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
29b30 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  );..  /* If ther
29b40 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74  e is anything ot
29b50 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65  her than a rowse
29b60 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f  t object in memo
29b70 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a  ry cell P1,.  **
29b80 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61   delete it now a
29b90 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31  nd initialize P1
29ba0 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72   with an empty r
29bb0 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28  owset.  */.  if(
29bc0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
29bd0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
29be0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
29bf0 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
29c00 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  n1);.    if( (pI
29c10 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
29c20 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
29c30 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20  o no_mem;.  }.. 
29c40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
29c50 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
29c60 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74  ;.  assert( iSet
29c70 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20  ==-1 || iSet>=0 
29c80 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b  );.  if( iSet ){
29c90 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71  .    exists = sq
29ca0 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
29cb0 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
29cc0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
29cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ce0 20 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f 20   (u8)(iSet>=0 ? 
29cf0 69 53 65 74 20 26 20 30 78 66 20 3a 20 30 78 66  iSet & 0xf : 0xf
29d00 66 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  f),.            
29d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20     pIn3->u.i);. 
29d30 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29 7b     if( exists ){
29d40 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
29d50 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
29d60 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
29d70 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b    if( iSet>=0 ){
29d80 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53  .    sqlite3RowS
29d90 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
29da0 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e  .pRowSet, pIn3->
29db0 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  u.i);.  }.  brea
29dc0 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
29dd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
29de0 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  ER../* Opcode: P
29df0 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20  rogram P1 P2 P3 
29e00 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P4 *.**.** Execu
29e10 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70  te the trigger p
29e20 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73  rogram passed as
29e30 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42   P4 (type P4_SUB
29e40 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a  PROGRAM). .**.**
29e50 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P1 contains the
29e60 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
29e70 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
29e80 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69   contains the fi
29e90 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  rst memory .** c
29ea0 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20  ell in an array 
29eb0 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61  of values used a
29ec0 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  s arguments to t
29ed0 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
29ee0 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  P2 .** contains 
29ef0 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a  the address to j
29f00 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75  ump to if the su
29f10 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73  b-program throws
29f20 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65   an IGNORE .** e
29f30 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74  xception using t
29f40 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74  he RAISE() funct
29f50 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33  ion. Register P3
29f60 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
29f70 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d  dress .** of a m
29f80 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
29f90 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20  is (the parent) 
29fa0 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20  VM that is used 
29fb0 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20  to allocate the 
29fc0 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  .** memory requi
29fd0 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76  red by the sub-v
29fe0 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a  dbe at runtime..
29ff0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2a000 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20  inter to the VM 
2a010 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
2a020 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
2a030 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72  */.case OP_Progr
2a040 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  am: {        /* 
2a050 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  jump */.  int nM
2a060 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
2a070 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
2a080 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
2a090 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
2a0a0 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  */.  int nByte; 
2a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2a0c0 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65  Bytes of runtime
2a0d0 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
2a0e0 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
2a0f0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20  */.  Mem *pRt;  
2a100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2a110 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f  Register to allo
2a120 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61  cate runtime spa
2a130 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ce */.  Mem *pMe
2a140 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2a150 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61  /* Used to itera
2a160 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72  te through memor
2a170 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d  y cells */.  Mem
2a180 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
2a190 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d       /* Last mem
2a1a0 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20  ory cell in new 
2a1b0 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46  array */.  VdbeF
2a1c0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
2a1d0 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66     /* New vdbe f
2a1e0 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20  rame to execute 
2a1f0 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  in */.  SubProgr
2a200 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
2a210 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74  /* Sub-program t
2a220 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76  o execute */.  v
2a230 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20  oid *t;         
2a240 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
2a250 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67  identifying trig
2a260 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72  ger */..  pProgr
2a270 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72  am = pOp->p4.pPr
2a280 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26  ogram;.  pRt = &
2a290 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2a2a0 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2a2b0 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
2a2c0 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
2a2d0 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
2a2e0 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
2a2f0 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
2a300 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
2a310 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
2a320 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
2a330 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
2a340 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
2a350 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
2a360 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
2a370 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
2a380 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
2a390 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
2a3a0 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
2a3b0 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
2a3c0 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
2a3d0 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
2a3e0 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
2a3f0 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
2a400 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
2a410 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
2a420 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
2a430 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
2a440 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
2a450 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
2a460 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
2a470 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
2a480 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
2a490 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
2a4a0 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
2a4b0 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
2a4c0 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
2a4d0 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
2a4e0 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
2a4f0 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
2a500 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
2a510 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
2a520 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
2a530 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
2a540 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
2a550 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
2a560 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
2a570 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
2a580 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
2a590 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
2a5a0 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
2a5b0 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
2a5c0 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
2a5d0 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
2a5e0 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
2a5f0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
2a600 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
2a610 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
2a620 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
2a630 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2a640 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
2a650 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2a660 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74  >zErrMsg, db, "t
2a670 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f  oo many levels o
2a680 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73  f trigger recurs
2a690 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b  ion");.    break
2a6a0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69  ;.  }..  /* Regi
2a6b0 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64  ster pRt is used
2a6c0 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65   to store the me
2a6d0 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f  mory required to
2a6e0 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a   save the state.
2a6f0 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72    ** of the curr
2a700 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64  ent program, and
2a710 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
2a720 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  ired at runtime 
2a730 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20  to execute.  ** 
2a740 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
2a750 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69  ram. If this tri
2a760 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69  gger has been fi
2a770 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e  red before, then
2a780 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c   pRt .  ** is al
2a790 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e  ready allocated.
2a7a0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d   Otherwise, it m
2a7b0 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
2a7c0 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  ed.  */.  if( (p
2a7d0 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72  Rt->flags&MEM_Fr
2a7e0 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  ame)==0 ){.    /
2a7f0 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65  * SubProgram.nMe
2a800 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  m is set to the 
2a810 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
2a820 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74   cells used by t
2a830 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72  he .    ** progr
2a840 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62  am stored in Sub
2a850 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20  Program.aOp. As 
2a860 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f  well as these, o
2a870 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a  ne memory.    **
2a880 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65   cell is require
2a890 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f  d for each curso
2a8a0 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  r used by the pr
2a8b0 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c  ogram. Set local
2a8c0 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  .    ** variable
2a8d0 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72   nMem (and later
2a8e0 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69  , VdbeFrame.nChi
2a8f0 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76  ldMem) to this v
2a900 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
2a910 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d   nMem = pProgram
2a920 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61  ->nMem + pProgra
2a930 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79  m->nCsr;.    nBy
2a940 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65  te = ROUND8(size
2a950 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20  of(VdbeFrame)). 
2a960 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e               + n
2a970 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d  Mem * sizeof(Mem
2a980 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2a990 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
2a9a0 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75   * sizeof(VdbeCu
2a9b0 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20  rsor *).        
2a9c0 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
2a9d0 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66  ->nOnce * sizeof
2a9e0 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65  (u8);.    pFrame
2a9f0 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
2aa00 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65  ocZero(db, nByte
2aa10 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61  );.    if( !pFra
2aa20 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  me ){.      goto
2aa30 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
2aa40 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2aa50 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20  mRelease(pRt);. 
2aa60 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20     pRt->flags = 
2aa70 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70  MEM_Frame;.    p
2aa80 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70  Rt->u.pFrame = p
2aa90 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61  Frame;..    pFra
2aaa0 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70  me->v = p;.    p
2aab0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2aac0 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72   = nMem;.    pFr
2aad0 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d  ame->nChildCsr =
2aae0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
2aaf0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20  .    pFrame->pc 
2ab00 3d 20 70 63 3b 0a 20 20 20 20 70 46 72 61 6d 65  = pc;.    pFrame
2ab10 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d  ->aMem = p->aMem
2ab20 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d  ;.    pFrame->nM
2ab30 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20  em = p->nMem;.  
2ab40 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20    pFrame->apCsr 
2ab50 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20  = p->apCsr;.    
2ab60 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20  pFrame->nCursor 
2ab70 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20  = p->nCursor;.  
2ab80 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20    pFrame->aOp = 
2ab90 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->aOp;.    pFra
2aba0 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70  me->nOp = p->nOp
2abb0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f  ;.    pFrame->to
2abc0 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  ken = pProgram->
2abd0 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d  token;.    pFram
2abe0 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70  e->aOnceFlag = p
2abf0 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20  ->aOnceFlag;.   
2ac00 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c   pFrame->nOnceFl
2ac10 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ag = p->nOnceFla
2ac20 67 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26  g;..    pEnd = &
2ac30 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2ac40 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68  ame)[pFrame->nCh
2ac50 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72  ildMem];.    for
2ac60 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d  (pMem=VdbeFrameM
2ac70 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d  em(pFrame); pMem
2ac80 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b  !=pEnd; pMem++){
2ac90 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
2aca0 67 73 20 3d 20 4d 45 4d 5f 49 6e 76 61 6c 69 64  gs = MEM_Invalid
2acb0 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62  ;.      pMem->db
2acc0 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d   = db;.    }.  }
2acd0 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65  else{.    pFrame
2ace0 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65   = pRt->u.pFrame
2acf0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
2ad00 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72  rogram->nMem+pPr
2ad10 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
2ad20 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29  ame->nChildMem )
2ad30 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
2ad40 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
2ad50 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
2ad60 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2ad70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b  c==pFrame->pc );
2ad80 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d  .  }..  p->nFram
2ad90 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  e++;.  pFrame->p
2ada0 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61  Parent = p->pFra
2adb0 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61  me;.  pFrame->la
2adc0 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
2add0 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  wid;.  pFrame->n
2ade0 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
2adf0 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  nge;.  p->nChang
2ae00 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61  e = 0;.  p->pFra
2ae10 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70  me = pFrame;.  p
2ae20 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20  ->aMem = aMem = 
2ae30 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  &VdbeFrameMem(pF
2ae40 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e  rame)[-1];.  p->
2ae50 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e  nMem = pFrame->n
2ae60 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e  ChildMem;.  p->n
2ae70 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46  Cursor = (u16)pF
2ae80 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b  rame->nChildCsr;
2ae90 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56  .  p->apCsr = (V
2aea0 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d  dbeCursor **)&aM
2aeb0 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20  em[p->nMem+1];. 
2aec0 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20   p->aOp = aOp = 
2aed0 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20  pProgram->aOp;. 
2aee0 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72   p->nOp = pProgr
2aef0 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f  am->nOp;.  p->aO
2af00 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29  nceFlag = (u8 *)
2af10 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75  &p->apCsr[p->nCu
2af20 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63  rsor];.  p->nOnc
2af30 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d  eFlag = pProgram
2af40 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63 20 3d 20  ->nOnce;.  pc = 
2af50 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e  -1;.  memset(p->
2af60 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d  aOnceFlag, 0, p-
2af70 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20  >nOnceFlag);..  
2af80 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2af90 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32  ode: Param P1 P2
2afa0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
2afb0 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
2afc0 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e   ever present in
2afd0 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61   sub-programs ca
2afe0 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a  lled via the .**
2aff0 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
2b000 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20  ruction. Copy a 
2b010 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20  value currently 
2b020 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f  stored in a memo
2b030 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74  ry .** cell of t
2b040 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65  he calling (pare
2b050 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c  nt) frame to cel
2b060 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72  l P2 in the curr
2b070 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61  ent frames .** a
2b080 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68  ddress space. Th
2b090 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
2b0a0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
2b0b0 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77  o access the new
2b0c0 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a  .* .** and old.*
2b0d0 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   values..**.** T
2b0e0 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
2b0f0 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61  e cell in the pa
2b100 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65  rent frame is de
2b110 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69  termined by addi
2b120 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ng.** the value 
2b130 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
2b140 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  nt to the value 
2b150 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
2b160 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c  nt to the.** cal
2b170 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20  ling OP_Program 
2b180 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2b190 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b  case OP_Param: {
2b1a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2b1b0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
2b1c0 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
2b1d0 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e  rame;.  Mem *pIn
2b1e0 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e  ;.  pFrame = p->
2b1f0 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20  pFrame;.  pIn = 
2b200 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
2b210 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e  p->p1 + pFrame->
2b220 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e  aOp[pFrame->pc].
2b230 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65  p1];   .  sqlite
2b240 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
2b250 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d  opy(pOut, pIn, M
2b260 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65  EM_Ephem);.  bre
2b270 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ak;.}..#endif /*
2b280 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
2b290 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a  OMIT_TRIGGER */.
2b2a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2b2b0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2b2c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f  ./* Opcode: FkCo
2b2d0 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20  unter P1 P2 * * 
2b2e0 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e  *.**.** Incremen
2b2f0 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20  t a "constraint 
2b300 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20 28  counter" by P2 (
2b310 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69  P2 may be negati
2b320 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e  ve or positive).
2b330 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
2b340 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62  -zero, the datab
2b350 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  ase constraint c
2b360 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d  ounter is increm
2b370 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72  ented .** (defer
2b380 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  red foreign key 
2b390 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74  constraints). Ot
2b3a0 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20 69  herwise, if P1 i
2b3b0 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20  s zero, the .** 
2b3c0 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65  statement counte
2b3d0 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
2b3e0 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65   (immediate fore
2b3f0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2b400 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nts)..*/.case OP
2b410 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20  _FkCounter: {.  
2b420 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
2b430 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
2b440 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65  ){.    db->nDefe
2b450 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70  rredImmCons += p
2b460 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20  Op->p2;.  }else 
2b470 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
2b480 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
2b490 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  Cons += pOp->p2;
2b4a0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d  .  }else{.    p-
2b4b0 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b  >nFkConstraint +
2b4c0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20  = pOp->p2;.  }. 
2b4d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2b4e0 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50  code: FkIfZero P
2b4f0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2b500 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73   This opcode tes
2b510 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20  ts if a foreign 
2b520 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  key constraint-c
2b530 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
2b540 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20  tly zero..** If 
2b550 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  so, jump to inst
2b560 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
2b570 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
2b580 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2b590 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
2b5a0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
2b5b0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
2b5c0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
2b5d0 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
2b5e0 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2b5f0 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28  ter.** is zero (
2b600 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75  the one that cou
2b610 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  nts deferred con
2b620 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
2b630 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a  ns). If P1 is.**
2b640 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20   zero, the jump 
2b650 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
2b660 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72  statement constr
2b670 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
2b680 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61  zero.** (immedia
2b690 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
2b6a0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
2b6b0 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ions)..*/.case O
2b6c0 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20  P_FkIfZero: {   
2b6d0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2b6e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
2b6f0 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44  {.    if( db->nD
2b700 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26  eferredCons==0 &
2b710 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2b720 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d  mmCons==0 ) pc =
2b730 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65   pOp->p2-1;.  }e
2b740 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e  lse{.    if( p->
2b750 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
2b760 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2b770 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63  dImmCons==0 ) pc
2b780 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
2b790 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2b7a0 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
2b7b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2b7c0 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
2b7d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2b7e0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
2b7f0 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
2b800 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2b810 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65   P1 is a registe
2b820 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
2b830 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28  ame of this VM (
2b840 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69  the root frame i
2b850 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66  s.** different f
2b860 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20  rom the current 
2b870 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e  frame if this in
2b880 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69  struction is bei
2b890 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77  ng executed.** w
2b8a0 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67  ithin a sub-prog
2b8b0 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61  ram). Set the va
2b8c0 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
2b8d0 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75  P1 to the maximu
2b8e0 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72  m of .** its cur
2b8f0 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74  rent value and t
2b900 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
2b910 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
2b920 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2b930 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
2b940 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  if the memory ce
2b950 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61  ll is not initia
2b960 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65  lly.** an intege
2b970 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65  r..*/.case OP_Me
2b980 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f  mMax: {        /
2b990 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a  * in2 */.  Mem *
2b9a0 70 49 6e 31 3b 0a 20 20 56 64 62 65 46 72 61 6d  pIn1;.  VdbeFram
2b9b0 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28  e *pFrame;.  if(
2b9c0 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
2b9d0 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
2b9e0 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
2b9f0 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
2ba00 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
2ba10 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46  ;.    pIn1 = &pF
2ba20 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
2ba30 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  p1];.  }else{.  
2ba40 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2ba50 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61  Op->p1];.  }.  a
2ba60 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2ba70 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c  d(pIn1) );.  sql
2ba80 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
2ba90 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
2baa0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
2bab0 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
2bac0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
2bad0 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49  (pIn2);.  if( pI
2bae0 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e  n1->u.i<pIn2->u.
2baf0 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e  i){.    pIn1->u.
2bb00 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  i = pIn2->u.i;. 
2bb10 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2bb20 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2bb30 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
2bb40 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
2bb50 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a   IfPos P1 P2 * *
2bb60 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20   *.**.** If the 
2bb70 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
2bb80 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65  r P1 is 1 or gre
2bb90 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32  ater, jump to P2
2bba0 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  ..**.** It is il
2bbb0 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69  legal to use thi
2bbc0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
2bbd0 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
2bbe0 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e   does.** not con
2bbf0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2bc00 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66    An assertion f
2bc10 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74  ault will result
2bc20 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a   if you try..*/.
2bc30 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b  case OP_IfPos: {
2bc40 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2bc50 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2bc60 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2bc70 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2bc80 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2bc90 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2bca0 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  i>0 ){.     pc =
2bcb0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2bcc0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2bcd0 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50   Opcode: IfNeg P
2bce0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2bcf0 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66   If the value of
2bd00 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
2bd10 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20  less than zero, 
2bd20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a  jump to P2. .**.
2bd30 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
2bd40 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
2bd50 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
2bd60 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
2bd70 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
2bd80 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
2bd90 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
2bda0 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
2bdb0 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
2bdc0 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20  OP_IfNeg: {     
2bdd0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2bde0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2bdf0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2be00 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2be10 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69  s&MEM_Int );.  i
2be20 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29  f( pIn1->u.i<0 )
2be30 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
2be40 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2be50 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2be60 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32  de: IfZero P1 P2
2be70 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   P3 * *.**.** Th
2be80 65 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75  e register P1 mu
2be90 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
2bea0 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65  teger.  Add lite
2beb0 72 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a  ral P3 to the.**
2bec0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2bed0 65 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72  er P1.  If the r
2bee0 65 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79  esult is exactly
2bef0 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20   0, jump to P2. 
2bf00 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
2bf10 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
2bf20 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
2bf30 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2bf40 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
2bf50 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2bf60 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2bf70 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
2bf80 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
2bf90 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b  ase OP_IfZero: {
2bfa0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2bfb0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2bfc0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2bfd0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2bfe0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2bff0 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d  ;.  pIn1->u.i +=
2c000 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20   pOp->p3;.  if( 
2c010 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a  pIn1->u.i==0 ){.
2c020 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2c030 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2c040 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2c050 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
2c060 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  3 P4 P5.**.** Ex
2c070 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66  ecute the step f
2c080 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
2c090 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a  ggregate.  The.*
2c0a0 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  * function has P
2c0b0 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50  5 arguments.   P
2c0c0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2c0d0 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a  o the FuncDef.**
2c0e0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
2c0f0 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75  specifies the fu
2c100 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67  nction.  Use reg
2c110 69 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74  ister.** P3 as t
2c120 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  he accumulator..
2c130 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
2c140 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
2c150 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
2c160 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
2c170 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65  cessors..*/.case
2c180 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20   OP_AggStep: {. 
2c190 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
2c1a0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
2c1b0 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c  Mem *pRec;.  sql
2c1c0 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78  ite3_context ctx
2c1d0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
2c1e0 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20  e **apVal;..  n 
2c1f0 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
2c200 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70  ert( n>=0 );.  p
2c210 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Rec = &aMem[pOp-
2c220 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20  >p2];.  apVal = 
2c230 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
2c240 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
2c250 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  0 );.  for(i=0; 
2c260 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b  i<n; i++, pRec++
2c270 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
2c280 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20  emIsValid(pRec) 
2c290 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  );.    apVal[i] 
2c2a0 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41  = pRec;.    memA
2c2b0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
2c2c0 70 52 65 63 29 3b 0a 20 20 20 20 73 71 6c 69 74  pRec);.    sqlit
2c2d0 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
2c2e0 70 65 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20  pe(pRec);.  }.  
2c2f0 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
2c300 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73  >p4.pFunc;.  ass
2c310 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
2c320 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
2c330 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d  em );.  ctx.pMem
2c340 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   = pMem = &aMem[
2c350 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d  pOp->p3];.  pMem
2c360 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66  ->n++;.  ctx.s.f
2c370 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
2c380 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a  .  ctx.s.z = 0;.
2c390 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
2c3a0 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65  = 0;.  ctx.s.xDe
2c3b0 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64  l = 0;.  ctx.s.d
2c3c0 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73  b = db;.  ctx.is
2c3d0 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78  Error = 0;.  ctx
2c3e0 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74  .pColl = 0;.  ct
2c3f0 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a  x.skipFlag = 0;.
2c400 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d    if( ctx.pFunc-
2c410 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
2c420 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b  FUNC_NEEDCOLL ){
2c430 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2c440 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61  >p->aOp );.    a
2c450 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
2c460 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
2c470 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Q );.    assert(
2c480 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
2c490 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
2c4a0 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70     ctx.pColl = p
2c4b0 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b  Op[-1].p4.pColl;
2c4c0 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e  .  }.  (ctx.pFun
2c4d0 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20  c->xStep)(&ctx, 
2c4e0 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d  n, apVal); /* IM
2c4f0 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30  P: R-24505-23230
2c500 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73   */.  if( ctx.is
2c510 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
2c520 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2c530 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2c540 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
2c550 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
2c560 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
2c570 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 69 66  sError;.  }.  if
2c580 28 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 29  ( ctx.skipFlag )
2c590 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2c5a0 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
2c5b0 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
2c5c0 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a  i = pOp[-1].p1;.
2c5d0 20 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69      if( i ) sqli
2c5e0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
2c5f0 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b  64(&aMem[i], 1);
2c600 0a 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33 56  .  }..  sqlite3V
2c610 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
2c620 74 78 2e 73 29 3b 0a 0a 20 20 62 72 65 61 6b 3b  tx.s);..  break;
2c630 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
2c640 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20  ggFinal P1 P2 * 
2c650 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P4 *.**.** Execu
2c660 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72  te the finalizer
2c670 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
2c680 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20   aggregate.  P1 
2c690 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79  is.** the memory
2c6a0 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69   location that i
2c6b0 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
2c6c0 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67  r for the aggreg
2c6d0 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73  ate..**.** P2 is
2c6e0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
2c6f0 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68  rguments that th
2c700 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
2c710 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20  takes and.** P4 
2c720 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2c730 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20  the FuncDef for 
2c740 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20  this function.  
2c750 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65  The P2.** argume
2c760 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62  nt is not used b
2c770 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
2c780 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65  It is only there
2c790 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65   to disambiguate
2c7a0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68  .** functions th
2c7b0 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79  at can take vary
2c7c0 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  ing numbers of a
2c7d0 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a  rguments.  The.*
2c7e0 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73  * P4 argument is
2c7f0 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72   only needed for
2c800 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20   the degenerate 
2c810 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68  case where.** th
2c820 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
2c830 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73  was not previous
2c840 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61  ly called..*/.ca
2c850 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20  se OP_AggFinal: 
2c860 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
2c870 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2c880 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
2c890 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d  ->nMem );.  pMem
2c8a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2c8b0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  ];.  assert( (pM
2c8c0 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45  em->flags & ~(ME
2c8d0 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29  M_Null|MEM_Agg))
2c8e0 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
2c8f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61  lite3VdbeMemFina
2c900 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e  lize(pMem, pOp->
2c910 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28  p4.pFunc);.  if(
2c920 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   rc ){.    sqlit
2c930 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2c940 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
2c950 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
2c960 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20  _text(pMem));.  
2c970 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  }.  sqlite3VdbeC
2c980 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d  hangeEncoding(pM
2c990 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  em, encoding);. 
2c9a0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
2c9b0 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66  SIZE(pMem);.  if
2c9c0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
2c9d0 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a  TooBig(pMem) ){.
2c9e0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
2c9f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2ca00 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ca10 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63  _OMIT_WAL./* Opc
2ca20 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20  ode: Checkpoint 
2ca30 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2ca40 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61  ** Checkpoint da
2ca50 74 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20  tabase P1. This 
2ca60 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31  is a no-op if P1
2ca70 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
2ca80 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65  y in.** WAL mode
2ca90 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69  . Parameter P2 i
2caa0 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f  s one of SQLITE_
2cab0 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
2cac0 56 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52  VE, FULL.** or R
2cad0 45 53 54 41 52 54 2e 20 20 57 72 69 74 65 20 31  ESTART.  Write 1
2cae0 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50   or 0 into mem[P
2caf0 33 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70  3] if the checkp
2cb00 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20  oint returns.** 
2cb10 53 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e  SQLITE_BUSY or n
2cb20 6f 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ot, respectively
2cb30 2e 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d  .  Write the num
2cb40 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
2cb50 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72  the.** WAL after
2cb60 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20   the checkpoint 
2cb70 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61  into mem[P3+1] a
2cb80 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  nd the number of
2cb90 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65   pages.** in the
2cba0 20 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62   WAL that have b
2cbb0 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64  een checkpointed
2cbc0 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b   after the check
2cbd0 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74  point.** complet
2cbe0 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32  es into mem[P3+2
2cbf0 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61  ].  However on a
2cc00 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b  n error, mem[P3+
2cc10 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33  1] and.** mem[P3
2cc20 2b 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69  +2] are initiali
2cc30 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61  zed to -1..*/.ca
2cc40 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74  se OP_Checkpoint
2cc50 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20  : {.  int i;    
2cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc70 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
2cc80 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61  unter */.  int a
2cc90 52 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  Res[3];         
2cca0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
2ccb0 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  sults */.  Mem *
2ccc0 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
2ccd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72             /* Wr
2cce0 69 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65  ite results here
2ccf0 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
2cd00 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2cd10 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a  .  aRes[0] = 0;.
2cd20 20 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73    aRes[1] = aRes
2cd30 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65  [2] = -1;.  asse
2cd40 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  rt( pOp->p2==SQL
2cd50 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
2cd60 41 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c  ASSIVE.       ||
2cd70 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
2cd80 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c  _CHECKPOINT_FULL
2cd90 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
2cda0 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
2cdb0 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20  POINT_RESTART.  
2cdc0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2cdd0 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20  3Checkpoint(db, 
2cde0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
2cdf0 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65  , &aRes[1], &aRe
2ce00 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d  s[2]);.  if( rc=
2ce10 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
2ce20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2ce30 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20  OK;.    aRes[0] 
2ce40 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  = 1;.  }.  for(i
2ce50 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  =0, pMem = &aMem
2ce60 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20  [pOp->p3]; i<3; 
2ce70 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20  i++, pMem++){.  
2ce80 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2ce90 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28  SetInt64(pMem, (
2cea0 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20  i64)aRes[i]);.  
2ceb0 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d  }    .  break;.}
2cec0 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;  .#endif..#ifn
2ced0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2cee0 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65  PRAGMA./* Opcode
2cef0 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31  : JournalMode P1
2cf00 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
2cf10 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75  * Change the jou
2cf20 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74  rnal mode of dat
2cf30 61 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20  abase P1 to P3. 
2cf40 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f  P3 must be one o
2cf50 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a  f the.** PAGER_J
2cf60 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76  OURNALMODE_XXX v
2cf70 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69  alues. If changi
2cf80 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 20 76  ng between the v
2cf90 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a  arious rollback.
2cfa0 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65  ** modes (delete
2cfb0 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73  , truncate, pers
2cfc0 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d  ist, off and mem
2cfd0 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20 61 20  ory), this is a 
2cfe0 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74  simple.** operat
2cff0 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65  ion. No IO is re
2d000 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  quired..**.** If
2d010 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f   changing into o
2d020 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64  r out of WAL mod
2d030 65 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  e the procedure 
2d040 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61  is more complica
2d050 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  ted..**.** Write
2d060 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69   a string contai
2d070 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a  ning the final j
2d080 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72  ournal-mode to r
2d090 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
2d0a0 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f  ase OP_JournalMo
2d0b0 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32  de: {    /* out2
2d0c0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
2d0d0 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
2d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0f0 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61   /* Btree to cha
2d100 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  nge journal mode
2d110 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a   of */.  Pager *
2d120 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20  pPager;         
2d130 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
2d140 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
2d150 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65  h pBt */.  int e
2d160 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20  New;            
2d170 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
2d180 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  w journal mode *
2d190 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20  /.  int eOld;   
2d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1b0 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a      /* The old j
2d1c0 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23  ournal mode */.#
2d1d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2d1e0 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63  IT_WAL.  const c
2d1f0 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20  har *zFilename; 
2d200 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
2d210 20 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c   of database fil
2d220 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a  e for pPager */.
2d230 23 65 6e 64 69 66 0a 0a 20 20 65 4e 65 77 20 3d  #endif..  eNew =
2d240 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
2d250 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  rt( eNew==PAGER_
2d260 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45  JOURNALMODE_DELE
2d270 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
2d280 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2d290 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a  LMODE_TRUNCATE .
2d2a0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2d2b0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2d2c0 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20 20  E_PERSIST .     
2d2d0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2d2e0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46  _JOURNALMODE_OFF
2d2f0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2d300 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2d310 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20  DE_MEMORY.      
2d320 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2d330 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
2d340 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2d350 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2d360 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61  E_QUERY.  );.  a
2d370 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2d380 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
2d390 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2d3a0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2d3b0 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d   );..  pBt = db-
2d3c0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
2d3d0 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71  t;.  pPager = sq
2d3e0 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
2d3f0 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73  pBt);.  eOld = s
2d400 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f  qlite3PagerGetJo
2d410 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2d420 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  );.  if( eNew==P
2d430 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2d440 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20  _QUERY ) eNew = 
2d450 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c  eOld;.  if( !sql
2d460 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61  ite3PagerOkToCha
2d470 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  ngeJournalMode(p
2d480 50 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20  Pager) ) eNew = 
2d490 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53  eOld;..#ifndef S
2d4a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
2d4b0 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c   zFilename = sql
2d4c0 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d  ite3PagerFilenam
2d4d0 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20  e(pPager, 1);.. 
2d4e0 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77   /* Do not allow
2d4f0 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f   a transition to
2d500 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
2d510 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  L for a database
2d520 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61  .  ** in tempora
2d530 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66  ry storage or if
2d540 20 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f   the VFS does no
2d550 74 20 73 75 70 70 6f 72 74 20 73 68 61 72 65 64  t support shared
2d560 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20   memory .  */.  
2d570 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
2d580 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
2d590 20 20 20 26 26 20 28 73 71 6c 69 74 65 33 53 74     && (sqlite3St
2d5a0 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65  rlen30(zFilename
2d5b0 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f  )==0           /
2d5c0 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20  * Temp file */. 
2d5d0 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65        || !sqlite
2d5e0 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74  3PagerWalSupport
2d5f0 65 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a  ed(pPager))   /*
2d600 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72   No shared-memor
2d610 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29  y support */.  )
2d620 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
2d630 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65  d;.  }..  if( (e
2d640 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26  New!=eOld).   &&
2d650 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f   (eOld==PAGER_JO
2d660 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c  URNALMODE_WAL ||
2d670 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2d680 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20  RNALMODE_WAL).  
2d690 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e  ){.    if( !db->
2d6a0 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62  autoCommit || db
2d6b0 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b  ->nVdbeRead>1 ){
2d6c0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
2d6d0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
2d6e0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2d6f0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2d700 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22 63 61  , .          "ca
2d710 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77  nnot change %s w
2d720 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74  al mode from wit
2d730 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
2d740 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65  n",.          (e
2d750 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2d760 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e  ALMODE_WAL ? "in
2d770 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a  to" : "out of").
2d780 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62        );.      b
2d790 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  reak;.    }else{
2d7a0 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c  . .      if( eOl
2d7b0 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
2d7c0 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20  MODE_WAL ){.    
2d7d0 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e      /* If leavin
2d7e0 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73  g WAL mode, clos
2d7f0 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20  e the log file. 
2d800 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  If successful, t
2d810 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20  he call.        
2d820 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65  ** to PagerClose
2d830 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74  Wal() checkpoint
2d840 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68  s and deletes th
2d850 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f  e write-ahead-lo
2d860 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69  g .        ** fi
2d870 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45  le. An EXCLUSIVE
2d880 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20   lock may still 
2d890 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64  be held on the d
2d8a0 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20  atabase file .  
2d8b0 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61        ** after a
2d8c0 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74 75   successful retu
2d8d0 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a  rn. .        */.
2d8e0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
2d8f0 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61  ite3PagerCloseWa
2d900 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  l(pPager);.     
2d910 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2d920 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
2d930 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
2d940 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2d950 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20  ger, eNew);.    
2d960 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
2d970 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45  e if( eOld==PAGE
2d980 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
2d990 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20  MORY ){.        
2d9a0 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69  /* Cannot transi
2d9b0 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72  tion directly fr
2d9c0 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c  om MEMORY to WAL
2d9d0 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a  .  Use mode OFF.
2d9e0 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e          ** as an
2d9f0 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f   intermediate */
2da00 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2da10 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
2da20 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41 47 45  ode(pPager, PAGE
2da30 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
2da40 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  F);.      }.  . 
2da50 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74       /* Open a t
2da60 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
2da70 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
2da80 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74   Regardless of t
2da90 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20  he journal.     
2daa0 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74   ** mode, this t
2dab0 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79  ransaction alway
2dac0 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63  s uses a rollbac
2dad0 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20  k journal..     
2dae0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
2daf0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
2db00 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20  InTrans(pBt)==0 
2db10 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
2db20 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2db30 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2db40 65 33 42 74 72 65 65 53 65 74 56 65 72 73 69 6f  e3BtreeSetVersio
2db50 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41  n(pBt, (eNew==PA
2db60 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2db70 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20  WAL ? 2 : 1));. 
2db80 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
2db90 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65  .#endif /* ifnde
2dba0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2dbb0 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29  L */..  if( rc )
2dbc0 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
2dbd0 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20  d;.  }.  eNew = 
2dbe0 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2dbf0 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2dc00 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75  r, eNew);..  pOu
2dc10 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
2dc20 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  2];.  pOut->flag
2dc30 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
2dc40 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
2dc50 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68  .  pOut->z = (ch
2dc60 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72  ar *)sqlite3Jour
2dc70 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77  nalModename(eNew
2dc80 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73  );.  pOut->n = s
2dc90 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
2dca0 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d  Out->z);.  pOut-
2dcb0 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
2dcc0 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  F8;.  sqlite3Vdb
2dcd0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2dce0 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pOut, encoding);
2dcf0 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e  .  break;.};.#en
2dd00 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2dd10 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69  IT_PRAGMA */..#i
2dd20 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2dd30 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26  E_OMIT_VACUUM) &
2dd40 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2dd50 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f  E_OMIT_ATTACH)./
2dd60 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d  * Opcode: Vacuum
2dd70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
2dd80 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69   Vacuum the enti
2dd90 72 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  re database.  Th
2dda0 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63  is opcode will c
2ddb0 61 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75  ause other virtu
2ddc0 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74  al.** machines t
2ddd0 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64  o be created and
2dde0 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f   run.  It may no
2ddf0 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d  t be called from
2de00 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61   within.** a tra
2de10 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  nsaction..*/.cas
2de20 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: {. 
2de30 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2de40 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20  Only==0 );.  rc 
2de50 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  = sqlite3RunVacu
2de60 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  um(&p->zErrMsg, 
2de70 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  db);.  break;.}.
2de80 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66  #endif..#if !def
2de90 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2dea0 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20  _AUTOVACUUM)./* 
2deb0 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75  Opcode: IncrVacu
2dec0 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  um P1 P2 * * *.*
2ded0 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73  *.** Perform a s
2dee0 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68  ingle step of th
2def0 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61  e incremental va
2df00 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f  cuum procedure o
2df10 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61  n.** the P1 data
2df20 62 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63  base. If the vac
2df30 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64  uum has finished
2df40 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
2df50 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68  ction.** P2. Oth
2df60 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
2df70 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2df80 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2df90 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63  .case OP_IncrVac
2dfa0 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  uum: {        /*
2dfb0 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65   jump */.  Btree
2dfc0 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
2dfd0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2dfe0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
2dff0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
2e000 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
2e010 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
2e020 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73  >p1))!=0 );.  as
2e030 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
2e040 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  y==0 );.  pBt = 
2e050 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2e060 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .pBt;.  rc = sql
2e070 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63  ite3BtreeIncrVac
2e080 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20  uum(pBt);.  if( 
2e090 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
2e0a0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
2e0b0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20  >p2 - 1;.    rc 
2e0c0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  = SQLITE_OK;.  }
2e0d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2e0e0 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  if../* Opcode: E
2e0f0 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a  xpire P1 * * * *
2e100 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65  .**.** Cause pre
2e110 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65  compiled stateme
2e120 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78  nts to become ex
2e130 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65  pired. An expire
2e140 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66  d statement.** f
2e150 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72  ails with an err
2e160 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54  or code of SQLIT
2e170 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20 69  E_SCHEMA if it i
2e180 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64 20  s ever executed 
2e190 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33  .** (via sqlite3
2e1a0 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a  _step())..** .**
2e1b0 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
2e1c0 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
2e1d0 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
2e1e0 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
2e1f0 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
2e200 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
2e210 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
2e220 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74  tement is affect
2e230 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ed. .*/.case OP_
2e240 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20  Expire: {.  if( 
2e250 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  !pOp->p1 ){.    
2e260 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
2e270 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
2e280 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  db);.  }else{.  
2e290 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
2e2a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2e2b0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2e2c0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
2e2d0 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61  HE./* Opcode: Ta
2e2e0 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33  bleLock P1 P2 P3
2e2f0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61   P4 *.**.** Obta
2e300 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70  in a lock on a p
2e310 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e  articular table.
2e320 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
2e330 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  n is only used w
2e340 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65  hen.** the share
2e350 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20  d-cache feature 
2e360 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a  is enabled. .**.
2e370 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
2e380 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
2e390 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  se in sqlite3.aD
2e3a0 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62  b[] of the datab
2e3b0 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20  ase.** on which 
2e3c0 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  the lock is acqu
2e3d0 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63  ired.  A readloc
2e3e0 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66  k is obtained if
2e3f0 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77   P3==0 or.** a w
2e400 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d  rite lock if P3=
2e410 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e  =1..**.** P2 con
2e420 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70  tains the root-p
2e430 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
2e440 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20   to lock..**.** 
2e450 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f  P4 contains a po
2e460 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d  inter to the nam
2e470 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
2e480 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69  eing locked. Thi
2e490 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65  s is only.** use
2e4a0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e  d to generate an
2e4b0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
2e4c0 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f  f the lock canno
2e4d0 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a  t be obtained..*
2e4e0 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c  /.case OP_TableL
2e4f0 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72  ock: {.  u8 isWr
2e500 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f  iteLock = (u8)pO
2e510 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57  p->p3;.  if( isW
2e520 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28  riteLock || 0==(
2e530 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
2e540 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
2e550 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20  ) ){.    int p1 
2e560 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20  = pOp->p1; .    
2e570 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26  assert( p1>=0 &&
2e580 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20   p1<db->nDb );. 
2e590 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62     assert( (p->b
2e5a0 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
2e5b0 62 4d 61 73 6b 29 31 29 3c 3c 70 31 29 29 21 3d  bMask)1)<<p1))!=
2e5c0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
2e5d0 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20   isWriteLock==0 
2e5e0 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  || isWriteLock==
2e5f0 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  1 );.    rc = sq
2e600 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61  lite3BtreeLockTa
2e610 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ble(db->aDb[p1].
2e620 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73  pBt, pOp->p2, is
2e630 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20  WriteLock);.    
2e640 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53  if( (rc&0xFF)==S
2e650 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a  QLITE_LOCKED ){.
2e660 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2e670 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b   *z = pOp->p4.z;
2e680 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
2e690 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2e6a0 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61  Msg, db, "databa
2e6b0 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b  se table is lock
2e6c0 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20  ed: %s", z);.   
2e6d0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
2e6e0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2e6f0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
2e700 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ACHE */..#ifndef
2e710 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2e720 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2e730 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20  ode: VBegin * * 
2e740 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2e750 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72  may be a pointer
2e760 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76   to an sqlite3_v
2e770 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49  tab structure. I
2e780 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a  f so, call the .
2e790 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64  ** xBegin method
2e7a0 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
2e7b0 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65  .**.** Also, whe
2e7c0 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69  ther or not P4 i
2e7d0 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61  s set, check tha
2e7e0 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65  t this is not be
2e7f0 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a  ing called from.
2e800 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c  ** within a call
2e810 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61  back to a virtua
2e820 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20  l table xSync() 
2e830 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73  method. If it is
2e840 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63  , the error.** c
2e850 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20  ode will be set 
2e860 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  to SQLITE_LOCKED
2e870 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65  ..*/.case OP_VBe
2e880 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20  gin: {.  VTable 
2e890 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20  *pVTab;.  pVTab 
2e8a0 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b  = pOp->p4.pVtab;
2e8b0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2e8c0 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54  tabBegin(db, pVT
2e8d0 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62  ab);.  if( pVTab
2e8e0 20 29 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72   ) importVtabErr
2e8f0 4d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56  Msg(p, pVTab->pV
2e900 74 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  tab);.  break;.}
2e910 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2e920 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2e930 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2e940 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2e950 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2e960 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a  de: VCreate P1 *
2e970 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2e980 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
2e990 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2e9a0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2e9b0 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65  Call the xCreate
2e9c0 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74   method.** for t
2e9d0 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
2e9e0 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b  se OP_VCreate: {
2e9f0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2ea00 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62  tabCallCreate(db
2ea10 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2ea20 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  p4.z, &p->zErrMs
2ea30 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
2ea40 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2ea50 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2ea60 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2ea70 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2ea80 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2ea90 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
2eaa0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2eab0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
2eac0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
2ead0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2eae0 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
2eaf0 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
2eb00 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
2eb10 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
2eb20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  {.  p->inVtabMet
2eb30 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20  hod = 2;.  rc = 
2eb40 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
2eb50 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e  estroy(db, pOp->
2eb60 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2eb70 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2eb80 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  d = 0;.  break;.
2eb90 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2eba0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2ebb0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2ebc0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2ebd0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2ebe0 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20  ode: VOpen P1 * 
2ebf0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2ec00 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2ec10 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2ec20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
2ec30 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
2ec40 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  e..** P1 is a cu
2ec50 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68  rsor number.  Th
2ec60 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20  is opcode opens 
2ec70 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  a cursor to the 
2ec80 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
2ec90 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
2eca0 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a   cursor in P1..*
2ecb0 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a  /.case OP_VOpen:
2ecc0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
2ecd0 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  *pCur;.  sqlite3
2ece0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
2ecf0 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c  tabCursor;.  sql
2ed00 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2ed10 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ;.  sqlite3_modu
2ed20 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
2ed30 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
2ed40 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d  ader );.  pCur =
2ed50 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f   0;.  pVtabCurso
2ed60 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d  r = 0;.  pVtab =
2ed70 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
2ed80 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2ed90 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
2eda0 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
2edb0 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56  ule;.  assert(pV
2edc0 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b  tab && pModule);
2edd0 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
2ede0 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70  >xOpen(pVtab, &p
2edf0 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 69  VtabCursor);.  i
2ee00 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2ee10 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
2ee20 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29   SQLITE_OK==rc )
2ee30 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  {.    /* Initial
2ee40 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ize sqlite3_vtab
2ee50 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61  _cursor base cla
2ee60 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43  ss */.    pVtabC
2ee70 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70  ursor->pVtab = p
2ee80 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e  Vtab;..    /* In
2ee90 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75  itialize vdbe cu
2eea0 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  rsor object */. 
2eeb0 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61     pCur = alloca
2eec0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
2eed0 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a  >p1, 0, -1, 0);.
2eee0 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a      if( pCur ){.
2eef0 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61        pCur->pVta
2ef00 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43  bCursor = pVtabC
2ef10 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 43 75  ursor;.      pCu
2ef20 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  r->pModule = pVt
2ef30 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d  abCursor->pVtab-
2ef40 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65  >pModule;.    }e
2ef50 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d  lse{.      db->m
2ef60 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
2ef70 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e  .      pModule->
2ef80 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73  xClose(pVtabCurs
2ef90 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  or);.    }.  }. 
2efa0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2efb0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2efc0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2efd0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2efe0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2eff0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69  E./* Opcode: VFi
2f000 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34  lter P1 P2 P3 P4
2f010 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61   *.**.** P1 is a
2f020 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75   cursor opened u
2f030 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20  sing VOpen.  P2 
2f040 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f  is an address to
2f050 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74   jump to if.** t
2f060 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75  he filtered resu
2f070 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e  lt set is empty.
2f080 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74  .**.** P4 is eit
2f090 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74  her NULL or a st
2f0a0 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65  ring that was ge
2f0b0 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78  nerated by the x
2f0c0 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74  BestIndex.** met
2f0d0 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
2f0e0 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65  e.  The interpre
2f0f0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34  tation of the P4
2f100 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a   string is left.
2f110 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ** to the module
2f120 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
2f130 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2f140 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78  de invokes the x
2f150 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e  Filter method on
2f160 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
2f170 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  le specified.** 
2f180 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65  by P1.  The inte
2f190 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70  ger query plan p
2f1a0 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c  arameter to xFil
2f1b0 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ter is stored in
2f1c0 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e   register.** P3.
2f1d0 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73   Register P3+1 s
2f1e0 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70  tores the argc p
2f1f0 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70  arameter to be p
2f200 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20  assed to the.** 
2f210 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20  xFilter method. 
2f220 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e  Registers P3+2..
2f230 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68  P3+1+argc are th
2f240 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69  e argc.** additi
2f250 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20  onal parameters 
2f260 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64  which are passed
2f270 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61   to.** xFilter a
2f280 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72  s argv. Register
2f290 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72   P3+2 becomes ar
2f2a0 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65  gv[0] when passe
2f2b0 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a  d to xFilter..**
2f2c0 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61  .** A jump is ma
2f2d0 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  de to P2 if the 
2f2e0 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72  result set after
2f2f0 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64   filtering would
2f300 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61   be empty..*/.ca
2f310 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b  se OP_VFilter: {
2f320 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2f330 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
2f340 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20  iQuery;.  const 
2f350 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2f360 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
2f370 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70  pQuery;.  Mem *p
2f380 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Argc;.  sqlite3_
2f390 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
2f3a0 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
2f3b0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2f3c0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2f3d0 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  Cur;.  int res;.
2f3e0 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
2f3f0 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72  *apArg;..  pQuer
2f400 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
2f410 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70  3];.  pArgc = &p
2f420 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72  Query[1];.  pCur
2f430 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2f440 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2f450 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72  memIsValid(pQuer
2f460 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  y) );.  REGISTER
2f470 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
2f480 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72  pQuery);.  asser
2f490 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
2f4a0 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43  rsor );.  pVtabC
2f4b0 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56  ursor = pCur->pV
2f4c0 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74  tabCursor;.  pVt
2f4d0 61 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72  ab = pVtabCursor
2f4e0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
2f4f0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
2f500 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20  ule;..  /* Grab 
2f510 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72  the index number
2f520 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65   and argc parame
2f530 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  ters */.  assert
2f540 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73  ( (pQuery->flags
2f550 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20  &MEM_Int)!=0 && 
2f560 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45  pArgc->flags==ME
2f570 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20  M_Int );.  nArg 
2f580 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e  = (int)pArgc->u.
2f590 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69  i;.  iQuery = (i
2f5a0 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a  nt)pQuery->u.i;.
2f5b0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
2f5c0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
2f5d0 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d  */.  {.    res =
2f5e0 20 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20   0;.    apArg = 
2f5f0 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f  p->apArg;.    fo
2f600 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b  r(i = 0; i<nArg;
2f610 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41   i++){.      apA
2f620 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69  rg[i] = &pArgc[i
2f630 2b 31 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  +1];.      sqlit
2f640 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
2f650 70 65 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20 20  pe(apArg[i]);.  
2f660 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74    }..    p->inVt
2f670 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20  abMethod = 1;.  
2f680 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
2f690 78 46 69 6c 74 65 72 28 70 56 74 61 62 43 75 72  xFilter(pVtabCur
2f6a0 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70  sor, iQuery, pOp
2f6b0 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70  ->p4.z, nArg, ap
2f6c0 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56  Arg);.    p->inV
2f6d0 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
2f6e0 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72     importVtabErr
2f6f0 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  Msg(p, pVtab);. 
2f700 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2f710 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65  E_OK ){.      re
2f720 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
2f730 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  f(pVtabCursor);.
2f740 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 72      }..    if( r
2f750 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  es ){.      pc =
2f760 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2f770 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e    }.  }.  pCur->
2f780 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20  nullRow = 0;..  
2f790 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2f7a0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2f7b0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2f7c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f7d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2f7e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c  ./* Opcode: VCol
2f7f0 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a  umn P1 P2 P3 * *
2f800 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
2f810 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32   value of the P2
2f820 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a  -th column of.**
2f830 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20   the row of the 
2f840 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68  virtual-table th
2f850 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75  at the .** P1 cu
2f860 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67  rsor is pointing
2f870 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65   to into registe
2f880 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
2f890 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71  _VColumn: {.  sq
2f8a0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2f8b0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
2f8c0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
2f8d0 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74  le;.  Mem *pDest
2f8e0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
2f8f0 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20  ext sContext;.. 
2f900 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2f910 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
2f920 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2f930 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2f940 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
2f950 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
2f960 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
2f970 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
2f980 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
2f990 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
2f9a0 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70   pDest);.  if( p
2f9b0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  Cur->nullRow ){.
2f9c0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2f9d0 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
2f9e0 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
2f9f0 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
2fa00 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
2fa10 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2fa20 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
2fa30 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
2fa40 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20  le->xColumn );. 
2fa50 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78   memset(&sContex
2fa60 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f  t, 0, sizeof(sCo
2fa70 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54  ntext));..  /* T
2fa80 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d  he output cell m
2fa90 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65 20  ay already have 
2faa0 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74  a buffer allocat
2fab0 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68  ed. Move.  ** th
2fac0 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e  e current conten
2fad0 74 73 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73  ts to sContext.s
2fae0 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20   so in case the 
2faf0 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20  user-function . 
2fb00 20 2a 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20   ** can use the 
2fb10 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
2fb20 64 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64  d buffer instead
2fb30 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61   of allocating a
2fb40 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a   .  ** new one..
2fb50 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64    */.  sqlite3Vd
2fb60 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74  beMemMove(&sCont
2fb70 65 78 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20  ext.s, pDest);. 
2fb80 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
2fb90 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d  &sContext.s, MEM
2fba0 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20  _Null);..  rc = 
2fbb0 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
2fbc0 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
2fbd0 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70  or, &sContext, p
2fbe0 4f 70 2d 3e 70 32 29 3b 0a 20 20 69 6d 70 6f 72  Op->p2);.  impor
2fbf0 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
2fc00 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f  Vtab);.  if( sCo
2fc10 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b  ntext.isError ){
2fc20 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65  .    rc = sConte
2fc30 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  xt.isError;.  }.
2fc40 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
2fc50 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
2fc60 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20  ction to the P3 
2fc70 72 65 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a  register. We.  *
2fc80 2a 20 64 6f 20 74 68 69 73 20 72 65 67 61 72 64  * do this regard
2fc90 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
2fca0 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20  or not an error 
2fcb0 6f 63 63 75 72 72 65 64 20 74 6f 20 65 6e 73 75  occurred to ensu
2fcc0 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61  re any.  ** dyna
2fcd0 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  mic allocation i
2fce0 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20  n sContext.s (a 
2fcf0 4d 65 6d 20 73 74 72 75 63 74 29 20 69 73 20 20  Mem struct) is  
2fd00 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20  released..  */. 
2fd10 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2fd20 67 65 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e  geEncoding(&sCon
2fd30 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67  text.s, encoding
2fd40 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
2fd50 4d 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26  MemMove(pDest, &
2fd60 73 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52  sContext.s);.  R
2fd70 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
2fd80 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20  p->p3, pDest);. 
2fd90 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
2fda0 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20  SIZE(pDest);..  
2fdb0 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
2fdc0 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20  emTooBig(pDest) 
2fdd0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
2fde0 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
2fdf0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2fe00 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2fe10 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2fe20 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2fe30 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2fe40 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20  pcode: VNext P1 
2fe50 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
2fe60 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74  dvance virtual t
2fe70 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e  able P1 to the n
2fe80 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72  ext row in its r
2fe90 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a  esult set and.**
2fea0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2feb0 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66  tion P2.  Or, if
2fec0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
2fed0 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a  le has reached.*
2fee0 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73  * the end of its
2fef0 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65   result set, the
2ff00 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  n fall through t
2ff10 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2ff20 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2ff30 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a  OP_VNext: {   /*
2ff40 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74   jump */.  sqlit
2ff50 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2ff60 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2ff70 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
2ff80 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64  .  int res;.  Vd
2ff90 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
2ffa0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43  .  res = 0;.  pC
2ffb0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
2ffc0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2ffd0 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
2ffe0 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75  sor );.  if( pCu
2fff0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
30000 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
30010 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74  Vtab = pCur->pVt
30020 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
30030 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
30040 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
30050 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
30060 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  xNext );..  /* I
30070 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28  nvoke the xNext(
30080 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  ) method of the 
30090 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73  module. There is
300a0 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a   no way for the.
300b0 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20    ** underlying 
300c0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
300d0 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  o return an erro
300e0 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20  r if one occurs 
300f0 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78  during.  ** xNex
30100 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66  t(). Instead, if
30110 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
30120 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e  , true is return
30130 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74  ed (indicating t
30140 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69  hat .  ** data i
30150 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64  s available) and
30160 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
30170 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43  returned when xC
30180 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f  olumn or.  ** so
30190 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20  me other method 
301a0 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20  is next invoked 
301b0 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74  on the save virt
301c0 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
301d0 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74  ..  */.  p->inVt
301e0 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20  abMethod = 1;.  
301f0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  rc = pModule->xN
30200 65 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43  ext(pCur->pVtabC
30210 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56  ursor);.  p->inV
30220 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
30230 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
30240 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
30250 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
30260 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d   ){.    res = pM
30270 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72  odule->xEof(pCur
30280 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  ->pVtabCursor);.
30290 20 20 7d 0a 0a 20 20 69 66 28 20 21 72 65 73 20    }..  if( !res 
302a0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
302b0 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70  re is data, jump
302c0 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63   to P2 */.    pc
302d0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
302e0 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
302f0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
30300 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
30310 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
30320 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
30330 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
30340 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
30350 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20  ode: VRename P1 
30360 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
30370 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
30380 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
30390 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
303a0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
303b0 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
303c0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
303d0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52  corresponding xR
303e0 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68  ename method. Th
303f0 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65  e value.** in re
30400 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73  gister P1 is pas
30410 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65  sed as the zName
30420 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
30430 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
30440 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e  .*/.case OP_VRen
30450 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ame: {.  sqlite3
30460 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
30470 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70  Mem *pName;..  p
30480 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
30490 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
304a0 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Name = &aMem[pOp
304b0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
304c0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
304d0 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73  >xRename );.  as
304e0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
304f0 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73  (pName) );.  ass
30500 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
30510 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ==0 );.  REGISTE
30520 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
30530 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72   pName);.  asser
30540 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20  t( pName->flags 
30550 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74  & MEM_Str );.  t
30560 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
30570 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
30580 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
30590 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
305a0 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20  TE_UTF16BE );.  
305b0 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
305c0 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
305d0 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73  16LE );.  rc = s
305e0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
305f0 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20  Encoding(pName, 
30600 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
30610 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
30620 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56  K ){.    rc = pV
30630 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
30640 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61  ename(pVtab, pNa
30650 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20 69 6d 70 6f  me->z);.    impo
30660 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20  rtVtabErrMsg(p, 
30670 70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65  pVtab);.    p->e
30680 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a  xpired = 0;.  }.
30690 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
306a0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
306b0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
306c0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
306d0 55 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20  Update P1 P2 P3 
306e0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
306f0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
30700 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
30710 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
30720 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
30730 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
30740 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72  invokes the corr
30750 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74  esponding xUpdat
30760 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c  e method. P2 val
30770 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69  ues.** are conti
30780 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c  guous memory cel
30790 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50  ls starting at P
307a0 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65  3 to pass to the
307b0 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76   xUpdate .** inv
307c0 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c  ocation. The val
307d0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28  ue in register (
307e0 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70  P3+P2-1) corresp
307f0 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20  onds to the .** 
30800 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20  p2th element of 
30810 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70  the argv array p
30820 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65  assed to xUpdate
30830 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64  ..**.** The xUpd
30840 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20  ate method will 
30850 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61  do a DELETE or a
30860 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68  n INSERT or both
30870 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d  ..** The argv[0]
30880 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20   element (which 
30890 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d  corresponds to m
308a0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a  emory cell P3).*
308b0 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  * is the rowid o
308c0 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  f a row to delet
308d0 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69  e.  If argv[0] i
308e0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a  s NULL then no .
308f0 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75  ** deletion occu
30900 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d  rs.  The argv[1]
30910 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20   element is the 
30920 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77  rowid of the new
30930 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20   .** row.  This 
30940 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68  can be NULL to h
30950 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20  ave the virtual 
30960 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65  table select the
30970 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66   new .** rowid f
30980 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20  or itself.  The 
30990 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65  subsequent eleme
309a0 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79  nts in the array
309b0 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c   are .** the val
309c0 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ues of columns i
309d0 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a  n the new row..*
309e0 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68  *.** If P2==1 th
309f0 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20  en no insert is 
30a00 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76  performed.  argv
30a10 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64  [0] is the rowid
30a20 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20   of.** a row to 
30a30 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31  delete..**.** P1
30a40 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c   is a boolean fl
30a50 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74  ag. If it is set
30a60 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65   to true and the
30a70 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a   xUpdate call.**
30a80 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20   is successful, 
30a90 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72  then the value r
30aa0 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
30ab0 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
30ac0 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65  owid() .** is se
30ad0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
30ae0 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  f the rowid for 
30af0 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73  the row just ins
30b00 65 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erted..*/.case O
30b10 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73  P_VUpdate: {.  s
30b20 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
30b30 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f  ab;.  sqlite3_mo
30b40 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
30b50 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
30b60 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74   i;.  sqlite_int
30b70 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20  64 rowid;.  Mem 
30b80 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a  **apArg;.  Mem *
30b90 70 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pX;..  assert( p
30ba0 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20 20  Op->p2==1       
30bb0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
30bc0 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70  Fail   || pOp->p
30bd0 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a  5==OE_Rollback .
30be0 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
30bf0 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70  5==OE_Abort || p
30c00 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p5==OE_Ignor
30c10 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45  e || pOp->p5==OE
30c20 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20  _Replace.  );.  
30c30 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
30c40 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61  nly==0 );.  pVta
30c50 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
30c60 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  b->pVtab;.  pMod
30c70 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d  ule = (sqlite3_m
30c80 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70  odule *)pVtab->p
30c90 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d  Module;.  nArg =
30ca0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
30cb0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
30cc0 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66  =P4_VTAB );.  if
30cd0 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65  ( ALWAYS(pModule
30ce0 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20  ->xUpdate) ){.  
30cf0 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c    u8 vtabOnConfl
30d00 69 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e  ict = db->vtabOn
30d10 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70  Conflict;.    ap
30d20 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
30d30 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70      pX = &aMem[p
30d40 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72  Op->p3];.    for
30d50 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
30d60 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
30d70 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29  ( memIsValid(pX)
30d80 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
30d90 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58  utToChange(p, pX
30da0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
30db0 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
30dc0 28 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72  (pX);.      apAr
30dd0 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20  g[i] = pX;.     
30de0 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20   pX++;.    }.   
30df0 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
30e00 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20  ict = pOp->p5;. 
30e10 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
30e20 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20  >xUpdate(pVtab, 
30e30 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f  nArg, apArg, &ro
30e40 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74  wid);.    db->vt
30e50 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76  abOnConflict = v
30e60 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20  tabOnConflict;. 
30e70 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72     importVtabErr
30e80 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  Msg(p, pVtab);. 
30e90 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
30ea0 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20  E_OK && pOp->p1 
30eb0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
30ec0 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67   nArg>1 && apArg
30ed0 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d  [0] && (apArg[0]
30ee0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
30ef0 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c  ) );.      db->l
30f00 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
30f10 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20  owid = rowid;.  
30f20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26    }.    if( (rc&
30f30 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
30f40 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d  NSTRAINT && pOp-
30f50 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73  >p4.pVtab->bCons
30f60 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  traint ){.      
30f70 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f  if( pOp->p5==OE_
30f80 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20  Ignore ){.      
30f90 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
30fa0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
30fb0 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41         p->errorA
30fc0 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70  ction = ((pOp->p
30fd0 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f  5==OE_Replace) ?
30fe0 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d   OE_Abort : pOp-
30ff0 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  >p5);.      }.  
31000 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
31010 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
31020 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
31030 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
31040 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
31050 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
31060 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
31070 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
31080 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74  pcode: Pagecount
31090 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
310a0 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
310b0 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70  rent number of p
310c0 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65  ages in database
310d0 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65   P1 to memory ce
310e0 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ll P2..*/.case O
310f0 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20  P_Pagecount: {  
31100 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
31110 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
31120 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71    pOut->u.i = sq
31130 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61  lite3BtreeLastPa
31140 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ge(db->aDb[pOp->
31150 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61  p1].pBt);.  brea
31160 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  k;.}.#endif...#i
31170 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d  fndef  SQLITE_OM
31180 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
31190 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50  ./* Opcode: MaxP
311a0 67 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20  gcnt P1 P2 P3 * 
311b0 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73  *.**.** Try to s
311c0 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  et the maximum p
311d0 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61  age count for da
311e0 74 61 62 61 73 65 20 50 31 20 74 6f 20 74 68 65  tabase P1 to the
311f0 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a   value in P3..**
31200 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20   Do not let the 
31210 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
31220 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68  nt fall below th
31230 65 20 63 75 72 72 65 6e 74 20 70 61 67 65 20 63  e current page c
31240 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e  ount and.** do n
31250 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61  ot change the ma
31260 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
31270 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e   value if P3==0.
31280 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
31290 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
312a0 75 6e 74 20 61 66 74 65 72 20 74 68 65 20 63 68  unt after the ch
312b0 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65 72  ange in register
312c0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
312d0 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20  MaxPgcnt: {     
312e0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
312f0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75  rerelease */.  u
31300 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d  nsigned int newM
31310 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  ax;.  Btree *pBt
31320 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
31330 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
31340 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20  .  newMax = 0;. 
31350 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
31360 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c      newMax = sql
31370 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67  ite3BtreeLastPag
31380 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20  e(pBt);.    if( 
31390 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e  newMax < (unsign
313a0 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77  ed)pOp->p3 ) new
313b0 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  Max = (unsigned)
313c0 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70  pOp->p3;.  }.  p
313d0 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74  Out->u.i = sqlit
313e0 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f  e3BtreeMaxPageCo
313f0 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29  unt(pBt, newMax)
31400 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
31410 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
31420 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a  LITE_OMIT_TRACE.
31430 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 63 65  /* Opcode: Trace
31440 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
31450 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20  * If tracing is 
31460 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20  enabled (by the 
31470 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29  sqlite3_trace())
31480 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e   interface, then
31490 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74  .** the UTF-8 st
314a0 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69  ring contained i
314b0 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20  n P4 is emitted 
314c0 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c  on the trace cal
314d0 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f  lback..*/.case O
314e0 50 5f 54 72 61 63 65 3a 20 7b 0a 20 20 63 68 61  P_Trace: {.  cha
314f0 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68 61  r *zTrace;.  cha
31500 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 64 62 2d  r *z;..  if( db-
31510 3e 78 54 72 61 63 65 0a 20 20 20 26 26 20 21 70  >xTrace.   && !p
31520 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20  ->doingRerun.   
31530 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f  && (zTrace = (pO
31540 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
31550 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21  4.z : p->zSql))!
31560 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20  =0.  ){.    z = 
31570 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e  sqlite3VdbeExpan
31580 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b  dSql(p, zTrace);
31590 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28  .    db->xTrace(
315a0 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a  db->pTraceArg, z
315b0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  );.    sqlite3Db
315c0 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d  Free(db, z);.  }
315d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
315e0 45 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d 3e  EBUG.  if( (db->
315f0 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53  flags & SQLITE_S
31600 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20 26  qlTrace)!=0.   &
31610 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  & (zTrace = (pOp
31620 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
31630 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d  .z : p->zSql))!=
31640 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  0.  ){.    sqlit
31650 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22 53  e3DebugPrintf("S
31660 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c  QL-trace: %s\n",
31670 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65   zTrace);.  }.#e
31680 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
31690 45 42 55 47 20 2a 2f 0a 20 20 62 72 65 61 6b 3b  EBUG */.  break;
316a0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f  .}.#endif.../* O
316b0 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20  pcode: Noop * * 
316c0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e  * * *.**.** Do n
316d0 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e  othing.  This in
316e0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74  struction is oft
316f0 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a  en useful as a j
31700 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69  ump.** destinati
31710 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65  on..*/./*.** The
31720 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f   magic Explain o
31730 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69  pcode are only i
31740 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70  nserted when exp
31750 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a  lain==2 (which.*
31760 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e  * is to say when
31770 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45   the EXPLAIN QUE
31780 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69  RY PLAN syntax i
31790 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73  s used.).** This
317a0 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20   opcode records 
317b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
317c0 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20   the optimizer. 
317d0 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68   It is the.** th
317e0 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f  e same as a no-o
317f0 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73  p.  This opcodes
31800 6e 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e  never appears in
31810 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72   a real VM progr
31820 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20  am..*/.default: 
31830 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  {          /* Th
31840 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f  is is really OP_
31850 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c  Noop and OP_Expl
31860 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ain */.  assert(
31870 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
31880 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70  _Noop || pOp->op
31890 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e  code==OP_Explain
318a0 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
318b0 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
318c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
318d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
318e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
318f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
31900 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20 74  * The cases of t
31910 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  he switch statem
31920 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c  ent above this l
31930 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62  ine should all b
31940 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79  e indented.** by
31950 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 20   6 spaces.  But 
31960 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20  the left-most 6 
31970 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65 6e  spaces have been
31980 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72   removed to impr
31990 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61  ove the.** reada
319a0 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68  bility.  From th
319b0 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e  is point on down
319c0 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64  , the normal ind
319d0 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61  entation rules a
319e0 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a  re.** restored..
319f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31a00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31a10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20  *************/. 
31a40 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42     }..#ifdef VDB
31a50 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a  E_PROFILE.    {.
31a60 20 20 20 20 20 20 75 36 34 20 65 6c 61 70 73 65        u64 elapse
31a70 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d  d = sqlite3Hwtim
31a80 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20 20 20  e() - start;.   
31a90 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b     pOp->cycles +
31aa0 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20 20 20  = elapsed;.     
31ab0 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66   pOp->cnt++;.#if
31ac0 20 30 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e   0.        fprin
31ad0 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31 30 6c  tf(stdout, "%10l
31ae0 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a  lu ", elapsed);.
31af0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
31b00 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75  dbePrintOp(stdou
31b10 74 2c 20 6f 72 69 67 50 63 2c 20 26 61 4f 70 5b  t, origPc, &aOp[
31b20 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66  origPc]);.#endif
31b30 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
31b40 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77     /* The follow
31b50 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f  ing code adds no
31b60 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74  thing to the act
31b70 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  ual functionalit
31b80 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  y.    ** of the 
31b90 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20  program.  It is 
31ba0 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65  only here for te
31bb0 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67  sting and debugg
31bc0 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74  ing..    ** On t
31bd0 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69  he other hand, i
31be0 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20  t does burn CPU 
31bf0 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d  cycles every tim
31c00 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a  e through.    **
31c10 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c   the evaluator l
31c20 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20  oop.  So we can 
31c30 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65  leave it out whe
31c40 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69  n NDEBUG is defi
31c50 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e  ned..    */.#ifn
31c60 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61  def NDEBUG.    a
31c70 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26  ssert( pc>=-1 &&
31c80 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23   pc<p->nOp );..#
31c90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
31ca0 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72  UG.    if( p->tr
31cb0 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ace ){.      if(
31cc0 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74 66   rc!=0 ) fprintf
31cd0 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25 64  (p->trace,"rc=%d
31ce0 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69  \n",rc);.      i
31cf0 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
31d00 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52  & (OPFLG_OUT2_PR
31d10 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f 4f  ERELEASE|OPFLG_O
31d20 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20  UT2) ){.        
31d30 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d  registerTrace(p-
31d40 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32 2c  >trace, pOp->p2,
31d50 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
31d60 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
31d70 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  if( pOp->opflags
31d80 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b   & OPFLG_OUT3 ){
31d90 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65  .        registe
31da0 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c  rTrace(p->trace,
31db0 20 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b   pOp->p3, &aMem[
31dc0 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
31dd0 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20   }.    }.#endif 
31de0 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
31df0 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e   */.#endif  /* N
31e00 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a  DEBUG */.  }  /*
31e10 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   The end of the 
31e20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65  for(;;) loop the
31e30 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f   loops through o
31e40 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  pcodes */..  /* 
31e50 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73  If we reach this
31e60 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73   point, it means
31e70 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20   that execution 
31e80 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68  is finished with
31e90 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f  .  ** an error o
31ea0 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a  f some kind..  *
31eb0 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  /.vdbe_error_hal
31ec0 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20  t:.  assert( rc 
31ed0 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  );.  p->rc = rc;
31ee0 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c  .  testcase( sql
31ef0 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
31f00 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71  .xLog!=0 );.  sq
31f10 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73  lite3_log(rc, "s
31f20 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20  tatement aborts 
31f30 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c  at %d: [%s] %s",
31f40 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
31f50 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71 6c       pc, p->zSql
31f60 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
31f70 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
31f80 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  (p);.  if( rc==S
31f90 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
31fa0 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  M ) db->mallocFa
31fb0 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  iled = 1;.  rc =
31fc0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
31fd0 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d 61   if( resetSchema
31fe0 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20  OnFault>0 ){.   
31ff0 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
32000 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74  Schema(db, reset
32010 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29  SchemaOnFault-1)
32020 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73  ;.  }..  /* This
32030 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
32040 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f   out of this pro
32050 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65  cedure.  We have
32060 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65   to.  ** release
32070 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
32080 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65  btrees that were
32090 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65   acquired at the
320a0 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64  .  ** top. */.vd
320b0 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d  be_return:.  db-
320c0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
320d0 74 52 6f 77 69 64 3b 0a 20 20 70 2d 3e 61 43 6f  tRowid;.  p->aCo
320e0 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
320f0 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 2d  TSTATUS_VM_STEP-
32100 31 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74  1] += (int)nVmSt
32110 65 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ep;.  sqlite3Vdb
32120 65 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65 74  eLeave(p);.  ret
32130 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75  urn rc;..  /* Ju
32140 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
32150 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c  string or blob l
32160 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54  arger than SQLIT
32170 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a  E_MAX_LENGTH.  *
32180 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  * is encountered
32190 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a  ..  */.too_big:.
321a0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
321b0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
321c0 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62  db, "string or b
321d0 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20  lob too big");. 
321e0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f   rc = SQLITE_TOO
321f0 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  BIG;.  goto vdbe
32200 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
32210 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
32220 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  if a malloc() fa
32230 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d  ils..  */.no_mem
32240 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  :.  db->mallocFa
32250 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69  iled = 1;.  sqli
32260 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
32270 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f  >zErrMsg, db, "o
32280 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a  ut of memory");.
32290 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
322a0 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  MEM;.  goto vdbe
322b0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
322c0 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
322d0 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69  for any other ki
322e0 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f  nd of fatal erro
322f0 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61 72  r.  The "rc" var
32300 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c  iable.  ** shoul
32310 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72  d hold the error
32320 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62   number..  */.ab
32330 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
32340 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a  :.  assert( p->z
32350 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69  ErrMsg==0 );.  i
32360 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
32370 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54  led ) rc = SQLIT
32380 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72  E_NOMEM;.  if( r
32390 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  c!=SQLITE_IOERR_
323a0 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c  NOMEM ){.    sql
323b0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
323c0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
323d0 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53  %s", sqlite3ErrS
323e0 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67  tr(rc));.  }.  g
323f0 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
32400 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
32410 74 6f 20 68 65 72 65 20 69 66 20 74 68 65 20 73  to here if the s
32420 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
32430 28 29 20 41 50 49 20 73 65 74 73 20 74 68 65 20  () API sets the 
32440 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66  interrupt.  ** f
32450 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f  lag..  */.abort_
32460 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
32470 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  :.  assert( db->
32480 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
32490 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   );.  rc = SQLIT
324a0 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  E_INTERRUPT;.  p
324b0 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c  ->rc = rc;.  sql
324c0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
324d0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
324e0 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53  %s", sqlite3ErrS
324f0 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20  tr(rc));.  goto 
32500 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
32510 0a 7d 0a                                         .}.