/ Hex Artifact Content
Login

Artifact 3338717cb2ff8ead889109813149d2182484b835:


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 0a  to no_mem;}../*.
1750: 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 56  ** Call sqlite3V
1760: 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
1770: 28 29 20 6f 6e 20 74 68 65 20 73 75 70 70 6c 69  () on the suppli
1780: 65 64 20 76 61 6c 75 65 20 28 74 79 70 65 20 4d  ed value (type M
1790: 65 6d 2a 29 0a 2a 2a 20 50 20 69 66 20 72 65 71  em*).** P if req
17a0: 75 69 72 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  uired..*/.#defin
17b0: 65 20 45 78 70 61 6e 64 42 6c 6f 62 28 50 29 20  e ExpandBlob(P) 
17c0: 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d  (((P)->flags&MEM
17d0: 5f 5a 65 72 6f 29 3f 73 71 6c 69 74 65 33 56 64  _Zero)?sqlite3Vd
17e0: 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
17f0: 50 29 3a 30 29 0a 0a 2f 2a 20 52 65 74 75 72 6e  P):0)../* Return
1800: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
1810: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1820: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1830: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1840: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1850: 4f 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a  OMIT_MERGE_SORT.
1860: 23 20 64 65 66 69 6e 65 20 69 73 53 6f 72 74 65  # define isSorte
1870: 72 28 78 29 20 30 0a 23 65 6c 73 65 0a 23 20 64  r(x) 0.#else.# d
1880: 65 66 69 6e 65 20 69 73 53 6f 72 74 65 72 28 78  efine isSorter(x
1890: 29 20 28 28 78 29 2d 3e 70 53 6f 72 74 65 72 21  ) ((x)->pSorter!
18a0: 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  =0).#endif../*.*
18b0: 2a 20 41 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20  * Argument pMem 
18c0: 70 6f 69 6e 74 73 20 61 74 20 61 20 72 65 67 69  points at a regi
18d0: 73 74 65 72 20 74 68 61 74 20 77 69 6c 6c 20 62  ster that will b
18e0: 65 20 70 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a  e passed to a.**
18f0: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75   user-defined fu
1900: 6e 63 74 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e  nction or return
1910: 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 20 61  ed to the user a
1920: 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  s the result of 
1930: 61 20 71 75 65 72 79 2e 0a 2a 2a 20 54 68 69 73  a query..** This
1940: 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68   routine sets th
1950: 65 20 70 4d 65 6d 2d 3e 74 79 70 65 20 76 61 72  e pMem->type var
1960: 69 61 62 6c 65 20 75 73 65 64 20 62 79 20 74 68  iable used by th
1970: 65 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  e sqlite3_value_
1980: 2a 28 29 20 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  *() .** routines
1990: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
19a0: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
19b0: 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20  e(Mem *pMem){.  
19c0: 69 6e 74 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d  int flags = pMem
19d0: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 66  ->flags;.  if( f
19e0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
19f0: 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  ){.    pMem->typ
1a00: 65 20 3d 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b  e = SQLITE_NULL;
1a10: 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
1a20: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
1a30: 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  ){.    pMem->typ
1a40: 65 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  e = SQLITE_INTEG
1a50: 45 52 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69  ER;.  }.  else i
1a60: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  f( flags & MEM_R
1a70: 65 61 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  eal ){.    pMem-
1a80: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 46  >type = SQLITE_F
1a90: 4c 4f 41 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65  LOAT;.  }.  else
1aa0: 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d   if( flags & MEM
1ab0: 5f 53 74 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d  _Str ){.    pMem
1ac0: 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f  ->type = SQLITE_
1ad0: 54 45 58 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  TEXT;.  }else{. 
1ae0: 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20     pMem->type = 
1af0: 53 51 4c 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d  SQLITE_BLOB;.  }
1b00: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  .}../*.** Alloca
1b10: 74 65 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75  te VdbeCursor nu
1b20: 6d 62 65 72 20 69 43 75 72 2e 20 20 52 65 74 75  mber iCur.  Retu
1b30: 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  rn a pointer to 
1b40: 69 74 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c  it.  Return NULL
1b50: 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75  .** if we run ou
1b60: 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a  t of memory..*/.
1b70: 73 74 61 74 69 63 20 56 64 62 65 43 75 72 73 6f  static VdbeCurso
1b80: 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f  r *allocateCurso
1b90: 72 28 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20  r(.  Vdbe *p,   
1ba0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1bb0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
1bc0: 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c  e */.  int iCur,
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1be0: 49 6e 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77  Index of the new
1bf0: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20   VdbeCursor */. 
1c00: 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20   int nField,    
1c10: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c20: 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
1c30: 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
1c40: 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20   */.  int iDb,  
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1c60: 61 74 61 62 61 73 65 20 74 68 65 20 63 75 72 73  atabase the curs
1c70: 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f  or belongs to, o
1c80: 72 20 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73  r -1 */.  int is
1c90: 42 74 72 65 65 43 75 72 73 6f 72 20 20 20 20 20  BtreeCursor     
1ca0: 2f 2a 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72  /* True for B-Tr
1cb0: 65 65 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70  ee.  False for p
1cc0: 73 65 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76  seudo-table or v
1cd0: 74 61 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46  tab */.){.  /* F
1ce0: 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63  ind the memory c
1cf0: 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ell that will be
1d00: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1d10: 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72  he blob of memor
1d20: 79 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20  y.  ** required 
1d30: 66 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72  for this VdbeCur
1d40: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1d50: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1d60: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1d70: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1d80: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1d90: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1da0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1db0: 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73   ** VdbeCursor s
1dc0: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65  tructure for the
1dd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f   following reaso
1de0: 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns:.  **.  **   
1df0: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73  * Sometimes curs
1e00: 6f 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75  or numbers are u
1e10: 73 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65  sed for a couple
1e20: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20   of different.  
1e30: 2a 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20  **     purposes 
1e40: 69 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61  in a vdbe progra
1e50: 6d 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74  m. The different
1e60: 20 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75   uses might requ
1e70: 69 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66  ire.  **     dif
1e80: 66 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c  ferent sized all
1e90: 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79  ocations. Memory
1ea0: 20 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67   cells provide g
1eb0: 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20  rowable.  **    
1ec0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20   allocations..  
1ed0: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e  **.  **   * When
1ee0: 20 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45   using ENABLE_ME
1ef0: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c  MORY_MANAGEMENT,
1f00: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66   memory cell buf
1f10: 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20  fers can.  **   
1f20: 20 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c    be freed lazil
1f30: 79 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  y via the sqlite
1f40: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
1f50: 28 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a  () API. This.  *
1f60: 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20  *     minimizes 
1f70: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61  the number of ma
1f80: 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20  lloc calls made 
1f90: 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20  by the system.. 
1fa0: 20 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20   **.  ** Memory 
1fb0: 63 65 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72  cells for cursor
1fc0: 73 20 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20  s are allocated 
1fd0: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
1fe0: 65 20 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73  e address.  ** s
1ff0: 70 61 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  pace. Memory cel
2000: 6c 20 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72  l (p->nMem) corr
2010: 65 73 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f  esponds to curso
2020: 72 20 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20  r 0. Space for. 
2030: 20 2a 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20   ** cursor 1 is 
2040: 6d 61 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72  managed by memor
2050: 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d  y cell (p->nMem-
2060: 31 29 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20  1), etc..  */.  
2070: 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e  Mem *pMem = &p->
2080: 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75  aMem[p->nMem-iCu
2090: 72 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65  r];..  int nByte
20a0: 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
20b0: 70 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65  pCx = 0;.  nByte
20c0: 20 3d 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38   = .      ROUND8
20d0: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
20e0: 6f 72 29 29 20 2b 20 0a 20 20 20 20 20 20 28 69  or)) + .      (i
20f0: 73 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c  sBtreeCursor?sql
2100: 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53  ite3BtreeCursorS
2110: 69 7a 65 28 29 3a 30 29 20 2b 20 0a 20 20 20 20  ize():0) + .    
2120: 20 20 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f    2*nField*sizeo
2130: 66 28 75 33 32 29 3b 0a 0a 20 20 61 73 73 65 72  f(u32);..  asser
2140: 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73  t( iCur<p->nCurs
2150: 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  or );.  if( p->a
2160: 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20  pCsr[iCur] ){.  
2170: 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
2180: 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
2190: 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20  Csr[iCur]);.    
21a0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
21b0: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51   0;.  }.  if( SQ
21c0: 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33  LITE_OK==sqlite3
21d0: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d  VdbeMemGrow(pMem
21e0: 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20  , nByte, 0) ){. 
21f0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
2200: 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43  ] = pCx = (VdbeC
2210: 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a  ursor*)pMem->z;.
2220: 20 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20      memset(pCx, 
2230: 30 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75  0, sizeof(VdbeCu
2240: 72 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d  rsor));.    pCx-
2250: 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20  >iDb = iDb;.    
2260: 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46  pCx->nField = nF
2270: 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e 46  ield;.    if( nF
2280: 69 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70 43  ield ){.      pC
2290: 78 2d 3e 61 54 79 70 65 20 3d 20 28 75 33 32 20  x->aType = (u32 
22a0: 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44  *)&pMem->z[ROUND
22b0: 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  8(sizeof(VdbeCur
22c0: 73 6f 72 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20  sor))];.    }.  
22d0: 20 20 69 66 28 20 69 73 42 74 72 65 65 43 75 72    if( isBtreeCur
22e0: 73 6f 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78  sor ){.      pCx
22f0: 2d 3e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43  ->pCursor = (BtC
2300: 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20  ursor*).        
2310: 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44    &pMem->z[ROUND
2320: 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  8(sizeof(VdbeCur
2330: 73 6f 72 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73  sor))+2*nField*s
2340: 69 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20  izeof(u32)];.   
2350: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
2360: 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70  ursorZero(pCx->p
2370: 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
2380: 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b   }.  return pCx;
2390: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
23a0: 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65   convert a value
23b0: 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20   into a numeric 
23c0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
23d0: 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73  f we can.** do s
23e0: 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  o without loss o
23f0: 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20  f information.  
2400: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2410: 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a  if the string.**
2420: 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75   looks like a nu
2430: 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74  mber, convert it
2440: 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20   into a number. 
2450: 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a   If it does not.
2460: 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e  ** look like a n
2470: 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20  umber, leave it 
2480: 61 6c 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  alone..*/.static
2490: 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72   void applyNumer
24a0: 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a  icAffinity(Mem *
24b0: 70 52 65 63 29 7b 0a 20 20 69 66 28 20 28 70 52  pRec){.  if( (pR
24c0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ec->flags & (MEM
24d0: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d  _Real|MEM_Int))=
24e0: 3d 30 20 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65  =0 ){.    double
24f0: 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 69 36 34   rValue;.    i64
2500: 20 69 56 61 6c 75 65 3b 0a 20 20 20 20 75 38 20   iValue;.    u8 
2510: 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b  enc = pRec->enc;
2520: 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e  .    if( (pRec->
2530: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d  flags&MEM_Str)==
2540: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  0 ) return;.    
2550: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28  if( sqlite3AtoF(
2560: 70 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65  pRec->z, &rValue
2570: 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d  , pRec->n, enc)=
2580: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20  =0 ) return;.   
2590: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41   if( 0==sqlite3A
25a0: 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26  toi64(pRec->z, &
25b0: 69 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c  iValue, pRec->n,
25c0: 20 65 6e 63 29 20 29 7b 0a 20 20 20 20 20 20 70   enc) ){.      p
25d0: 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75  Rec->u.i = iValu
25e0: 65 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66  e;.      pRec->f
25f0: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b  lags |= MEM_Int;
2600: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2610: 20 20 70 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c    pRec->r = rVal
2620: 75 65 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e  ue;.      pRec->
2630: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61  flags |= MEM_Rea
2640: 6c 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  l;.    }.  }.}..
2650: 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67  /*.** Processing
2660: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79   is determine by
2670: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61   the affinity pa
2680: 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53  rameter:.**.** S
2690: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
26a0: 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  R:.** SQLITE_AFF
26b0: 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45  _REAL:.** SQLITE
26c0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a  _AFF_NUMERIC:.**
26d0: 20 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65      Try to conve
26e0: 72 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e  rt pRec to an in
26f0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2700: 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20  tion or a .**   
2710: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
2720: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2730: 66 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70  f an integer rep
2740: 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20  resentation.**  
2750: 20 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c    is not possibl
2760: 65 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  e.  Note that th
2770: 65 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  e integer repres
2780: 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20  entation is.**  
2790: 20 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72    always preferr
27a0: 65 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20  ed, even if the 
27b0: 61 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c  affinity is REAL
27c0: 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20  , because.**    
27d0: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
27e0: 73 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72  sentation is mor
27f0: 65 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  e space efficien
2800: 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a  t on disk..**.**
2810: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
2820: 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20  :.**    Convert 
2830: 70 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72  pRec to a text r
2840: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a  epresentation..*
2850: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
2860: 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f  NONE:.**    No-o
2870: 70 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68  p.  pRec is unch
2880: 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  anged..*/.static
2890: 20 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e   void applyAffin
28a0: 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63  ity(.  Mem *pRec
28b0: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ,          /* Th
28c0: 65 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79  e value to apply
28d0: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a   affinity to */.
28e0: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c    char affinity,
28f0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
2900: 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
2910: 69 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20  ied */.  u8 enc 
2920: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2930: 55 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e  Use this text en
2940: 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69  coding */.){.  i
2950: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
2960: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
2970: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65      /* Only atte
2980: 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69  mpt the conversi
2990: 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68  on to TEXT if th
29a0: 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ere is an intege
29b0: 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a  r or real.    **
29c0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
29d0: 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64  (blob and NULL d
29e0: 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72  o not get conver
29f0: 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69  ted) but no stri
2a00: 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  ng.    ** repres
2a10: 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f  entation..    */
2a20: 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65  .    if( 0==(pRe
2a30: 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72  c->flags&MEM_Str
2a40: 29 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67  ) && (pRec->flag
2a50: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2a60: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73  Int)) ){.      s
2a70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
2a80: 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63  ingify(pRec, enc
2a90: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65  );.    }.    pRe
2aa0: 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  c->flags &= ~(ME
2ab0: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b  M_Real|MEM_Int);
2ac0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66  .  }else if( aff
2ad0: 69 6e 69 74 79 21 3d 53 51 4c 49 54 45 5f 41 46  inity!=SQLITE_AF
2ae0: 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73  F_NONE ){.    as
2af0: 73 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d  sert( affinity==
2b00: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
2b10: 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d  ER || affinity==
2b20: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a  SQLITE_AFF_REAL.
2b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20               || 
2b40: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
2b50: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a  _AFF_NUMERIC );.
2b60: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2b70: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2b80: 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
2b90: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
2ba0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
2bb0: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
2bc0: 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a  ty(pRec);.    }.
2bd0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79    }.}../*.** Try
2be0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20   to convert the 
2bf0: 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69  type of a functi
2c00: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61  on argument or a
2c10: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a   result column.*
2c20: 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  * into a numeric
2c30: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2c40: 20 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54    Use either INT
2c50: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69  EGER or REAL whi
2c60: 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70  chever.** is app
2c70: 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f  ropriate.  But o
2c80: 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65  nly do the conve
2c90: 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70  rsion if it is p
2ca0: 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a  ossible without.
2cb0: 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
2cc0: 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72  mation and retur
2cd0: 6e 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79  n the revised ty
2ce0: 70 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  pe of the argume
2cf0: 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
2d00: 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63  e3_value_numeric
2d10: 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61  _type(sqlite3_va
2d20: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65  lue *pVal){.  Me
2d30: 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29  m *pMem = (Mem*)
2d40: 70 56 61 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d  pVal;.  if( pMem
2d50: 2d 3e 74 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54  ->type==SQLITE_T
2d60: 45 58 54 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  EXT ){.    apply
2d70: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2d80: 70 4d 65 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74  pMem);.    sqlit
2d90: 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
2da0: 70 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20  pe(pMem);.  }.  
2db0: 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70  return pMem->typ
2dc0: 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f  e;.}../*.** Expo
2dd0: 72 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20  rted version of 
2de0: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e  applyAffinity().
2df0: 20 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20   This one works 
2e00: 6f 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  on sqlite3_value
2e10: 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69  *, .** not the i
2e20: 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70  nternal Mem* typ
2e30: 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  e..*/.void sqlit
2e40: 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69  e3ValueApplyAffi
2e50: 6e 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f  nity(.  sqlite3_
2e60: 76 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20  value *pVal, .  
2e70: 75 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20  u8 affinity, .  
2e80: 75 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c  u8 enc.){.  appl
2e90: 79 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a  yAffinity((Mem *
2ea0: 29 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c  )pVal, affinity,
2eb0: 20 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66   enc);.}..#ifdef
2ec0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
2ed0: 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65  .** Write a nice
2ee0: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
2ef0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  tation of the co
2f00: 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70  ntents of cell p
2f10: 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66  Mem.** into buff
2f20: 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20  er zBuf, length 
2f30: 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  nBuf..*/.void sq
2f40: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
2f50: 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65  tyPrint(Mem *pMe
2f60: 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a  m, char *zBuf){.
2f70: 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a    char *zCsr = z
2f80: 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70  Buf;.  int f = p
2f90: 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73  Mem->flags;..  s
2fa0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
2fb0: 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73   *const encnames
2fc0: 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38  [] = {"(X)", "(8
2fd0: 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28  )", "(16LE)", "(
2fe0: 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20  16BE)"};..  if( 
2ff0: 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20  f&MEM_Blob ){.  
3000: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61    int i;.    cha
3010: 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26  r c;.    if( f &
3020: 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20   MEM_Dyn ){.    
3030: 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20    c = 'z';.     
3040: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3050: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
3060: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
3070: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3080: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
3090: 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20    c = 't';.     
30a0: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
30b0: 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d  EM_Dyn|MEM_Ephem
30c0: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
30d0: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45  se if( f & MEM_E
30e0: 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20  phem ){.      c 
30f0: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
3100: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3110: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
3120: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
3130: 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a  .      c = 's';.
3140: 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74      }..    sqlit
3150: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3160: 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b   zCsr, "%c", c);
3170: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
3180: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3190: 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  r);.    sqlite3_
31a0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
31b0: 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d  sr, "%d[", pMem-
31c0: 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d  >n);.    zCsr +=
31d0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
31e0: 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28  (zCsr);.    for(
31f0: 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70  i=0; i<16 && i<p
3200: 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20  Mem->n; i++){.  
3210: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3220: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
3230: 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d  "%02X", ((int)pM
3240: 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29  em->z[i] & 0xFF)
3250: 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d  );.      zCsr +=
3260: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
3270: 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20  (zCsr);.    }.  
3280: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20    for(i=0; i<16 
3290: 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b  && i<pMem->n; i+
32a0: 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a  +){.      char z
32b0: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20   = pMem->z[i];. 
32c0: 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c       if( z<32 ||
32d0: 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b   z>126 ) *zCsr++
32e0: 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c   = '.';.      el
32f0: 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a  se *zCsr++ = z;.
3300: 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74      }..    sqlit
3310: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3320: 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e   zCsr, "]%s", en
3330: 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63  cnames[pMem->enc
3340: 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  ]);.    zCsr += 
3350: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3360: 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66  zCsr);.    if( f
3370: 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
3380: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
3390: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
33a0: 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e  "+%dz",pMem->u.n
33b0: 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73  Zero);.      zCs
33c0: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
33d0: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
33e0: 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c  }.    *zCsr = '\
33f0: 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  0';.  }else if( 
3400: 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  f & MEM_Str ){. 
3410: 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20     int j, k;.   
3420: 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a   zBuf[0] = ' ';.
3430: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
3440: 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  Dyn ){.      zBu
3450: 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20  f[1] = 'z';.    
3460: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
3470: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45  MEM_Static|MEM_E
3480: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
3490: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
34a0: 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20  EM_Static ){.   
34b0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27     zBuf[1] = 't'
34c0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
34d0: 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45  (f & (MEM_Dyn|ME
34e0: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
34f0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3500: 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20  & MEM_Ephem ){. 
3510: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3520: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
3530: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
3540: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
3550: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
3560: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73      zBuf[1] = 's
3570: 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d  ';.    }.    k =
3580: 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   2;.    sqlite3_
3590: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a  snprintf(100, &z
35a0: 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d  Buf[k], "%d", pM
35b0: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d  em->n);.    k +=
35c0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
35d0: 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20  (&zBuf[k]);.    
35e0: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b  zBuf[k++] = '[';
35f0: 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  .    for(j=0; j<
3600: 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b  15 && j<pMem->n;
3610: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20   j++){.      u8 
3620: 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a  c = pMem->z[j];.
3630: 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32        if( c>=0x2
3640: 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20  0 && c<0x7f ){. 
3650: 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d         zBuf[k++]
3660: 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = c;.      }els
3670: 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b  e{.        zBuf[
3680: 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20  k++] = '.';.    
3690: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42    }.    }.    zB
36a0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20  uf[k++] = ']';. 
36b0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
36c0: 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d  ntf(100,&zBuf[k]
36d0: 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d  , encnames[pMem-
36e0: 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d  >enc]);.    k +=
36f0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
3700: 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20  (&zBuf[k]);.    
3710: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20  zBuf[k++] = 0;. 
3720: 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66   }.}.#endif..#if
3730: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
3740: 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65  ./*.** Print the
3750: 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69   value of a regi
3760: 73 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67  ster for tracing
3770: 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74   purposes:.*/.st
3780: 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61  atic void memTra
3790: 63 65 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75  cePrint(FILE *ou
37a0: 74 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66  t, Mem *p){.  if
37b0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
37c0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72  _Null ){.    fpr
37d0: 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c  intf(out, " NULL
37e0: 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
37f0: 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  (p->flags & (MEM
3800: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  _Int|MEM_Str))==
3810: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
3820: 29 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66  ) ){.    fprintf
3830: 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22  (out, " si:%lld"
3840: 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c  , p->u.i);.  }el
3850: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3860: 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  & MEM_Int ){.   
3870: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20   fprintf(out, " 
3880: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3890: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
38a0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
38b0: 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28  OINT.  }else if(
38c0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
38d0: 52 65 61 6c 20 29 7b 0a 20 20 20 20 66 70 72 69  Real ){.    fpri
38e0: 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a 25 67 22  ntf(out, " r:%g"
38f0: 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a  , p->r);.#endif.
3900: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3910: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
3920: 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66  t ){.    fprintf
3930: 28 6f 75 74 2c 20 22 20 28 72 6f 77 73 65 74 29  (out, " (rowset)
3940: 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ");.  }else{.   
3950: 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b   char zBuf[200];
3960: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
3970: 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70  MemPrettyPrint(p
3980: 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72  , zBuf);.    fpr
3990: 69 6e 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a  intf(out, " ");.
39a0: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
39b0: 20 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20   "%s", zBuf);.  
39c0: 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  }.}.static void 
39d0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 46 49  registerTrace(FI
39e0: 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65  LE *out, int iRe
39f0: 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70  g, Mem *p){.  fp
3a00: 72 69 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b  rintf(out, "REG[
3a10: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3a20: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3a30: 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e  out, p);.  fprin
3a40: 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d  tf(out, "\n");.}
3a50: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3a60: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20  SQLITE_DEBUG.#  
3a70: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
3a80: 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d  TRACE(R,M) if(p-
3a90: 3e 74 72 61 63 65 29 72 65 67 69 73 74 65 72 54  >trace)registerT
3aa0: 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c  race(p->trace,R,
3ab0: 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  M).#else.#  defi
3ac0: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
3ad0: 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a  E(R,M).#endif...
3ae0: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
3af0: 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69  ILE../* .** hwti
3b00: 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e  me.h contains in
3b10: 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63  line assembler c
3b20: 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e  ode for implemen
3b30: 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65  ting .** high-pe
3b40: 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67  rformance timing
3b50: 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69   routines..*/.#i
3b60: 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68  nclude "hwtime.h
3b70: 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  "..#endif../*.**
3b80: 20 54 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49   The CHECK_FOR_I
3b90: 4e 54 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64  NTERRUPT macro d
3ba0: 65 66 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b  efined here look
3bb0: 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a  s to see if the.
3bc0: 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  ** sqlite3_inter
3bd0: 72 75 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68  rupt() routine h
3be0: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20  as been called. 
3bf0: 20 49 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c   If it has been,
3c00: 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73   then.** process
3c10: 69 6e 67 20 6f 66 20 74 68 65 20 56 44 42 45 20  ing of the VDBE 
3c20: 70 72 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72  program is inter
3c30: 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  rupted..**.** Th
3c40: 69 73 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74  is macro added t
3c50: 6f 20 65 76 65 72 79 20 69 6e 73 74 72 75 63 74  o every instruct
3c60: 69 6f 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20  ion that does a 
3c70: 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f  jump in order to
3c80: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20  .** implement a 
3c90: 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74  loop.  This test
3ca0: 20 75 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65   used to be on e
3cb0: 76 65 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74  very single inst
3cc0: 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20  ruction,.** but 
3cd0: 74 68 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f  that meant we mo
3ce0: 72 65 20 74 65 73 74 69 6e 67 20 74 68 61 6e 20  re testing than 
3cf0: 77 65 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f  we needed.  By o
3d00: 6e 6c 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a  nly testing the.
3d10: 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20  ** flag on jump 
3d20: 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65  instructions, we
3d30: 20 67 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73   get a (small) s
3d40: 70 65 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74  peed improvement
3d50: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45  ..*/.#define CHE
3d60: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
3d70: 20 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31   \.   if( db->u1
3d80: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
3d90: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
3da0: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 0a  to_interrupt;...
3db0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
3dc0: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
3dd0: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
3de0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
3df0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
3e00: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
3e10: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
3e20: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
3e30: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
3e40: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
3e50: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
3e60: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
3e70: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
3e80: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
3e90: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
3ea0: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
3eb0: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
3ec0: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
3ed0: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
3ee0: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
3ef0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
3f00: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
3f10: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
3f20: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
3f30: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
3f40: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
3f50: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
3f60: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
3f70: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
3f80: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
3f90: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
3fa0: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
3fb0: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
3fc0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 66 65  f../*.** Transfe
3fd0: 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  r error message 
3fe0: 74 65 78 74 20 66 72 6f 6d 20 61 6e 20 73 71 6c  text from an sql
3ff0: 69 74 65 33 5f 76 74 61 62 2e 7a 45 72 72 4d 73  ite3_vtab.zErrMs
4000: 67 20 28 74 65 78 74 20 73 74 6f 72 65 64 0a 2a  g (text stored.*
4010: 2a 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61  * in memory obta
4020: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
4030: 33 5f 6d 61 6c 6c 6f 63 29 20 69 6e 74 6f 20 61  3_malloc) into a
4040: 20 56 64 62 65 2e 7a 45 72 72 4d 73 67 20 28 74   Vdbe.zErrMsg (t
4050: 65 78 74 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e  ext stored.** in
4060: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
4070: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 44 62 4d   from sqlite3DbM
4080: 61 6c 6c 6f 63 29 2e 0a 2a 2f 0a 73 74 61 74 69  alloc)..*/.stati
4090: 63 20 76 6f 69 64 20 69 6d 70 6f 72 74 56 74 61  c void importVta
40a0: 62 45 72 72 4d 73 67 28 56 64 62 65 20 2a 70 2c  bErrMsg(Vdbe *p,
40b0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
40c0: 56 74 61 62 29 7b 0a 20 20 73 71 6c 69 74 65 33  Vtab){.  sqlite3
40d0: 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20   *db = p->db;.  
40e0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
40f0: 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
4100: 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   p->zErrMsg = sq
4110: 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62  lite3DbStrDup(db
4120: 2c 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  , pVtab->zErrMsg
4130: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
4140: 65 28 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  e(pVtab->zErrMsg
4150: 29 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  );.  pVtab->zErr
4160: 4d 73 67 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a  Msg = 0;.}.../*.
4170: 2a 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d 75  ** Execute as mu
4180: 63 68 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f  ch of a VDBE pro
4190: 67 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74  gram as we can t
41a0: 68 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a  hen return..**.*
41b0: 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b  * sqlite3VdbeMak
41c0: 65 52 65 61 64 79 28 29 20 6d 75 73 74 20 62 65  eReady() must be
41d0: 20 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74   called before t
41e0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  his routine in o
41f0: 72 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65  rder to.** close
4200: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74   the program wit
4210: 68 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c  h a final OP_Hal
4220: 74 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20  t and to set up 
4230: 74 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a  the callbacks.**
4240: 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d   and the error m
4250: 65 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a  essage pointer..
4260: 2a 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61  **.** Whenever a
4270: 20 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64   row or result d
4280: 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ata is available
4290: 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77  , this routine w
42a0: 69 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e  ill either.** in
42b0: 76 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20  voke the result 
42c0: 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65  callback (if the
42d0: 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65  re is one) or re
42e0: 74 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c  turn with.** SQL
42f0: 49 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49  ITE_ROW..**.** I
4300: 66 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  f an attempt is 
4310: 6d 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c  made to open a l
4320: 6f 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20  ocked database, 
4330: 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e  then this routin
4340: 65 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72  e.** will either
4350: 20 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79   invoke the busy
4360: 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68   callback (if th
4370: 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69  ere is one) or i
4380: 74 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e  t will.** return
4390: 20 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a   SQLITE_BUSY..**
43a0: 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20  .** If an error 
43b0: 6f 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72  occurs, an error
43c0: 20 6d 65 73 73 61 67 65 20 69 73 20 77 72 69 74   message is writ
43d0: 74 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62  ten to memory ob
43e0: 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73  tained.** from s
43f0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
4400: 61 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69  and p->zErrMsg i
4410: 73 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20  s made to point 
4420: 74 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a  to that memory..
4430: 2a 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64  ** The error cod
4440: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70  e is stored in p
4450: 2d 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f  ->rc and this ro
4460: 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51  utine returns SQ
4470: 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a  LITE_ERROR..**.*
4480: 2a 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63  * If the callbac
4490: 6b 20 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e  k ever returns n
44a0: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
44b0: 65 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a  e program exits.
44c0: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ** immediately. 
44d0: 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e   There will be n
44e0: 6f 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  o error message 
44f0: 62 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69  but the p->rc fi
4500: 65 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f  eld is.** set to
4510: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e   SQLITE_ABORT an
4520: 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77  d this routine w
4530: 69 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ill return SQLIT
4540: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41  E_ERROR..**.** A
4550: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
4560: 6f 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73 20  on error causes 
4570: 70 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20  p->rc to be set 
4580: 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  to SQLITE_NOMEM 
4590: 61 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74  and this.** rout
45a0: 69 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51  ine to return SQ
45b0: 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a  LITE_ERROR..**.*
45c0: 2a 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72  * Other fatal er
45d0: 72 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49  rors return SQLI
45e0: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
45f0: 41 66 74 65 72 20 74 68 69 73 20 72 6f 75 74 69  After this routi
4600: 6e 65 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c  ne has finished,
4610: 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61   sqlite3VdbeFina
4620: 6c 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65  lize() should be
4630: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61  .** used to clea
4640: 6e 20 75 70 20 74 68 65 20 6d 65 73 73 20 74 68  n up the mess th
4650: 61 74 20 77 61 73 20 6c 65 66 74 20 62 65 68 69  at was left behi
4660: 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nd..*/.int sqlit
4670: 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64  e3VdbeExec(.  Vd
4680: 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20  be *p           
4690: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
46a0: 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  VDBE */.){.  int
46b0: 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20   pc=0;          
46c0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
46d0: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a  rogram counter *
46e0: 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d  /.  Op *aOp = p-
46f0: 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f  >aOp;          /
4700: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70  * Copy of p->aOp
4710: 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20   */.  Op *pOp;  
4720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4730: 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72   /* Current oper
4740: 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72  ation */.  int r
4750: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20  c = SQLITE_OK;  
4760: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
4770: 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71  o return */.  sq
4780: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64  lite3 *db = p->d
4790: 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  b;       /* The 
47a0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38  database */.  u8
47b0: 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
47c0: 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65  ult = 0; /* Rese
47d0: 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61  t schema after a
47e0: 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74  n error if posit
47f0: 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f  ive */.  u8 enco
4800: 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20  ding = ENC(db); 
4810: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
4820: 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ase encoding */.
4830: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4840: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
4850: 4c 42 41 43 4b 0a 20 20 69 6e 74 20 63 68 65 63  LBACK.  int chec
4860: 6b 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20  kProgress;      
4870: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 72     /* True if pr
4880: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 73  ogress callbacks
4890: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a   are enabled */.
48a0: 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f    int nProgressO
48b0: 70 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20  ps = 0;      /* 
48c0: 4f 70 63 6f 64 65 73 20 65 78 65 63 75 74 65 64  Opcodes executed
48d0: 20 73 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20   since progress 
48e0: 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e  callback. */.#en
48f0: 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20  dif.  Mem *aMem 
4900: 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20  = p->aMem;      
4910: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61   /* Copy of p->a
4920: 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  Mem */.  Mem *pI
4930: 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n1 = 0;         
4940: 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74      /* 1st input
4950: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4960: 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20  m *pIn2 = 0;    
4970: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20           /* 2nd 
4980: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4990: 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30  .  Mem *pIn3 = 0
49a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
49b0: 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61   3rd input opera
49c0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75  nd */.  Mem *pOu
49d0: 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  t = 0;          
49e0: 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65     /* Output ope
49f0: 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43  rand */.  int iC
4a00: 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20  ompare = 0;     
4a10: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
4a20: 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72  f last OP_Compar
4a30: 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20  e operation */. 
4a40: 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d   int *aPermute =
4a50: 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50   0;         /* P
4a60: 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f  ermutation of co
4a70: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
4a80: 70 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61  pare */.  i64 la
4a90: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
4aa0: 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76  stRowid;  /* Sav
4ab0: 65 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ed value of the 
4ac0: 6c 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49  last insert ROWI
4ad0: 44 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45  D */.#ifdef VDBE
4ae0: 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73  _PROFILE.  u64 s
4af0: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
4b00: 20 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f        /* CPU clo
4b10: 63 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72  ck count at star
4b20: 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20  t of opcode */. 
4b30: 20 69 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20   int origPc;    
4b40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
4b50: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61  rogram counter a
4b60: 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64  t start of opcod
4b70: 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a  e */.#endif.  /*
4b80: 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20  ** INSERT STACK 
4b90: 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a  UNION HERE ***/.
4ba0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61  .  assert( p->ma
4bb0: 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f  gic==VDBE_MAGIC_
4bc0: 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74  RUN );  /* sqlit
4bd0: 65 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69  e3_step() verifi
4be0: 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c  es this */.  sql
4bf0: 69 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29  ite3VdbeEnter(p)
4c00: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53  ;.  if( p->rc==S
4c10: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
4c20: 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
4c30: 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ns if a malloc()
4c40: 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74   inside a call t
4c50: 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  o sqlite3_column
4c60: 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a  _text() or.    *
4c70: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
4c80: 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64  _text16() failed
4c90: 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e  .  */.    goto n
4ca0: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73  o_mem;.  }.  ass
4cb0: 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  ert( p->rc==SQLI
4cc0: 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d  TE_OK || p->rc==
4cd0: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20  SQLITE_BUSY );. 
4ce0: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
4cf0: 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  OK;.  assert( p-
4d00: 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20  >explain==0 );. 
4d10: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
4d20: 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61   0;.  db->busyHa
4d30: 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b  ndler.nBusy = 0;
4d40: 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  .  CHECK_FOR_INT
4d50: 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65  ERRUPT;.  sqlite
4d60: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4d70: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
4d80: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
4d90: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68 65 63  _CALLBACK.  chec
4da0: 6b 50 72 6f 67 72 65 73 73 20 3d 20 64 62 2d 3e  kProgress = db->
4db0: 78 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a 23 65  xProgress!=0;.#e
4dc0: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
4dd0: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4de0: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4df0: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4e00: 70 63 3d 3d 30 20 20 26 26 20 28 70 2d 3e 64 62  pc==0  && (p->db
4e10: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4e20: 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 21 3d 30  _VdbeListing)!=0
4e30: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
4e40: 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20     printf("VDBE 
4e50: 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a  Program Listing:
4e60: 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  \n");.    sqlite
4e70: 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29  3VdbePrintSql(p)
4e80: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
4e90: 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20  <p->nOp; i++){. 
4ea0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4eb0: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
4ec0: 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20  i, &aOp[i]);.   
4ed0: 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33   }.  }.  sqlite3
4ee0: 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
4ef0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28  );.#endif.  for(
4f00: 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51  pc=p->pc; rc==SQ
4f10: 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a  LITE_OK; pc++){.
4f20: 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
4f30: 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  0 && pc<p->nOp )
4f40: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61  ;.    if( db->ma
4f50: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
4f60: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66  o no_mem;.#ifdef
4f70: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
4f80: 20 20 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20    origPc = pc;. 
4f90: 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74     start = sqlit
4fa0: 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64  e3Hwtime();.#end
4fb0: 69 66 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f  if.    pOp = &aO
4fc0: 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f  p[pc];..    /* O
4fd0: 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e  nly allow tracin
4fe0: 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  g if SQLITE_DEBU
4ff0: 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20  G is defined..  
5000: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
5010: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
5020: 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20   p->trace ){.   
5030: 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a     if( pc==0 ){.
5040: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
5050: 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20 54  VDBE Execution T
5060: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20  race:\n");.     
5070: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
5080: 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20  intSql(p);.     
5090: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
50a0: 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74  VdbePrintOp(p->t
50b0: 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a  race, pc, pOp);.
50c0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
50d0: 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63     ..    /* Chec
50e0: 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e  k to see if we n
50f0: 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20  eed to simulate 
5100: 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54  an interrupt.  T
5110: 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  his only happens
5120: 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61  .    ** if we ha
5130: 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73  ve a special tes
5140: 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a  t build..    */.
5150: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
5160: 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ST.    if( sqlit
5170: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
5180: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  nt>0 ){.      sq
5190: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
51a0: 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69  count--;.      i
51b0: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
51c0: 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b  rupt_count==0 ){
51d0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
51e0: 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a  _interrupt(db);.
51f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
5200: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
5210: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
5220: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20  SS_CALLBACK.    
5230: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
5240: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
5250: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
5260: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
5270: 65 64 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a  ed number.    **
5280: 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76   of VDBE ops hav
5290: 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20  e been executed 
52a0: 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68  (either since th
52b0: 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  is invocation of
52c0: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  .    ** sqlite3V
52d0: 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e  dbeExec() or sin
52e0: 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65  ce last time the
52f0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
5300: 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a  ck was called)..
5310: 20 20 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72      ** If the pr
5320: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
5330: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
5340: 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75  , exit the virtu
5350: 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a  al machine with.
5360: 20 20 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20      ** a return 
5370: 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52  code SQLITE_ABOR
5380: 54 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  T..    */.    if
5390: 28 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 20  ( checkProgress 
53a0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  ){.      if( db-
53b0: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e  >nProgressOps==n
53c0: 50 72 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20  ProgressOps ){. 
53d0: 20 20 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a         int prc;.
53e0: 20 20 20 20 20 20 20 20 70 72 63 20 3d 20 64 62          prc = db
53f0: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
5400: 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b 0a 20  pProgressArg);. 
5410: 20 20 20 20 20 20 20 69 66 28 20 70 72 63 21 3d         if( prc!=
5420: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  0 ){.          r
5430: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
5440: 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20 20 20  RUPT;.          
5450: 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
5460: 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  halt;.        }.
5470: 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73          nProgres
5480: 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  sOps = 0;.      
5490: 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73  }.      nProgres
54a0: 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65  sOps++;.    }.#e
54b0: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20  ndif..    /* On 
54c0: 61 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68 20  any opcode with 
54d0: 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c  the "out2-prerel
54e0: 61 73 65 22 20 74 61 67 2c 20 66 72 65 65 20 61  ase" tag, free a
54f0: 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65 72 6e  ny.    ** extern
5500: 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f  al allocations o
5510: 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e  ut of mem[p2] an
5520: 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f  d set mem[p2] to
5530: 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e   be.    ** an un
5540: 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65 72 2e  defined integer.
5550: 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c 20 65    Opcodes will e
5560: 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20 74 68  ither fill in th
5570: 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a  e integer.    **
5580: 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72   value or conver
5590: 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64  t mem[p2] to a d
55a0: 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e 0a 20  ifferent type.. 
55b0: 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
55c0: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d  ( pOp->opflags==
55d0: 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
55e0: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
55f0: 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  e] );.    if( pO
5600: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5610: 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41  LG_OUT2_PRERELEA
5620: 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  SE ){.      asse
5630: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5640: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5650: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
5660: 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20  );.      pOut = 
5670: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
5680: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
5690: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
56a0: 0a 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52 65  .      VdbeMemRe
56b0: 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20  lease(pOut);.   
56c0: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
56d0: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a   MEM_Int;.    }.
56e0: 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63  .    /* Sanity c
56f0: 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72  hecking on other
5700: 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66   operands */.#if
5710: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
5720: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5730: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
5740: 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N1)!=0 ){.      
5750: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
5760: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5770: 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  t( pOp->p1<=p->n
5780: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73  Mem );.      ass
5790: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
57a0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20  &aMem[pOp->p1]) 
57b0: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
57c0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
57d0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29   &aMem[pOp->p1])
57e0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
57f0: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5800: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5810: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5820: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
5830: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5840: 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
5850: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
5860: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
5870: 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p2]) );.      
5880: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5890: 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p2, &aMem[pO
58a0: 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p2]);.    }. 
58b0: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
58c0: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33  lags & OPFLG_IN3
58d0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
58e0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
58f0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5900: 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
5910: 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  m );.      asser
5920: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5930: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
5940: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
5950: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26  TRACE(pOp->p3, &
5960: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
5970: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
5980: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
5990: 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a  FLG_OUT2)!=0 ){.
59a0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
59b0: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
59c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
59d0: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
59e0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
59f0: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5a00: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p2]);.    }.  
5a10: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5a20: 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  ags & OPFLG_OUT3
5a30: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5a40: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
5a50: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5a60: 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
5a70: 6d 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  m );.      memAb
5a80: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
5a90: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
5aa0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a      }.#endif.  .
5ab0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
5ac0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
5ad0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ae0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5af0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
5b20: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
5b30: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
5b40: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
5b50: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
5b60: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
5b70: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
5b80: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
5b90: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
5ba0: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
5bb0: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
5bc0: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
5bd0: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
5be0: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
5bf0: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
5c00: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
5c10: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
5c20: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
5c30: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
5c40: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
5c50: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
5c60: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
5c70: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
5c80: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
5c90: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
5ca0: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5cb0: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5cc0: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
5cd0: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
5ce0: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
5cf0: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
5d00: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
5d10: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
5d20: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
5d30: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
5d40: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
5d50: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
5d60: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
5d70: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
5d80: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
5d90: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
5da0: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5db0: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5dc0: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5dd0: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5de0: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5df0: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5e00: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5e10: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
5e20: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
5e30: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
5e40: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
5e50: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
5e60: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
5e70: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
5e80: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
5e90: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
5ea0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
5eb0: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
5ec0: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
5ed0: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
5ee0: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
5ef0: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
5f00: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
5f10: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
5f20: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
5f30: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
5f40: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
5f50: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
5f60: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
5f70: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
5f80: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
5f90: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
5fa0: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
5fb0: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
5fc0: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
5fd0: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
5fe0: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
5ff0: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
6000: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72  n2, in3, out2_pr
6010: 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20  erelease, out2, 
6020: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
6030: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
6040: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
6050: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
6060: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
6070: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
6080: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
6090: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
60a0: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
60b0: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
60c0: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
60d0: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
60e0: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
60f0: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
6100: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
6110: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
6120: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
6130: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
6140: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
6150: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
6160: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
6170: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
6180: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
6190: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
61a0: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
61b0: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
61c0: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
61d0: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
61e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6200: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6210: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6220: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
6230: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
6240: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
6250: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
6260: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
6270: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
6280: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
6290: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
62a0: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
62b0: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
62c0: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
62d0: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
62e0: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
62f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6300: 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46  ump */.  CHECK_F
6310: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
6320: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
6330: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6340: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20   Opcode:  Gosub 
6350: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
6360: 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
6370: 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f  ent address onto
6380: 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
6390: 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  and then jump to
63a0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a   address P2..*/.
63b0: 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b  case OP_Gosub: {
63c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
63d0: 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
63e0: 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
63f0: 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
6400: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6410: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6420: 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ert( (pIn1->flag
6430: 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20  s & MEM_Dyn)==0 
6440: 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  );.  memAboutToC
6450: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
6460: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6470: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d  MEM_Int;.  pIn1-
6480: 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47  >u.i = pc;.  REG
6490: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
64a0: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63  >p1, pIn1);.  pc
64b0: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
64c0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
64d0: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
64e0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
64f0: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
6500: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
6510: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
6520: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
6530: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e  /.case OP_Return
6540: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
6550: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
6560: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6570: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
6580: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
6590: 20 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74 29   );.  pc = (int)
65a0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65  pIn1->u.i;.  bre
65b0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
65c0: 3a 20 20 59 69 65 6c 64 20 50 31 20 2a 20 2a 20  :  Yield P1 * * 
65d0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
65e0: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
65f0: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
6600: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
6610: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65  ..*/.case OP_Yie
6620: 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ld: {           
6630: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74   /* in1 */.  int
6640: 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20   pcDest;.  pIn1 
6650: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6660: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
6670: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  1->flags & MEM_D
6680: 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  yn)==0 );.  pIn1
6690: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
66a0: 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69  t;.  pcDest = (i
66b0: 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn1->u.i;.  
66c0: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
66d0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
66e0: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
66f0: 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a  .  pc = pcDest;.
6700: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6710: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
6720: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
6730: 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  *.**.** Check th
6740: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
6750: 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69  ter P3.  If it i
6760: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74  s NULL then Halt
6770: 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65   using.** parame
6780: 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20  ter P1, P2, and 
6790: 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65  P4 as if this we
67a0: 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75  re a Halt instru
67b0: 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a  ction.  If the.*
67c0: 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  * value in regis
67d0: 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55  ter P3 is not NU
67e0: 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  LL, then this ro
67f0: 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70  utine is a no-op
6800: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
6810: 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  tIfNull: {      
6820: 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33  /* in3 */.  pIn3
6830: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
6840: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  ];.  if( (pIn3->
6850: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
6860: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
6870: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
6880: 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a  into OP_Halt */.
6890: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  }../* Opcode:  H
68a0: 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 2a  alt P1 P2 * P4 *
68b0: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
68c0: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
68d0: 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20  en cursors, etc 
68e0: 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75  are closed.** au
68f0: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a  tomatically..**.
6900: 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73  ** P1 is the res
6910: 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ult code returne
6920: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65  d by sqlite3_exe
6930: 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73  c(), sqlite3_res
6940: 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69  et(),.** or sqli
6950: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20  te3_finalize(). 
6960: 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61   For a normal ha
6970: 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  lt, this should 
6980: 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29  be SQLITE_OK (0)
6990: 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c  ..** For errors,
69a0: 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20   it can be some 
69b0: 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66  other value.  If
69c0: 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77   P1!=0 then P2 w
69d0: 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a  ill determine.**
69e0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
69f0: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  to rollback the 
6a00: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
6a10: 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c  ion.  Do not rol
6a20: 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d  lback.** if P2==
6a30: 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20  OE_Fail. Do the 
6a40: 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d  rollback if P2==
6a50: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66  OE_Rollback.  If
6a60: 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a   P2==OE_Abort,.*
6a70: 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20  * then back out 
6a80: 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74  all changes that
6a90: 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64   have occurred d
6aa0: 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75  uring this execu
6ab0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56  tion of the.** V
6ac0: 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  DBE, but do not 
6ad0: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
6ae0: 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a  nsaction. .**.**
6af0: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75   If P4 is not nu
6b00: 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e  ll then it is an
6b10: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
6b20: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tring..**.** The
6b30: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
6b40: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
6b50: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
6b60: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
6b70: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
6b80: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
6b90: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
6ba0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
6bb0: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
6bc0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
6bd0: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
6be0: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
6bf0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
6c00: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e  SQLITE_OK && p->
6c10: 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a  pFrame ){.    /*
6c20: 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72   Halt the sub-pr
6c30: 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f  ogram. Return co
6c40: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72  ntrol to the par
6c50: 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20  ent frame. */.  
6c60: 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
6c70: 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
6c80: 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  .    p->pFrame =
6c90: 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
6ca0: 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d  ;.    p->nFrame-
6cb0: 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  -;.    sqlite3Vd
6cc0: 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
6cd0: 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
6ce0: 20 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56 64    pc = sqlite3Vd
6cf0: 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70  beFrameRestore(p
6d00: 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74  Frame);.    last
6d10: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
6d20: 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70  Rowid;.    if( p
6d30: 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p2==OE_Ignor
6d40: 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e  e ){.      /* In
6d50: 73 74 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20  struction pc is 
6d60: 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74  the OP_Program t
6d70: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20  hat invoked the 
6d80: 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20  sub-program .   
6d90: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20     ** currently 
6da0: 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66  being halted. If
6db0: 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74   the p2 instruct
6dc0: 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48  ion of this OP_H
6dd0: 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73  alt.      ** ins
6de0: 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20  truction is set 
6df0: 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68  to OE_Ignore, th
6e00: 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  en the sub-progr
6e10: 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20  am is throwing. 
6e20: 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52       ** an IGNOR
6e30: 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20  E exception. In 
6e40: 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74  this case jump t
6e50: 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70  o the address sp
6e60: 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a  ecified.      **
6e70: 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68   as the p2 of th
6e80: 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  e calling OP_Pro
6e90: 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  gram.  */.      
6ea0: 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e  pc = p->aOp[pc].
6eb0: 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2-1;.    }.    
6ec0: 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
6ed0: 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d    aMem = p->aMem
6ee0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
6ef0: 0a 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d  ..  p->rc = pOp-
6f00: 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41  >p1;.  p->errorA
6f10: 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d  ction = (u8)pOp-
6f20: 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  >p2;.  p->pc = p
6f30: 63 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  c;.  if( pOp->p4
6f40: 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  .z ){.    assert
6f50: 28 20 70 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f  ( p->rc!=SQLITE_
6f60: 4f 4b 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  OK );.    sqlite
6f70: 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
6f80: 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
6f90: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
6fa0: 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69    testcase( sqli
6fb0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
6fc0: 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20 73  xLog!=0 );.    s
6fd0: 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e  qlite3_log(pOp->
6fe0: 70 31 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64  p1, "abort at %d
6ff0: 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70   in [%s]: %s", p
7000: 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 4f 70 2d  c, p->zSql, pOp-
7010: 3e 70 34 2e 7a 29 3b 0a 20 20 7d 65 6c 73 65 20  >p4.z);.  }else 
7020: 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20  if( p->rc ){.   
7030: 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74   testcase( sqlit
7040: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
7050: 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71  Log!=0 );.    sq
7060: 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70  lite3_log(pOp->p
7070: 31 2c 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66  1, "constraint f
7080: 61 69 6c 65 64 20 61 74 20 25 64 20 69 6e 20 5b  ailed at %d in [
7090: 25 73 5d 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71  %s]", pc, p->zSq
70a0: 6c 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  l);.  }.  rc = s
70b0: 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
70c0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
70d0: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20  =SQLITE_BUSY || 
70e0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
70f0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f   rc==SQLITE_ERRO
7100: 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  R );.  if( rc==S
7110: 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
7120: 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
7130: 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
7140: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
7150: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7160: 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  | p->rc==SQLITE_
7170: 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20  CONSTRAINT );.  
7180: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
7190: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e  LITE_OK || db->n
71a0: 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 29  DeferredCons>0 )
71b0: 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63  ;.    rc = p->rc
71c0: 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20   ? SQLITE_ERROR 
71d0: 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  : SQLITE_DONE;. 
71e0: 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72   }.  goto vdbe_r
71f0: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
7200: 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20  ode: Integer P1 
7210: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
7220: 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65  he 32-bit intege
7230: 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72  r value P1 is wr
7240: 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73  itten into regis
7250: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7260: 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20  OP_Integer: {   
7270: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
7280: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
7290: 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70  ut->u.i = pOp->p
72a0: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
72b0: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20  * Opcode: Int64 
72c0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  * P2 * P4 *.**.*
72d0: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
72e0: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e  r to a 64-bit in
72f0: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20  teger value..** 
7300: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
7310: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7320: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
7330: 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20  t64: {          
7340: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
7350: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7360: 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30   pOp->p4.pI64!=0
7370: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
7380: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b  = *pOp->p4.pI64;
7390: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
73a0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
73b0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
73c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20  /* Opcode: Real 
73d0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  * P2 * P4 *.**.*
73e0: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
73f0: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c  r to a 64-bit fl
7400: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
7410: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
7420: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
7430: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7440: 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20  e OP_Real: {    
7450: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
7460: 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74  as TK_FLOAT, out
7470: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7480: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
7490: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65  MEM_Real;.  asse
74a0: 72 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61  rt( !sqlite3IsNa
74b0: 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  N(*pOp->p4.pReal
74c0: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d  ) );.  pOut->r =
74d0: 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b   *pOp->p4.pReal;
74e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
74f0: 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
7500: 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34  tring8 * P2 * P4
7510: 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e   *.**.** P4 poin
7520: 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d  ts to a nul term
7530: 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
7540: 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  ing. This opcode
7550: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
7560: 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53  .** into an OP_S
7570: 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20  tring before it 
7580: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
7590: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a  the first time..
75a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
75b0: 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  g8: {         /*
75c0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49   same as TK_STRI
75d0: 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  NG, out2-prerele
75e0: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
75f0: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7600: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
7610: 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f   OP_String;.  pO
7620: 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53  p->p1 = sqlite3S
7630: 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e  trlen30(pOp->p4.
7640: 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  z);..#ifndef SQL
7650: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
7660: 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53   if( encoding!=S
7670: 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20  QLITE_UTF8 ){.  
7680: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
7690: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
76a0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c  , pOp->p4.z, -1,
76b0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
76c0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
76d0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
76e0: 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74  _TOOBIG ) goto t
76f0: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20  oo_big;.    if( 
7700: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
7710: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
7720: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
7730: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
7740: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
7750: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70  pOut->zMalloc==p
7760: 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73  Out->z );.    as
7770: 73 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67  sert( pOut->flag
7780: 73 20 26 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20  s & MEM_Dyn );. 
7790: 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63     pOut->zMalloc
77a0: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
77b0: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
77c0: 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  tic;.    pOut->f
77d0: 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e  lags &= ~MEM_Dyn
77e0: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
77f0: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
7800: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
7810: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
7820: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
7830: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
7840: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
7850: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
7860: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
7870: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
7880: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
7890: 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74  p->p1>db->aLimit
78a0: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
78b0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
78c0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
78d0: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
78e0: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73   to the next cas
78f0: 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a  e, OP_String */.
7900: 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  }.  ./* Opcode: 
7910: 53 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50  String P1 P2 * P
7920: 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  4 *.**.** The st
7930: 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66  ring value P4 of
7940: 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65   length P1 (byte
7950: 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  s) is stored in 
7960: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
7970: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20  case OP_String: 
7980: 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
7990: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
79a0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
79b0: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75  p4.z!=0 );.  pOu
79c0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
79d0: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
79e0: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
79f0: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
7a00: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
7a10: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
7a20: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
7a30: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
7a40: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
7a50: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7a60: 4e 75 6c 6c 20 2a 20 50 32 20 50 33 20 2a 20 2a  Null * P2 P3 * *
7a70: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e  .**.** Write a N
7a80: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
7a90: 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72  rs P2.  If P3 gr
7aa0: 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74  eater than P2, t
7ab0: 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a  hen also write.*
7ac0: 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69  * NULL into regi
7ad0: 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72  ster P3 and ever
7ae0: 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74   register in bet
7af0: 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20  ween P2 and P3. 
7b00: 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73   If P3.** is les
7b10: 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63  s than P2 (typic
7b20: 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29  ally P3 is zero)
7b30: 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73   then only regis
7b40: 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74  ter P2 is.** set
7b50: 20 74 6f 20 4e 55 4c 4c 0a 2a 2f 0a 63 61 73 65   to NULL.*/.case
7b60: 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20   OP_Null: {     
7b70: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
7b80: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
7b90: 74 20 63 6e 74 3b 0a 20 20 63 6e 74 20 3d 20 70  t cnt;.  cnt = p
7ba0: 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a  Op->p3-pOp->p2;.
7bb0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7bc0: 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
7bd0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
7be0: 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28  M_Null;.  while(
7bf0: 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f   cnt>0 ){.    pO
7c00: 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  ut++;.    memAbo
7c10: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
7c20: 75 74 29 3b 0a 20 20 20 20 56 64 62 65 4d 65 6d  ut);.    VdbeMem
7c30: 52 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20  Release(pOut);. 
7c40: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
7c50: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 63   MEM_Null;.    c
7c60: 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  nt--;.  }.  brea
7c70: 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
7c80: 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50  : Blob P1 P2 * P
7c90: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  4.**.** P4 point
7ca0: 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64  s to a blob of d
7cb0: 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e  ata P1 bytes lon
7cc0: 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a  g.  Store this.*
7cd0: 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74  * blob in regist
7ce0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7cf0: 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20  P_Blob: {       
7d00: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7d10: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7d20: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
7d30: 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c   <= SQLITE_MAX_L
7d40: 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74  ENGTH );.  sqlit
7d50: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
7d60: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
7d70: 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b   pOp->p1, 0, 0);
7d80: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
7d90: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
7da0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
7db0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
7dc0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72  ../* Opcode: Var
7dd0: 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34  iable P1 P2 * P4
7de0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65   *.**.** Transfe
7df0: 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  r the values of 
7e00: 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20  bound parameter 
7e10: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
7e20: 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65   P2.**.** If the
7e30: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61   parameter is na
7e40: 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61  med, then its na
7e50: 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34  me appears in P4
7e60: 20 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20 54   and P3==1..** T
7e70: 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75  he P4 value is u
7e80: 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62  sed by sqlite3_b
7e90: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
7ea0: 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  me()..*/.case OP
7eb0: 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20  _Variable: {    
7ec0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7ed0: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7ee0: 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20  Mem *pVar;      
7ef0: 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20   /* Value being 
7f00: 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a  transferred */..
7f10: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7f20: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
7f30: 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73  p->nVar );.  ass
7f40: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d  ert( pOp->p4.z==
7f50: 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d  0 || pOp->p4.z==
7f60: 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31  p->azVar[pOp->p1
7f70: 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20  -1] );.  pVar = 
7f80: 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31  &p->aVar[pOp->p1
7f90: 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c   - 1];.  if( sql
7fa0: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
7fb0: 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67  g(pVar) ){.    g
7fc0: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
7fd0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
7fe0: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
7ff0: 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61  t, pVar, MEM_Sta
8000: 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  tic);.  UPDATE_M
8010: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
8020: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
8030: 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50  * Opcode: Move P
8040: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
8050: 2a 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65  * Move the value
8060: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
8070: 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69  ..P1+P3-1 over i
8080: 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73  nto.** registers
8090: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52   P2..P2+P3-1.  R
80a0: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
80b0: 50 31 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74  P1-1 are.** left
80c0: 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e   holding a NULL.
80d0: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
80e0: 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61   for register ra
80f0: 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50  nges.** P1..P1+P
8100: 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50  3-1 and P2..P2+P
8110: 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a  3-1 to overlap..
8120: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a  */.case OP_Move:
8130: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c   {.  char *zMall
8140: 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67  oc;   /* Holding
8150: 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c   variable for al
8160: 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a  located memory *
8170: 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  /.  int n;      
8180: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8190: 66 20 72 65 67 69 73 74 65 72 73 20 6c 65 66 74  f registers left
81a0: 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e   to copy */.  in
81b0: 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f  t p1;          /
81c0: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f  * Register to co
81d0: 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74  py from */.  int
81e0: 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p2;          /*
81f0: 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70   Register to cop
8200: 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70  y to */..  n = p
8210: 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70  Op->p3;.  p1 = p
8220: 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
8230: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
8240: 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26  ( n>0 && p1>0 &&
8250: 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72   p2>0 );.  asser
8260: 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70  t( p1+n<=p2 || p
8270: 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49  2+n<=p1 );..  pI
8280: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a  n1 = &aMem[p1];.
8290: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
82a0: 32 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d  2];.  while( n--
82b0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
82c0: 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e  pOut<=&aMem[p->n
82d0: 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  Mem] );.    asse
82e0: 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b  rt( pIn1<=&aMem[
82f0: 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20  p->nMem] );.    
8300: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
8310: 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20  id(pIn1) );.    
8320: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
8330: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 7a  (p, pOut);.    z
8340: 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a  Malloc = pOut->z
8350: 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74  Malloc;.    pOut
8360: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  ->zMalloc = 0;. 
8370: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
8380: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31  mMove(pOut, pIn1
8390: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
83a0: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
83b0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e  Out->pScopyFrom>
83c0: 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f  =&aMem[p1] && pO
83d0: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 26  ut->pScopyFrom<&
83e0: 61 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d  aMem[p1+pOp->p3]
83f0: 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e   ){.      pOut->
8400: 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 31  pScopyFrom += p1
8410: 20 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 20 20   - pOp->p2;.    
8420: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49 6e  }.#endif.    pIn
8430: 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61  1->zMalloc = zMa
8440: 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54  lloc;.    REGIST
8450: 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70  ER_TRACE(p2++, p
8460: 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  Out);.    pIn1++
8470: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
8480: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
8490: 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31   Opcode: Copy P1
84a0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
84b0: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72  Make a copy of r
84c0: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
84d0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
84e0: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
84f0: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70  ion makes a deep
8500: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
8510: 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65  ue.  A duplicate
8520: 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61  .** is made of a
8530: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
8540: 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65  b constant.  See
8550: 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a   also OP_SCopy..
8560: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a  */.case OP_Copy:
8570: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
8580: 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  * in1, out2 */. 
8590: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
85a0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
85b0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
85c0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
85d0: 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74  =pIn1 );.  sqlit
85e0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
85f0: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
8600: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 44   MEM_Ephem);.  D
8610: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
8620: 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ut);.  REGISTER_
8630: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
8640: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
8650: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f  ../* Opcode: SCo
8660: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
8670: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c  *.** Make a shal
8680: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69  low copy of regi
8690: 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  ster P1 into reg
86a0: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
86b0: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
86c0: 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77   makes a shallow
86d0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
86e0: 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ue.  If the valu
86f0: 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67  e.** is a string
8700: 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74   or blob, then t
8710: 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20  he copy is only 
8720: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
8730: 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64  .** original and
8740: 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72   hence if the or
8750: 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73  iginal changes s
8760: 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e  o will the copy.
8770: 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68  .** Worse, if th
8780: 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65  e original is de
8790: 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63  allocated, the c
87a0: 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61  opy becomes inva
87b0: 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65  lid..** Thus the
87c0: 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75   program must gu
87d0: 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65  arantee that the
87e0: 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e   original will n
87f0: 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72  ot change.** dur
8800: 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65  ing the lifetime
8810: 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55   of the copy.  U
8820: 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61  se OP_Copy to ma
8830: 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a  ke a complete.**
8840: 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f   copy..*/.case O
8850: 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  P_SCopy: {      
8860: 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75        /* in1, ou
8870: 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
8880: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
8890: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
88a0: 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
88b0: 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a  ( pOut!=pIn1 );.
88c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
88d0: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
88e0: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
88f0: 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  m);.#ifdef SQLIT
8900: 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
8910: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d  ut->pScopyFrom==
8920: 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  0 ) pOut->pScopy
8930: 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e  From = pIn1;.#en
8940: 64 69 66 0a 20 20 52 45 47 49 53 54 45 52 5f 54  dif.  REGISTER_T
8950: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
8960: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
8970: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75  ./* Opcode: Resu
8980: 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20  ltRow P1 P2 * * 
8990: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  *.**.** The regi
89a0: 73 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68  sters P1 through
89b0: 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e   P1+P2-1 contain
89c0: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
89d0: 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69  .** results. Thi
89e0: 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20  s opcode causes 
89f0: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  the sqlite3_step
8a00: 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69  () call to termi
8a10: 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20  nate.** with an 
8a20: 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72  SQLITE_ROW retur
8a30: 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65  n code and it se
8a40: 74 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65  ts up the sqlite
8a50: 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74  3_stmt.** struct
8a60: 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61  ure to provide a
8a70: 63 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70  ccess to the top
8a80: 20 50 31 20 76 61 6c 75 65 73 20 61 73 20 74 68   P1 values as th
8a90: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e  e result.** row.
8aa0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75  .*/.case OP_Resu
8ab0: 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a  ltRow: {.  Mem *
8ac0: 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  pMem;.  int i;. 
8ad0: 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73   assert( p->nRes
8ae0: 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20  Column==pOp->p2 
8af0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
8b00: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p1>0 );.  asse
8b10: 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  rt( pOp->p1+pOp-
8b20: 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29  >p2<=p->nMem+1 )
8b30: 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  ;..  /* If this 
8b40: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69  statement has vi
8b50: 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65  olated immediate
8b60: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
8b70: 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a  straints, do.  *
8b80: 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65  * not return the
8b90: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
8ba0: 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f  modified. And do
8bb0: 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65   not RELEASE the
8bc0: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20   statement.  ** 
8bd0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20  transaction. It 
8be0: 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
8bf0: 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69  ed back.  */.  i
8c00: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72  f( SQLITE_OK!=(r
8c10: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
8c20: 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b  heckFk(p, 0)) ){
8c30: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
8c40: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
8c50: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61  untRows );.    a
8c60: 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74  ssert( p->usesSt
8c70: 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20  mtJournal );.   
8c80: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
8c90: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
8ca0: 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69  CountRows flag i
8cb0: 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33  s set in sqlite3
8cc0: 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
8cd0: 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74  n .  ** DML stat
8ce0: 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68  ements invoke th
8cf0: 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74  is opcode to ret
8d00: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
8d10: 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64  f rows .  ** mod
8d20: 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65  ified to the use
8d30: 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  r. This is the o
8d40: 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56  nly way that a V
8d50: 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e  M that.  ** open
8d60: 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  s a statement tr
8d70: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e  ansaction may in
8d80: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
8d90: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63  ..  **.  ** In c
8da0: 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68  ase this is such
8db0: 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c   a statement, cl
8dc0: 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  ose any statemen
8dd0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  t transaction.  
8de0: 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69  ** opened by thi
8df0: 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75  s VM before retu
8e00: 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f  rning control to
8e10: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
8e20: 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72  is to.  ** ensur
8e30: 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74  e that statement
8e40: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72  -transactions ar
8e50: 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c  e always nested,
8e60: 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67   not overlapping
8e70: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70  ..  ** If the op
8e80: 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  en statement-tra
8e90: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
8ea0: 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65  closed here, the
8eb0: 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20  n the user.  ** 
8ec0: 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72  may step another
8ed0: 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69   VM that opens i
8ee0: 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74  ts own statement
8ef0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68   transaction. Th
8f00: 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64  is.  ** may lead
8f10: 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20   to overlapping 
8f20: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
8f30: 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ctions..  **.  *
8f40: 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  * The statement 
8f50: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
8f60: 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c  ever a top-level
8f70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48   transaction.  H
8f80: 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45  ence.  ** the RE
8f90: 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77  LEASE call below
8fa0: 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
8fb0: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
8fc0: 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
8fd0: 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51   || db->flags&SQ
8fe0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
8ff0: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
9000: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
9010: 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f  nt(p, SAVEPOINT_
9020: 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20  RELEASE);.  if( 
9030: 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
9040: 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61  _OK) ){.    brea
9050: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76  k;.  }..  /* Inv
9060: 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65  alidate all ephe
9070: 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77  meral cursor row
9080: 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e   caches */.  p->
9090: 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63  cacheCtr = (p->c
90a0: 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a  acheCtr + 2)|1;.
90b0: 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
90c0: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
90d0: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61  he current row a
90e0: 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74  re \000 terminat
90f0: 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65  ed.  ** and have
9100: 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70   an assigned typ
9110: 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20  e.  The results 
9120: 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c  are de-ephemeral
9130: 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73  ized as.  ** a s
9140: 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f  ide effect..  */
9150: 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65  .  pMem = p->pRe
9160: 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b  sultSet = &aMem[
9170: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
9180: 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20  i=0; i<pOp->p2; 
9190: 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
91a0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d  ( memIsValid(&pM
91b0: 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65  em[i]) );.    De
91c0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d  ephemeralize(&pM
91d0: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65  em[i]);.    asse
91e0: 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61  rt( (pMem[i].fla
91f0: 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d  gs & MEM_Ephem)=
9200: 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c  =0.            |
9210: 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73  | (pMem[i].flags
9220: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
9230: 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20  Blob))==0 );.   
9240: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
9250: 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65  ulTerminate(&pMe
9260: 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74  m[i]);.    sqlit
9270: 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
9280: 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  pe(&pMem[i]);.  
9290: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
92a0: 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65  (pOp->p1+i, &pMe
92b0: 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28  m[i]);.  }.  if(
92c0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
92d0: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
92e0: 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51  ..  /* Return SQ
92f0: 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20  LITE_ROW.  */.  
9300: 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a  p->pc = pc + 1;.
9310: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f    rc = SQLITE_RO
9320: 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  W;.  goto vdbe_r
9330: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
9340: 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50  ode: Concat P1 P
9350: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 P3 * *.**.** A
9360: 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72  dd the text in r
9370: 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20  egister P1 onto 
9380: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
9390: 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ext in.** regist
93a0: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
93b0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
93c0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
93d0: 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f   either the P1 o
93e0: 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55  r P2 text are NU
93f0: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55  LL then store NU
9400: 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  LL in P3..**.** 
9410: 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a    P3 = P2 || P1.
9420: 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
9430: 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50  gal for P1 and P
9440: 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65  3 to be the same
9450: 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74   register. Somet
9460: 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69  imes,.** if P3 i
9470: 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  s the same regis
9480: 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69  ter as P2, the i
9490: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
94a0: 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   able.** to avoi
94b0: 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f  d a memcpy()..*/
94c0: 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a  .case OP_Concat:
94d0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
94e0: 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41  same as TK_CONCA
94f0: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
9500: 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  3 */.  i64 nByte
9510: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
9520: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
9530: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
9540: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
9550: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
9560: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f  assert( pIn1!=pO
9570: 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ut );.  if( (pIn
9580: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
9590: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
95a0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
95b0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
95c0: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
95d0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61  ;.  }.  if( Expa
95e0: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20  ndBlob(pIn1) || 
95f0: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
9600: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
9610: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31    Stringify(pIn1
9620: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53  , encoding);.  S
9630: 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65  tringify(pIn2, e
9640: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74  ncoding);.  nByt
9650: 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49  e = pIn1->n + pI
9660: 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79  n2->n;.  if( nBy
9670: 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
9680: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
9690: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
96a0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65  oo_big;.  }.  Me
96b0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
96c0: 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69  t, MEM_Str);.  i
96d0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
96e0: 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74  mGrow(pOut, (int
96f0: 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d  )nByte+2, pOut==
9700: 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74  pIn2) ){.    got
9710: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
9720: 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29  if( pOut!=pIn2 )
9730: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  {.    memcpy(pOu
9740: 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70  t->z, pIn2->z, p
9750: 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d  In2->n);.  }.  m
9760: 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70  emcpy(&pOut->z[p
9770: 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a  In2->n], pIn1->z
9780: 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f  , pIn1->n);.  pO
9790: 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30  ut->z[nByte] = 0
97a0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
97b0: 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74  e+1] = 0;.  pOut
97c0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
97d0: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  erm;.  pOut->n =
97e0: 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
97f0: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
9800: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
9810: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
9820: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9830: 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20   Opcode: Add P1 
9840: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
9850: 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  Add the value in
9860: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
9870: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9880: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
9890: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
98a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
98b0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
98c0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
98d0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
98e0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .*/./* Opcode: M
98f0: 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33  ultiply P1 P2 P3
9900: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75   * *.**.**.** Mu
9910: 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65  ltiply the value
9920: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
9930: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
9940: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
9950: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9960: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9970: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
9980: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
9990: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
99a0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
99b0: 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32  : Subtract P1 P2
99c0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75   P3 * *.**.** Su
99d0: 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  btract the value
99e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
99f0: 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69  from the value i
9a00: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9a10: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9a20: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9a30: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
9a40: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
9a50: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
9a60: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
9a70: 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32  de: Divide P1 P2
9a80: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69   P3 * *.**.** Di
9a90: 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69  vide the value i
9aa0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
9ab0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
9ac0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
9ad0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
9ae0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
9af0: 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20   (P3=P2/P1). If 
9b00: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a  the value in .**
9b10: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
9b20: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72  zero, then the r
9b30: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49  esult is NULL. I
9b40: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
9b50: 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20  s .** NULL, the 
9b60: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9b70: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  */./* Opcode: Re
9b80: 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33  mainder P1 P2 P3
9b90: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75   * *.**.** Compu
9ba0: 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  te the remainder
9bb0: 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 64   after integer d
9bc0: 69 76 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 76  ivision of the v
9bd0: 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  alue in.** regis
9be0: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
9bf0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9c00: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
9c10: 20 72 65 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a   result in P3. .
9c20: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
9c30: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 69  in register P2 i
9c40: 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c  s zero the resul
9c50: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  t is NULL..** If
9c60: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
9c70: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
9c80: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
9c90: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9cb0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55  * same as TK_PLU
9cc0: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
9cd0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62  3 */.case OP_Sub
9ce0: 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20  tract:          
9cf0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9d00: 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e  K_MINUS, in1, in
9d10: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
9d20: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
9d30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9d40: 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e  e as TK_STAR, in
9d50: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
9d60: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9d80: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41  * same as TK_SLA
9d90: 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  SH, in1, in2, ou
9da0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  t3 */.case OP_Re
9db0: 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20  mainder: {      
9dc0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
9dd0: 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32  TK_REM, in1, in2
9de0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20  , out3 */.  int 
9df0: 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43  flags;      /* C
9e00: 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c  ombined MEM_* fl
9e10: 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e  ags from both in
9e20: 70 75 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41  puts */.  i64 iA
9e30: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
9e40: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65  eger value of le
9e50: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
9e60: 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20  i64 iB;         
9e70: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
9e80: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
9e90: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41  d */.  double rA
9ea0: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
9eb0: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
9ec0: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
9ed0: 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rB;      /* Rea
9ee0: 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  l value of right
9ef0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70   operand */..  p
9f00: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
9f10: 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d  >p1];.  applyNum
9f20: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
9f30: 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
9f40: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
9f50: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
9f60: 69 74 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75  ity(pIn2);.  pOu
9f70: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
9f80: 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49  3];.  flags = pI
9f90: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
9fa0: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
9fb0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
9fc0: 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  )!=0 ) goto arit
9fd0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9fe0: 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49  _null;.  if( (pI
9ff0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32  n1->flags & pIn2
a000: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
a010: 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  t)==MEM_Int ){. 
a020: 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e     iA = pIn1->u.
a030: 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32  i;.    iB = pIn2
a040: 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69 74 63  ->u.i;.    switc
a050: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
a060: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
a070: 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73  Add:       if( s
a080: 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
a090: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
a0a0: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
a0b0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
a0c0: 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69  tract:  if( sqli
a0d0: 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c  te3SubInt64(&iB,
a0e0: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
a0f0: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
a100: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
a110: 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ly:  if( sqlite3
a120: 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29  MulInt64(&iB,iA)
a130: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
a140: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
a150: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
a160: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
a170: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
a180: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a190: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
a1a0: 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53   iA==-1 && iB==S
a1b0: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20  MALLEST_INT64 ) 
a1c0: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20  goto fp_math;.  
a1d0: 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a        iB /= iA;.
a1e0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
a1f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
a200: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
a210: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
a220: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
a230: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
a240: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
a250: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
a260: 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20   iB %= iA;.     
a270: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a280: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
a290: 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20  ->u.i = iB;.    
a2a0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
a2b0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
a2c0: 20 7d 65 6c 73 65 7b 0a 66 70 5f 6d 61 74 68 3a   }else{.fp_math:
a2d0: 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65  .    rA = sqlite
a2e0: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
a2f0: 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73  In1);.    rB = s
a300: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
a310: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73  lue(pIn2);.    s
a320: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
a330: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
a340: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
a350: 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20   rB += rA;      
a360: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a370: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
a380: 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20     rB -= rA;    
a390: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a3a0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
a3b0: 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20  :    rB *= rA;  
a3c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a3d0: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
a3e0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28  : {.        /* (
a3f0: 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65  double)0 In case
a400: 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   of SQLITE_OMIT_
a410: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e  FLOATING_POINT..
a420: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
a430: 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29   rA==(double)0 )
a440: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
a450: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
a460: 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72  .        rB /= r
a470: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
a480: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
a490: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
a4a0: 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b     iA = (i64)rA;
a4b0: 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69  .        iB = (i
a4c0: 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69  64)rB;.        i
a4d0: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
a4e0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a4f0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
a500: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
a510: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
a520: 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42  rB = (double)(iB
a530: 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20   % iA);.        
a540: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
a550: 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49     }.#ifdef SQLI
a560: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
a570: 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d  _POINT.    pOut-
a580: 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d  >u.i = rB;.    M
a590: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a5a0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65  ut, MEM_Int);.#e
a5b0: 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69  lse.    if( sqli
a5c0: 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a  te3IsNaN(rB) ){.
a5d0: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
a5e0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
a5f0: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
a600: 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20  pOut->r = rB;.  
a610: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
a620: 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29  (pOut, MEM_Real)
a630: 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73  ;.    if( (flags
a640: 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
a650: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
a660: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
a670: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
a680: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
a690: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
a6a0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
a6b0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
a6c0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
a6d0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a6e0: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a  pcode: CollSeq *
a6f0: 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69   * P4.**.** P4 i
a700: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
a710: 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e   CollSeq struct.
a720: 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c   If the next cal
a730: 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63  l to a user func
a740: 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65  tion.** or aggre
a750: 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74  gate calls sqlit
a760: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
a770: 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69  (), this collati
a780: 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c  on sequence will
a790: 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e  .** be returned.
a7a0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
a7b0: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69   the built-in mi
a7c0: 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e  n(), max() and n
a7d0: 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74  ullif().** funct
a7e0: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ions..**.** The 
a7f0: 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62  interface used b
a800: 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
a810: 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72  tion of the afor
a820: 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74  ementioned funct
a830: 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69  ions.** to retri
a840: 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  eve the collatio
a850: 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  n sequence set b
a860: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
a870: 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a   not available.*
a880: 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79  * publicly, only
a890: 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
a8a0: 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75  ns defined in fu
a8b0: 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nc.c..*/.case OP
a8c0: 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73  _CollSeq: {.  as
a8d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
a8e0: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
a8f0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a900: 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e  Opcode: Function
a910: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
a920: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
a930: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
a940: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
a950: 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75   a Function stru
a960: 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65  cture that.** de
a970: 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69  fines the functi
a980: 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75  on) with P5 argu
a990: 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d  ments taken from
a9a0: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
a9b0: 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20  .** successors. 
a9c0: 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   The result of t
a9d0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73  he function is s
a9e0: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
a9f0: 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65  r P3..** Registe
aa00: 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65  r P3 must not be
aa10: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63   one of the func
aa20: 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a  tion inputs..**.
aa30: 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69  ** P1 is a 32-bi
aa40: 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61  t bitmask indica
aa50: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
aa60: 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e  not each argumen
aa70: 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e  t to the .** fun
aa80: 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d  ction was determ
aa90: 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74  ined to be const
aaa0: 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74  ant at compile t
aab0: 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73  ime. If the firs
aac0: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61  t.** argument wa
aad0: 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20  s constant then 
aae0: 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73  bit 0 of P1 is s
aaf0: 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
ab00: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a   to determine.**
ab10: 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61   whether meta da
ab20: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
ab30: 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  th a user functi
ab40: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e  on argument usin
ab50: 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  g the.** sqlite3
ab60: 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41  _set_auxdata() A
ab70: 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79  PI may be safely
ab80: 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20   retained until 
ab90: 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f  the next.** invo
aba0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f  cation of this o
abb0: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
abc0: 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61   also: AggStep a
abd0: 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63  nd AggFinal.*/.c
abe0: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a  ase OP_Function:
abf0: 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65   {.  int i;.  Me
ac00: 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74  m *pArg;.  sqlit
ac10: 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
ac20: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
ac30: 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e  **apVal;.  int n
ac40: 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35  ;..  n = pOp->p5
ac50: 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61  ;.  apVal = p->a
ac60: 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20  pArg;.  assert( 
ac70: 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b  apVal || n==0 );
ac80: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
ac90: 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
aca0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f  =p->nMem );.  pO
acb0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
acc0: 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
acd0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
ace0: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d  ;..  assert( n==
acf0: 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20  0 || (pOp->p2>0 
ad00: 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d  && pOp->p2+n<=p-
ad10: 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73  >nMem+1) );.  as
ad20: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
ad30: 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p2 || pOp->p3
ad40: 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20  >=pOp->p2+n );. 
ad50: 20 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f   pArg = &aMem[pO
ad60: 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d  p->p2];.  for(i=
ad70: 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72  0; i<n; i++, pAr
ad80: 67 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  g++){.    assert
ad90: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72  ( memIsValid(pAr
ada0: 67 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b  g) );.    apVal[
adb0: 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44  i] = pArg;.    D
adc0: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41  eephemeralize(pA
add0: 72 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  rg);.    sqlite3
ade0: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
adf0: 28 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47 49  (pArg);.    REGI
ae00: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
ae10: 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d  p2+i, pArg);.  }
ae20: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
ae30: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
ae40: 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  DEF || pOp->p4ty
ae50: 70 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43 20  pe==P4_VDBEFUNC 
ae60: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  );.  if( pOp->p4
ae70: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
ae80: 20 29 7b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e   ){.    ctx.pFun
ae90: 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
aea0: 63 3b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65  c;.    ctx.pVdbe
aeb0: 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  Func = 0;.  }els
aec0: 65 7b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65  e{.    ctx.pVdbe
aed0: 46 75 6e 63 20 3d 20 28 56 64 62 65 46 75 6e 63  Func = (VdbeFunc
aee0: 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46  *)pOp->p4.pVdbeF
aef0: 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 46 75  unc;.    ctx.pFu
af00: 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75  nc = ctx.pVdbeFu
af10: 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a  nc->pFunc;.  }..
af20: 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20    ctx.s.flags = 
af30: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e  MEM_Null;.  ctx.
af40: 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78  s.db = db;.  ctx
af50: 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63  .s.xDel = 0;.  c
af60: 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  tx.s.zMalloc = 0
af70: 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70  ;..  /* The outp
af80: 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65  ut cell may alre
af90: 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65  ady have a buffe
afa0: 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76  r allocated. Mov
afb0: 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74  e.  ** the point
afc0: 65 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69  er to ctx.s so i
afd0: 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d  n case the user-
afe0: 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65  function can use
aff0: 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64  .  ** the alread
b000: 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  y allocated buff
b010: 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c  er instead of al
b020: 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f  locating a new o
b030: 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74  ne..  */.  sqlit
b040: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63  e3VdbeMemMove(&c
b050: 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d  tx.s, pOut);.  M
b060: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63  emSetTypeFlag(&c
b070: 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  tx.s, MEM_Null);
b080: 0a 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20  ..  ctx.isError 
b090: 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70  = 0;.  if( ctx.p
b0a0: 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51  Func->flags & SQ
b0b0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
b0c0: 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  LL ){.    assert
b0d0: 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20  ( pOp>aOp );.   
b0e0: 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
b0f0: 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  .p4type==P4_COLL
b100: 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72  SEQ );.    asser
b110: 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
b120: 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b  e==OP_CollSeq );
b130: 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d  .    ctx.pColl =
b140: 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c   pOp[-1].p4.pCol
b150: 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c 61 73  l;.  }.  db->las
b160: 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
b170: 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e  id;.  (*ctx.pFun
b180: 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20  c->xFunc)(&ctx, 
b190: 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d  n, apVal); /* IM
b1a0: 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30  P: R-24505-23230
b1b0: 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64 20   */.  lastRowid 
b1c0: 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
b1d0: 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 61 75  ..  /* If any au
b1e0: 78 69 6c 69 61 72 79 20 64 61 74 61 20 66 75 6e  xiliary data fun
b1f0: 63 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e  ctions have been
b200: 20 63 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20   called by this 
b210: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20  user function,. 
b220: 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
b230: 63 61 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63  call the destruc
b240: 74 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d  tor for any non-
b250: 73 74 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20  static values.. 
b260: 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56   */.  if( ctx.pV
b270: 64 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73  dbeFunc ){.    s
b280: 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
b290: 41 75 78 44 61 74 61 28 63 74 78 2e 70 56 64 62  AuxData(ctx.pVdb
b2a0: 65 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b  eFunc, pOp->p1);
b2b0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64  .    pOp->p4.pVd
b2c0: 62 65 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64  beFunc = ctx.pVd
b2d0: 62 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d  beFunc;.    pOp-
b2e0: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 56 44 42  >p4type = P4_VDB
b2f0: 45 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 69 66  EFUNC;.  }..  if
b300: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
b310: 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65  ed ){.    /* Eve
b320: 6e 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f  n though a mallo
b330: 63 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20  c() has failed, 
b340: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
b350: 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a  on of the.    **
b360: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d   user function m
b370: 61 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61  ay have called a
b380: 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  n sqlite3_result
b390: 5f 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a  _XXX() function.
b3a0: 20 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e      ** to return
b3b0: 20 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f   a value. The fo
b3c0: 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c  llowing call rel
b3d0: 65 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72  eases any resour
b3e0: 63 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63  ces.    ** assoc
b3f0: 69 61 74 65 64 20 77 69 74 68 20 73 75 63 68 20  iated with such 
b400: 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  a value..    */.
b410: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
b420: 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73  emRelease(&ctx.s
b430: 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  );.    goto no_m
b440: 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  em;.  }..  /* If
b450: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65   the function re
b460: 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c  turned an error,
b470: 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74   throw an except
b480: 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78  ion */.  if( ctx
b490: 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
b4a0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
b4b0: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
b4c0: 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
b4d0: 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e  value_text(&ctx.
b4e0: 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74  s));.    rc = ct
b4f0: 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a  x.isError;.  }..
b500: 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65    /* Copy the re
b510: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
b520: 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tion into regist
b530: 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74  er P3 */.  sqlit
b540: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
b550: 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63  ding(&ctx.s, enc
b560: 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65  oding);.  sqlite
b570: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75  3VdbeMemMove(pOu
b580: 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69 66  t, &ctx.s);.  if
b590: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
b5a0: 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a  TooBig(pOut) ){.
b5b0: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
b5c0: 3b 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f  ;.  }..#if 0.  /
b5d0: 2a 20 54 68 65 20 61 70 70 2d 64 65 66 69 6e 65  * The app-define
b5e0: 64 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 64  d function has d
b5f0: 6f 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  one something th
b600: 61 74 20 61 73 20 63 61 75 73 65 64 20 74 68 69  at as caused thi
b610: 73 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74  s.  ** statement
b620: 20 74 6f 20 65 78 70 69 72 65 2e 20 20 28 50 65   to expire.  (Pe
b630: 72 68 61 70 73 20 74 68 65 20 66 75 6e 63 74 69  rhaps the functi
b640: 6f 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69 74 65  on called sqlite
b650: 33 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20 77 69  3_exec().  ** wi
b660: 74 68 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  th a CREATE TABL
b670: 45 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20  E statement.).  
b680: 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69  */.  if( p->expi
b690: 72 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54  red ) rc = SQLIT
b6a0: 45 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a  E_ABORT;.#endif.
b6b0: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
b6c0: 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
b6d0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
b6e0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
b6f0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
b700: 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20  code: BitAnd P1 
b710: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
b720: 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73  Take the bit-wis
b730: 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c  e AND of the val
b740: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
b750: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
b760: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b770: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b780: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b790: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b7a0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b7b0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b7c0: 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a  BitOr P1 P2 P3 *
b7d0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68   *.**.** Take th
b7e0: 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66  e bit-wise OR of
b7f0: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
b800: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
b810: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
b820: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b830: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b840: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b850: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b860: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
b870: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66  Opcode: ShiftLef
b880: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
b890: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
b8a0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
b8b0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
b8c0: 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a  he left by the.*
b8d0: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
b8e0: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
b8f0: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
b900: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
b910: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b920: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b930: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b940: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b950: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b960: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
b970: 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20  tRight P1 P2 P3 
b980: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  * *.**.** Shift 
b990: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
b9a0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b9b0: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
b9c0: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
b9d0: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
b9e0: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
b9f0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
ba00: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
ba10: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
ba20: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
ba30: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
ba40: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
ba50: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
ba60: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
ba70: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ba80: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
ba90: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
baa0: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bac0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
bad0: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
bae0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
baf0: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
bb00: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
bb10: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
bb20: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
bb30: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
bb40: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
bb50: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
bb60: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
bb70: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
bb80: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
bb90: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
bba0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
bbb0: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
bbc0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
bbd0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
bbe0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
bbf0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
bc00: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
bc10: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
bc20: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
bc30: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
bc40: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
bc50: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
bc60: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
bc70: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
bc80: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
bc90: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
bca0: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
bcb0: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
bcc0: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
bcd0: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
bce0: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
bcf0: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
bd00: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
bd10: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
bd20: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
bd30: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
bd40: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
bd50: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
bd60: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
bd70: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
bd80: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
bd90: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
bda0: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
bdb0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
bdc0: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
bdd0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
bde0: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
bdf0: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
be00: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
be10: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
be20: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
be30: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
be40: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
be50: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
be60: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
be70: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
be80: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
be90: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
bea0: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
beb0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
bec0: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
bed0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
bee0: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
bef0: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
bf00: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
bf10: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
bf20: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
bf30: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
bf40: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
bf50: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
bf60: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
bf70: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
bf80: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
bf90: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
bfa0: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
bfb0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
bfc0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
bfd0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
bfe0: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
bff0: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
c000: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
c010: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c020: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
c030: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
c040: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
c050: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
c060: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
c070: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
c080: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
c090: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
c0a0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
c0b0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
c0c0: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
c0d0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
c0e0: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
c0f0: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
c100: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
c110: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
c120: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
c130: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
c140: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
c150: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
c160: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c170: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
c180: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
c190: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
c1a0: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
c1b0: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
c1c0: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
c1d0: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
c1e0: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
c1f0: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
c200: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
c210: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
c220: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
c230: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
c240: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
c250: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
c260: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
c270: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
c280: 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66  ->p1];.  applyAf
c290: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
c2a0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
c2b0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66   encoding);.  if
c2c0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
c2d0: 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
c2e0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
c2f0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
c300: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
c310: 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
c320: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
c330: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
c340: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
c350: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
c360: 65 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  e{.    MemSetTyp
c370: 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f  eFlag(pIn1, MEM_
c380: 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
c390: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
c3a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
c3b0: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
c3c0: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
c3d0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
c3e0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
c3f0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
c400: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
c410: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
c420: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
c430: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
c440: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
c450: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
c460: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
c470: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
c480: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
c490: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
c4a0: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
c4b0: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
c4c0: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
c4d0: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
c4e0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
c4f0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
c500: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
c510: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
c520: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
c530: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
c540: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
c550: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
c560: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c570: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
c580: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
c590: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
c5a0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
c5b0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
c5c0: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
c5d0: 6f 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a  ode: ToText P1 *
c5e0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c5f0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c600: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c610: 65 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68  e text..** If th
c620: 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72  e value is numer
c630: 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ic, convert it t
c640: 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67  o a string using
c650: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
c660: 6e 74 20 6f 66 20 70 72 69 6e 74 66 28 29 2e 20  nt of printf(). 
c670: 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65   Blob values are
c680: 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a   unchanged and.*
c690: 2a 20 61 72 65 20 61 66 74 65 72 77 61 72 64 73  * are afterwards
c6a0: 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65   simply interpre
c6b0: 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a  ted as text..**.
c6c0: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
c6d0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
c6e0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
c6f0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
c700: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54  ..*/.case OP_ToT
c710: 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ext: {          
c720: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c730: 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69  as TK_TO_TEXT, i
c740: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
c750: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
c760: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
c770: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66  e(p, pIn1);.  if
c780: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
c790: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
c7a0: 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f  ;.  assert( MEM_
c7b0: 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e  Str==(MEM_Blob>>
c7c0: 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  3) );.  pIn1->fl
c7d0: 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c  ags |= (pIn1->fl
c7e0: 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33  ags&MEM_Blob)>>3
c7f0: 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  ;.  applyAffinit
c800: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
c810: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
c820: 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  g);.  rc = Expan
c830: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61  dBlob(pIn1);.  a
c840: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
c850: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
c860: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
c870: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
c880: 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d  s &= ~(MEM_Int|M
c890: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62  EM_Real|MEM_Blob
c8a0: 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50  |MEM_Zero);.  UP
c8b0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
c8c0: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
c8d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c8e0: 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20  ToBlob P1 * * * 
c8f0: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
c900: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c910: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42  ter P1 to be a B
c920: 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  LOB..** If the v
c930: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
c940: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c950: 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a   string first..*
c960: 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69  * Strings are si
c970: 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74  mply reinterpret
c980: 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68  ed as blobs with
c990: 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f   no change.** to
c9a0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
c9b0: 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  data..**.** A NU
c9c0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
c9d0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
c9e0: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
c9f0: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
ca00: 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20  se OP_ToBlob: { 
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
ca30: 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20  O_BLOB, in1 */. 
ca40: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
ca50: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
ca60: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
ca70: 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20  Null ) break;.  
ca80: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
ca90: 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20   & MEM_Blob)==0 
caa0: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
cab0: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
cac0: 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f  E_AFF_TEXT, enco
cad0: 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72  ding);.    asser
cae0: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
caf0: 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e   MEM_Str || db->
cb00: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
cb10: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
cb20: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f  ag(pIn1, MEM_Blo
cb30: 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
cb40: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20   pIn1->flags &= 
cb50: 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e  ~(MEM_TypeMask&~
cb60: 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20  MEM_Blob);.  }. 
cb70: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
cb80: 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72  SIZE(pIn1);.  br
cb90: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
cba0: 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20  e: ToNumeric P1 
cbb0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
cbc0: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
cbd0: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
cbe0: 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68  be numeric (eith
cbf0: 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72  er an.** integer
cc00: 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70   or a floating-p
cc10: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a  oint number.).**
cc20: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
cc30: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
cc40: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
cc50: 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65   to an using the
cc60: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
cc70: 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66  f atoi() or atof
cc80: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69  () and store 0 i
cc90: 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72  f no such conver
cca0: 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73  sion .** is poss
ccb0: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
ccc0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
ccd0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
cce0: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
ccf0: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
cd00: 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a  se OP_ToNumeric:
cd10: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
cd20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cd30: 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e  K_TO_NUMERIC, in
cd40: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
cd50: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
cd60: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
cd70: 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  merify(pIn1);.  
cd80: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
cd90: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
cda0: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
cdb0: 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20  e: ToInt P1 * * 
cdc0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
cdd0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
cde0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
cdf0: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a  n integer.  If.*
ce00: 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63  * The value is c
ce10: 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20  urrently a real 
ce20: 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73  number, drop its
ce30: 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
ce40: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
ce50: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
ce60: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
ce70: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
ce80: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
ce90: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
cea0: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
ceb0: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
cec0: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
ced0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
cee0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
cef0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
cf00: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
cf10: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
cf20: 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20   OP_ToInt: {    
cf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cf40: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49   same as TK_TO_I
cf50: 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  NT, in1 */.  pIn
cf60: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
cf70: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
cf80: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
cf90: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  l)==0 ){.    sql
cfa0: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
cfb0: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  erify(pIn1);.  }
cfc0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
cfd0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
cfe0: 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21  _OMIT_CAST) && !
cff0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
d000: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
d010: 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  NT)./* Opcode: T
d020: 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  oReal P1 * * * *
d030: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
d040: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d050: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c  er P1 to be a fl
d060: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
d070: 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76  ber..** If The v
d080: 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c  alue is currentl
d090: 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f  y an integer, co
d0a0: 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20  nvert it..** If 
d0b0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
d0c0: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
d0d0: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
d0e0: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
d0f0: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
d100: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
d110: 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f   store 0.0 if no
d120: 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e   such conversion
d130: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
d140: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
d150: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
d160: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
d170: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
d180: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
d190: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
d1a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d1b0: 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20   as TK_TO_REAL, 
d1c0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
d1d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
d1e0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
d1f0: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69  ge(p, pIn1);.  i
d200: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
d210: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
d220: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
d230: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
d240: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
d250: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
d260: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
d270: 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e  _CAST) && !defin
d280: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
d290: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a  LOATING_POINT) *
d2a0: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  /../* Opcode: Lt
d2b0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
d2c0: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68  **.** Compare th
d2d0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
d2e0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20  ster P1 and P3. 
d2f0: 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28   If reg(P3)<reg(
d300: 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70  P1) then.** jump
d310: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20   to address P2. 
d320: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53   .**.** If the S
d330: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
d340: 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65   bit of P5 is se
d350: 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67  t and either reg
d360: 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50  (P1) or.** reg(P
d370: 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  3) is NULL then 
d380: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20  take the jump.  
d390: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
d3a0: 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74  MPIFNULL .** bit
d3b0: 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66   is clear then f
d3c0: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65  all through if e
d3d0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
d3e0: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
d3f0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
d400: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d   portion of P5 m
d410: 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69  ust be an affini
d420: 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a  ty character -.*
d430: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  * SQLITE_AFF_TEX
d440: 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  T, SQLITE_AFF_IN
d450: 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f  TEGER, and so fo
d460: 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  rth. An attempt 
d470: 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63  is made .** to c
d480: 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74  oerce both input
d490: 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  s according to t
d4a0: 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66  his affinity bef
d4b0: 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  ore the.** compa
d4c0: 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49  rison is made. I
d4d0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
d4e0: 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74  _MASK is 0x00, t
d4f0: 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61  hen numeric.** a
d500: 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e  ffinity is used.
d510: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61   Note that the a
d520: 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69  ffinity conversi
d530: 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a  ons are stored.*
d540: 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  * back into the 
d550: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
d560: 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74  P1 and P3.  So t
d570: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63  his opcode can c
d580: 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65  ause.** persiste
d590: 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65  nt changes to re
d5a0: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
d5b0: 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e  3..**.** Once an
d5c0: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61  y conversions ha
d5d0: 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20  ve taken place, 
d5e0: 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75  and neither valu
d5f0: 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74  e is NULL, .** t
d600: 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  he values are co
d610: 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20  mpared. If both 
d620: 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73  values are blobs
d630: 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69   then memcmp() i
d640: 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74  s.** used to det
d650: 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ermine the resul
d660: 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  ts of the compar
d670: 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76  ison.  If both v
d680: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78  alues.** are tex
d690: 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72  t, then the appr
d6a0: 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e  opriate collatin
d6b0: 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  g function speci
d6c0: 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73  fied in.** P4 is
d6d0: 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65    used to do the
d6e0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
d6f0: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
d700: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
d710: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
d720: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
d730: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
d740: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
d750: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
d760: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
d770: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
d780: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
d790: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
d7a0: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
d7b0: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
d7c0: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
d7d0: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
d7e0: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
d7f0: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
d800: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
d810: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62  SQLITE_STOREP2 b
d820: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  it of P5 is set,
d830: 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d   then do not jum
d840: 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20  p.  Instead,.** 
d850: 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20  store a boolean 
d860: 72 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30  result (either 0
d870: 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29  , or 1, or NULL)
d880: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
d890: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
d8a0: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
d8b0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
d8c0: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
d8d0: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
d8e0: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
d8f0: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
d900: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
d910: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
d920: 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e  3 are not equal.
d930: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
d940: 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74  ode for.** addit
d950: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
d960: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  n..**.** If SQLI
d970: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
d980: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
d990: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
d9a0: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
d9b0: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
d9c0: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
d9d0: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
d9e0: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
d9f0: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
da00: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
da10: 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20  rison is false. 
da20: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
da30: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
da40: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 72  the result is tr
da50: 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  ue..** If neithe
da60: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
da70: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
da80: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
da90: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
daa0: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
dab0: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
dac0: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a  d from P5..*/./*
dad0: 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50   Opcode: Eq P1 P
dae0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
daf0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
db00: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
db10: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
db20: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
db30: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72  n if.** the oper
db40: 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72  ands in register
db50: 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20  s P1 and P3 are 
db60: 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68  equal..** See th
db70: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
db80: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
db90: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  mation..**.** If
dba0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
dbb0: 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e  s set in P5 then
dbc0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
dbd0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77  omparison is alw
dbe0: 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72  ays either.** tr
dbf0: 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20  ue or false and 
dc00: 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20  is never NULL.  
dc10: 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  If both operands
dc20: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74   are NULL then t
dc30: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20  he result.** of 
dc40: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72  comparison is tr
dc50: 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  ue.  If either o
dc60: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
dc70: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
dc80: 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e  s false..** If n
dc90: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
dca0: 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c  s NULL the resul
dcb0: 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  t is the same as
dcc0: 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a   it would be if.
dcd0: 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55  ** the SQLITE_NU
dce0: 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f  LLEQ flag were o
dcf0: 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a  mitted from P5..
dd00: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65  */./* Opcode: Le
dd10: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
dd20: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
dd30: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
dd40: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
dd50: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
dd60: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
dd70: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
dd80: 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20  ster P3 is less 
dd90: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
dda0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
ddb0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
ddc0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
ddd0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
dde0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
ddf0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20  /./* Opcode: Gt 
de00: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
de10: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
de20: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
de30: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
de40: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
de50: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
de60: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
de70: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
de80: 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65  r than the conte
de90: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
dea0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
deb0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
dec0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
ded0: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
dee0: 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50  e: Ge P1 P2 P3 P
def0: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
df00: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
df10: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
df20: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
df30: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
df40: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
df50: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
df60: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
df70: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
df80: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
df90: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
dfa0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
dfb0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
dfc0: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
dfd0: 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
dfe0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
dff0: 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
e000: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
e010: 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
e020: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
e030: 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
e040: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
e050: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
e060: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
e070: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
e080: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e0a0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
e0b0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
e0c0: 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
e0d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e0e0: 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
e0f0: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
e100: 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
e110: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e120: 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
e130: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
e140: 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
e150: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
e160: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
e170: 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
e180: 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
e190: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
e1a0: 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
e1b0: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
e1c0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
e1d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
e1e0: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
e1f0: 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
e200: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
e210: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
e220: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
e230: 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
e240: 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
e250: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
e260: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
e270: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
e280: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
e290: 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
e2a0: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
e2b0: 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
e2c0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
e2d0: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
e2e0: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
e2f0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
e300: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
e310: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
e320: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
e330: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
e340: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
e350: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
e360: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
e370: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
e380: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
e390: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
e3a0: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
e3b0: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
e3c0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
e3d0: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
e3e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
e3f0: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
e400: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
e410: 4e 65 20 29 3b 0a 20 20 20 20 20 20 72 65 73 20  Ne );.      res 
e420: 3d 20 28 66 6c 61 67 73 31 20 26 20 66 6c 61 67  = (flags1 & flag
e430: 73 33 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  s3 & MEM_Null)==
e440: 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
e450: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55      /* SQLITE_NU
e460: 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e  LLEQ is clear an
e470: 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f  d at least one o
e480: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a  perand is NULL,.
e490: 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
e4a0: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
e4b0: 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a  ys NULL..      *
e4c0: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
e4d0: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
e4e0: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
e4f0: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a   is set..      *
e500: 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  /.      if( pOp-
e510: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
e520: 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20  REP2 ){.        
e530: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
e540: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d  ->p2];.        M
e550: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
e560: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
e570: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
e580: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
e590: 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Out);.      }els
e5a0: 65 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20  e if( pOp->p5 & 
e5b0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
e5c0: 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20  L ){.        pc 
e5d0: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20  = pOp->p2-1;.   
e5e0: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
e5f0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
e600: 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20  .    /* Neither 
e610: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
e620: 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f    Do a compariso
e630: 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69  n. */.    affini
e640: 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53  ty = pOp->p5 & S
e650: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a  QLITE_AFF_MASK;.
e660: 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79      if( affinity
e670: 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41   ){.      applyA
e680: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66  ffinity(pIn1, af
e690: 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67  finity, encoding
e6a0: 29 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  );.      applyAf
e6b0: 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66  finity(pIn3, aff
e6c0: 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29  inity, encoding)
e6d0: 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  ;.      if( db->
e6e0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
e6f0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
e700: 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  }..    assert( p
e710: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
e720: 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70  OLLSEQ || pOp->p
e730: 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20  4.pColl==0 );.  
e740: 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
e750: 31 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c  1);.    ExpandBl
e760: 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 72 65  ob(pIn3);.    re
e770: 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  s = sqlite3MemCo
e780: 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31  mpare(pIn3, pIn1
e790: 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29  , pOp->p4.pColl)
e7a0: 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20  ;.  }.  switch( 
e7b0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
e7c0: 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20     case OP_Eq:  
e7d0: 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20    res = res==0; 
e7e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
e7f0: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65  ase OP_Ne:    re
e800: 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20  s = res!=0;     
e810: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
e820: 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20  OP_Lt:    res = 
e830: 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61  res<0;      brea
e840: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c  k;.    case OP_L
e850: 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c  e:    res = res<
e860: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
e870: 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20     case OP_Gt:  
e880: 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20    res = res>0;  
e890: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
e8a0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65  efault:       re
e8b0: 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20  s = res>=0;     
e8c0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66  break;.  }..  if
e8d0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
e8e0: 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
e8f0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
e900: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d  Op->p2];.    mem
e910: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
e920: 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53   pOut);.    MemS
e930: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
e940: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70   MEM_Int);.    p
e950: 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a  Out->u.i = res;.
e960: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
e970: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
e980: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72  );.  }else if( r
e990: 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
e9a0: 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 0a 20  Op->p2-1;.  }.. 
e9b0: 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61   /* Undo any cha
e9c0: 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70  nges made by app
e9d0: 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20  lyAffinity() to 
e9e0: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
e9f0: 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e  ers. */.  pIn1->
ea00: 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e 66  flags = (pIn1->f
ea10: 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61  lags&~MEM_TypeMa
ea20: 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26 4d 45  sk) | (flags1&ME
ea30: 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 70  M_TypeMask);.  p
ea40: 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49  In3->flags = (pI
ea50: 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54  n3->flags&~MEM_T
ea60: 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
ea70: 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  s3&MEM_TypeMask)
ea80: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
ea90: 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61   Opcode: Permuta
eaa0: 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  tion * * * P4 *.
eab0: 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65  **.** Set the pe
eac0: 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62  rmutation used b
ead0: 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  y the OP_Compare
eae0: 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20   operator to be 
eaf0: 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20  the array.** of 
eb00: 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a  integers in P4..
eb10: 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74  **.** The permut
eb20: 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61  ation is only va
eb30: 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  lid until the ne
eb40: 78 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  xt OP_Permutatio
eb50: 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a  n, OP_Compare,.*
eb60: 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f 50  * OP_Halt, or OP
eb70: 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20 54 79 70  _ResultRow.  Typ
eb80: 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65  ically the OP_Pe
eb90: 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64  rmutation should
eba0: 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64 69   occur.** immedi
ebb0: 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74  ately prior to t
ebc0: 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a  he OP_Compare..*
ebd0: 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74  /.case OP_Permut
ebe0: 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72  ation: {.  asser
ebf0: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
ec00: 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
ec10: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
ec20: 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74  .ai );.  aPermut
ec30: 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  e = pOp->p4.ai;.
ec40: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
ec50: 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50  pcode: Compare P
ec60: 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
ec70: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76  ** Compare two v
ec80: 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
ec90: 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
eca0: 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61  reg(P1+P3-1) (ca
ecb0: 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f  ll this.** vecto
ecc0: 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65  r "A") and in re
ecd0: 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33  g(P2)..reg(P2+P3
ece0: 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65  -1) ("B").  Save
ecf0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
ed00: 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
ed10: 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the 
ed20: 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73  next OP_Jump ins
ed30: 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  truct..**.** P4 
ed40: 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  is a KeyInfo str
ed50: 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69  ucture that defi
ed60: 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  nes collating se
ed70: 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74  quences and sort
ed80: 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74  .** orders for t
ed90: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
eda0: 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
edb0: 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73  applies to regis
edc0: 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ters.** only.  T
edd0: 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65  he KeyInfo eleme
ede0: 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71  nts are used seq
edf0: 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  uentially..**.**
ee00: 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   The comparison 
ee10: 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72  is a sort compar
ee20: 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63  ison, so NULLs c
ee30: 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a  ompare equal,.**
ee40: 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20   NULLs are less 
ee50: 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75  than numbers, nu
ee60: 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74  mbers are less t
ee70: 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20  han strings,.** 
ee80: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
ee90: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
eea0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70  .*/.case OP_Comp
eeb0: 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  are: {.  int n;.
eec0: 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70    int i;.  int p
eed0: 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63  1;.  int p2;.  c
eee0: 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  onst KeyInfo *pK
eef0: 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64  eyInfo;.  int id
ef00: 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  x;.  CollSeq *pC
ef10: 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  oll;    /* Colla
ef20: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f  ting sequence to
ef30: 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72   use on this ter
ef40: 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b  m */.  int bRev;
ef50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
ef60: 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47  e for DESCENDING
ef70: 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a   sort order */..
ef80: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
ef90: 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
efa0: 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
efb0: 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20  assert( n>0 );. 
efc0: 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
efd0: 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70  o!=0 );.  p1 = p
efe0: 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
eff0: 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49  Op->p2;.#if SQLI
f000: 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61  TE_DEBUG.  if( a
f010: 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69  Permute ){.    i
f020: 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20  nt k, mx = 0;.  
f030: 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20    for(k=0; k<n; 
f040: 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74  k++) if( aPermut
f050: 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61  e[k]>mx ) mx = a
f060: 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20  Permute[k];.    
f070: 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
f080: 70 31 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  p1+mx<=p->nMem+1
f090: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
f0a0: 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 70  p2>0 && p2+mx<=p
f0b0: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 65  ->nMem+1 );.  }e
f0c0: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
f0d0: 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 70   p1>0 && p1+n<=p
f0e0: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20 20  ->nMem+1 );.    
f0f0: 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
f100: 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  p2+n<=p->nMem+1 
f110: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
f120: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
f130: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
f140: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
f150: 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
f160: 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
f170: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
f180: 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
f190: 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
f1a0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
f1b0: 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
f1c0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
f1d0: 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
f1e0: 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
f1f0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
f200: 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
f210: 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
f220: 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   i<pKeyInfo->nFi
f230: 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
f240: 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
f250: 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
f260: 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
f270: 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
f280: 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
f290: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
f2a0: 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
f2b0: 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
f2c0: 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
f2d0: 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
f2e0: 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
f2f0: 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
f300: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
f310: 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d    }.  aPermute =
f320: 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
f330: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
f340: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
f350: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
f360: 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
f370: 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
f380: 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
f390: 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
f3a0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
f3b0: 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
f3c0: 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
f3d0: 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
f3e0: 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
f3f0: 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
f400: 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
f410: 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
f420: 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
f430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
f440: 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
f450: 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63  pare<0 ){.    pc
f460: 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a   = pOp->p1 - 1;.
f470: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d    }else if( iCom
f480: 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70  pare==0 ){.    p
f490: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
f4a0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63  .  }else{.    pc
f4b0: 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a   = pOp->p3 - 1;.
f4c0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
f4d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
f4e0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
f4f0: 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
f500: 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  al AND of the va
f510: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
f520: 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  s P1 and P2 and.
f530: 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73  ** write the res
f540: 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ult into registe
f550: 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
f560: 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
f570: 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e  s 0 (false) then
f580: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30   the result is 0
f590: 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20   even if.** the 
f5a0: 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
f5b0: 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
f5c0: 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c   true or two NUL
f5d0: 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c  Ls give.** a NUL
f5e0: 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20  L output..*/./* 
f5f0: 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32  Opcode: Or P1 P2
f600: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61   P3 * *.**.** Ta
f610: 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f  ke the logical O
f620: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
f630: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
f640: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
f650: 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e  re the answer in
f660: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
f670: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
f680: 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72   or P2 is nonzer
f690: 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68  o (true) then th
f6a0: 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74  e result is 1 (t
f6b0: 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20  rue).** even if 
f6c0: 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
f6d0: 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
f6e0: 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77   and false or tw
f6f0: 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20  o NULLs.** give 
f700: 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
f710: 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20  /.case OP_And:  
f720: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f730: 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69  ame as TK_AND, i
f740: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
f750: 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20  .case OP_Or: {  
f760: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f770: 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31  me as TK_OR, in1
f780: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
f790: 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c   int v1;    /* L
f7a0: 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d  eft operand:  0=
f7b0: 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
f7c0: 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
f7d0: 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b  ULL */.  int v2;
f7e0: 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65      /* Right ope
f7f0: 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20  rand: 0==FALSE, 
f800: 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
f810: 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a  OWN or NULL */..
f820: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
f830: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
f840: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
f850: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20  _Null ){.    v1 
f860: 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
f870: 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64    v1 = sqlite3Vd
f880: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
f890: 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20  !=0;.  }.  pIn2 
f8a0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
f8b0: 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c  ;.  if( pIn2->fl
f8c0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
f8d0: 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20  {.    v2 = 2;.  
f8e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20  }else{.    v2 = 
f8f0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f900: 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20  lue(pIn2)!=0;.  
f910: 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  }.  if( pOp->opc
f920: 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20  ode==OP_And ){. 
f930: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
f940: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e  unsigned char an
f950: 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  d_logic[] = { 0,
f960: 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20   0, 0, 0, 1, 2, 
f970: 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76  0, 2, 2 };.    v
f980: 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31  1 = and_logic[v1
f990: 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b  *3+v2];.  }else{
f9a0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
f9b0: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
f9c0: 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  or_logic[] = { 0
f9d0: 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 2, 1, 1, 1,
f9e0: 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20   2, 1, 2 };.    
f9f0: 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31  v1 = or_logic[v1
fa00: 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f  *3+v2];.  }.  pO
fa10: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
fa20: 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32  p3];.  if( v1==2
fa30: 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79   ){.    MemSetTy
fa40: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
fa50: 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b  _Null);.  }else{
fa60: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
fa70: 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   v1;.    MemSetT
fa80: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
fa90: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72  M_Int);.  }.  br
faa0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
fab0: 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  e: Not P1 P2 * *
fac0: 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72   *.**.** Interpr
fad0: 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
fae0: 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
faf0: 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
fb00: 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f   Store the.** bo
fb10: 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74  olean complement
fb20: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
fb30: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
fb40: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
fb50: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
fb60: 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64  a NULL is stored
fb70: 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
fb80: 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  OP_Not: {       
fb90: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
fba0: 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c   as TK_NOT, in1,
fbb0: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
fbc0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
fbd0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
fbe0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
fbf0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
fc00: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
fc10: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
fc20: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
fc30: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
fc40: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
fc50: 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64  pOut, !sqlite3Vd
fc60: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
fc70: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
fc80: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
fc90: 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
fca0: 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
fcb0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
fcc0: 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
fcd0: 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72  n integer.  Stor
fce0: 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f  e the.** ones-co
fcf0: 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20  mplement of the 
fd00: 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  P1 value into re
fd10: 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50  gister P2.  If P
fd20: 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c  1 holds.** a NUL
fd30: 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e  L then store a N
fd40: 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  ULL in P2..*/.ca
fd50: 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20  se OP_BitNot: { 
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
fd70: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54  ame as TK_BITNOT
fd80: 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
fd90: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
fda0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
fdb0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
fdc0: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
fdd0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
fde0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
fdf0: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
fe00: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
fe10: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
fe20: 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c  Int64(pOut, ~sql
fe30: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
fe40: 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62  (pIn1));.  }.  b
fe50: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
fe60: 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a  de: Once P1 P2 *
fe70: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
fe80: 20 69 66 20 4f 50 5f 4f 6e 63 65 20 66 6c 61 67   if OP_Once flag
fe90: 20 50 31 20 69 73 20 73 65 74 2e 20 49 66 20 73   P1 is set. If s
fea0: 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
feb0: 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
fec0: 77 69 73 65 2c 0a 2a 2a 20 73 65 74 20 74 68 65  wise,.** set the
fed0: 20 66 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20 74   flag and fall t
fee0: 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
fef0: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
ff00: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
ff10: 4a 75 6d 70 4f 6e 63 65 0a 2a 2f 0a 63 61 73 65  JumpOnce.*/.case
ff20: 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20   OP_Once: {     
ff30: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
ff40: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
ff50: 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ->p1<p->nOnceFla
ff60: 67 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f  g );.  if( p->aO
ff70: 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
ff80: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
ff90: 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b  ->p2-1;.  }else{
ffa0: 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61  .    p->aOnceFla
ffb0: 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a  g[pOp->p1] = 1;.
ffc0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
ffd0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31  /* Opcode: If P1
ffe0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
fff0: 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
10000 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
10010 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e  ster P1 is true.
10020 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
10030 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  s considered tru
10040 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72  e if it is numer
10050 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e  ic and non-zero.
10060 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
10070 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
10080 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
10090 6d 70 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  mp if P3 is non-
100a0 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  zero..*/./* Opco
100b0 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20  de: IfNot P1 P2 
100c0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
100d0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
100e0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
100f0 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54   P1 is False.  T
10100 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63  he value.** is c
10110 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20  onsidered false 
10120 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65  if it has a nume
10130 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72  ric value of zer
10140 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
10150 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
10160 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
10170 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 7a 65  jump if P3 is ze
10180 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ro..*/.case OP_I
10190 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f:              
101a0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
101b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
101c0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
101d0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
101e0 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d   int c;.  pIn1 =
101f0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
10200 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
10210 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
10220 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33  .    c = pOp->p3
10230 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65  ;.  }else{.#ifde
10240 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
10250 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20  OATING_POINT.   
10260 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
10270 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
10280 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d  0;.#else.    c =
10290 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
102a0 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30  Value(pIn1)!=0.0
102b0 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
102c0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
102d0 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b  _IfNot ) c = !c;
102e0 0a 20 20 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a  .  }.  if( c ){.
102f0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
10300 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
10310 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
10320 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  sNull P1 P2 * * 
10330 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
10340 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
10350 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
10360 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
10370 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20  OP_IsNull: {    
10380 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
10390 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75  as TK_ISNULL, ju
103a0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
103b0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
103c0 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
103d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
103e0 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  l)!=0 ){.    pc 
103f0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
10400 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10410 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c  * Opcode: NotNul
10420 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
10430 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
10440 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
10450 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f  egister P1 is no
10460 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73  t NULL.  .*/.cas
10470 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20  e OP_NotNull: { 
10480 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
10490 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c  me as TK_NOTNULL
104a0 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
104b0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
104c0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
104d0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
104e0 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
104f0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
10500 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
10510 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
10520 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34  lumn P1 P2 P3 P4
10530 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70   P5.**.** Interp
10540 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ret the data tha
10550 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
10560 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63  ts to as a struc
10570 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67  ture built using
10580 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  .** the MakeReco
10590 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  rd instruction. 
105a0 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65   (See the MakeRe
105b0 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  cord opcode for 
105c0 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e  additional.** in
105d0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
105e0 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
105f0 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63  e data.)  Extrac
10600 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  t the P2-th colu
10610 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20  mn.** from this 
10620 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72  record.  If ther
10630 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20  e are less that 
10640 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65  (P2+1) .** value
10650 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  s in the record,
10660 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
10670 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
10680 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74   extracted is st
10690 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
106a0 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
106b0 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  e column contain
106c0 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20  s fewer than P2 
106d0 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74  fields, then ext
106e0 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72  ract a NULL.  Or
106f0 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61  ,.** if the P4 a
10700 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f  rgument is a P4_
10710 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75  MEM use the valu
10720 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75  e of the P4 argu
10730 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72  ment as.** the r
10740 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  esult..**.** If 
10750 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52  the OPFLAG_CLEAR
10760 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74  CACHE bit is set
10770 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73   on P5 and P1 is
10780 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
10790 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20  cursor,.** then 
107a0 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65  the cache of the
107b0 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74   cursor is reset
107c0 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63   prior to extrac
107d0 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  ting the column.
107e0 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50  .** The first OP
107f0 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20  _Column against 
10800 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61  a pseudo-table a
10810 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f  fter the value o
10820 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  f the content.**
10830 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68   register has ch
10840 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76  anged should hav
10850 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a  e this bit set..
10860 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
10870 6e 3a 20 7b 0a 20 20 75 33 32 20 70 61 79 6c 6f  n: {.  u32 paylo
10880 61 64 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d  adSize;   /* Num
10890 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
108a0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
108b0 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36  i64 payloadSize6
108c0 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  4; /* Number of 
108d0 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63  bytes in the rec
108e0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b  ord */.  int p1;
108f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
10900 31 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  1 value of the o
10910 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70  pcode */.  int p
10920 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  2;            /*
10930 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74   column number t
10940 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20  o retrieve */.  
10950 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
10960 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
10970 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20  ursor */.  char 
10980 2a 7a 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a  *zRec;        /*
10990 20 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70   Pointer to comp
109a0 6c 65 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61  lete record-data
109b0 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a   */.  BtCursor *
109c0 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20  pCrsr;   /* The 
109d0 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a  BTree cursor */.
109e0 20 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20    u32 *aType;   
109f0 20 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d       /* aType[i]
10a00 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72   holds the numer
10a10 69 63 20 74 79 70 65 20 6f 66 20 74 68 65 20 69  ic type of the i
10a20 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
10a30 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20  u32 *aOffset;   
10a40 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d     /* aOffset[i]
10a50 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74   is offset to st
10a60 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20  art of data for 
10a70 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
10a80 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
10a90 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66      /* number of
10aa0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
10ab0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c  ecord */.  int l
10ac0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
10ad0 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
10ae0 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
10af0 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
10b00 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
10b10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
10b20 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63  p counter */.  c
10b30 68 61 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20  har *zData;     
10b40 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65    /* Part of the
10b50 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
10b60 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  coded */.  Mem *
10b70 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  pDest;        /*
10b80 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20   Where to write 
10b90 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61  the extracted va
10ba0 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65  lue */.  Mem sMe
10bb0 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  m;          /* F
10bc0 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72  or storing the r
10bd0 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
10be0 64 65 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 49 64  ded */.  u8 *zId
10bf0 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  x;          /* I
10c00 6e 64 65 78 20 69 6e 74 6f 20 68 65 61 64 65 72  ndex into header
10c10 20 2a 2f 0a 20 20 75 38 20 2a 7a 45 6e 64 48 64   */.  u8 *zEndHd
10c20 72 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  r;       /* Poin
10c30 74 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74  ter to first byt
10c40 65 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64  e after the head
10c50 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73  er */.  u32 offs
10c60 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66  et;        /* Of
10c70 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61  fset into the da
10c80 74 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69  ta */.  u32 szFi
10c90 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  eld;       /* Nu
10ca0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
10cb0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
10cc0 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74  a field */.  int
10cd0 20 73 7a 48 64 72 3b 20 20 20 20 20 20 20 20 20   szHdr;         
10ce0 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68  /* Size of the h
10cf0 65 61 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64  eader size field
10d00 20 61 74 20 73 74 61 72 74 20 6f 66 20 72 65 63   at start of rec
10d10 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 61 76 61  ord */.  int ava
10d20 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  il;         /* N
10d30 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
10d40 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61  f available data
10d50 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20   */.  u32 t;    
10d60 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79           /* A ty
10d70 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  pe code from the
10d80 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a   record header *
10d90 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20  /.  Mem *pReg;  
10da0 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f         /* Pseudo
10db0 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69  Table input regi
10dc0 73 74 65 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d  ster */...  p1 =
10dd0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
10de0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d   pOp->p2;.  pC =
10df0 20 30 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d   0;.  memset(&sM
10e00 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
10e10 65 6d 29 29 3b 0a 20 20 61 73 73 65 72 74 28 20  em));.  assert( 
10e20 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
10e30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
10e40 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
10e50 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44  =p->nMem );.  pD
10e60 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
10e70 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
10e80 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
10e90 74 29 3b 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a  t);.  zRec = 0;.
10ea0 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b  .  /* This block
10eb0 20 73 65 74 73 20 74 68 65 20 76 61 72 69 61 62   sets the variab
10ec0 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 74  le payloadSize t
10ed0 6f 20 62 65 20 74 68 65 20 74 6f 74 61 6c 20 6e  o be the total n
10ee0 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79  umber of.  ** by
10ef0 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
10f00 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65  d..  **.  ** zRe
10f10 63 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74  c is set to be t
10f20 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74  he complete text
10f30 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   of the record i
10f40 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
10f50 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70  e..  ** The comp
10f60 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74  lete record text
10f70 20 69 73 20 61 6c 77 61 79 73 20 61 76 61 69 6c   is always avail
10f80 61 62 6c 65 20 66 6f 72 20 70 73 65 75 64 6f 2d  able for pseudo-
10f90 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74  tables.  ** If t
10fa0 68 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f  he record is sto
10fb0 72 65 64 20 69 6e 20 61 20 63 75 72 73 6f 72 2c  red in a cursor,
10fc0 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65   the complete re
10fd0 63 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d  cord text.  ** m
10fe0 69 67 68 74 20 62 65 20 61 76 61 69 6c 61 62 6c  ight be availabl
10ff0 65 20 69 6e 20 74 68 65 20 20 70 43 2d 3e 61 52  e in the  pC->aR
11000 6f 77 20 63 61 63 68 65 2e 20 20 4f 72 20 69 74  ow cache.  Or it
11010 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20   might not be.. 
11020 20 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 20   ** If the data 
11030 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20  is unavailable, 
11040 20 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20   zRec is set to 
11050 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  NULL..  **.  ** 
11060 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20  We also compute 
11070 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
11080 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 63  lumns in the rec
11090 6f 72 64 2e 20 20 46 6f 72 20 63 75 72 73 6f 72  ord.  For cursor
110a0 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62  s,.  ** the numb
110b0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73  er of columns is
110c0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 56   stored in the V
110d0 64 62 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64  dbeCursor.nField
110e0 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20   element..  */. 
110f0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
11100 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
11110 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53  !=0 );.#ifndef S
11120 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
11130 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74  ALTABLE.  assert
11140 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
11150 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20  r==0 );.#endif. 
11160 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
11170 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73  rsor;.  if( pCrs
11180 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54  r!=0 ){.    /* T
11190 68 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f  he record is sto
111a0 72 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20  red in a B-Tree 
111b0 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
111c0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
111d0 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28  eto(pC);.    if(
111e0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
111f0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
11200 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52     if( pC->nullR
11210 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c  ow ){.      payl
11220 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20  oadSize = 0;.   
11230 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63   }else if( pC->c
11240 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63  acheStatus==p->c
11250 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20  acheCtr ){.     
11260 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70   payloadSize = p
11270 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a  C->payloadSize;.
11280 20 20 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68        zRec = (ch
11290 61 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20  ar*)pC->aRow;.  
112a0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
112b0 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20  isIndex ){.     
112c0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
112d0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
112e0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
112f0 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d     VVA_ONLY(rc =
11300 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  ) sqlite3BtreeKe
11310 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61  ySize(pCrsr, &pa
11320 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20  yloadSize64);.  
11330 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
11340 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f  SQLITE_OK );   /
11350 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f  * True because o
11360 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  f CursorMoveto()
11370 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20   call above */. 
11380 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42       /* sqlite3B
11390 74 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72  treeParseCellPtr
113a0 28 29 20 75 73 65 73 20 67 65 74 56 61 72 69 6e  () uses getVarin
113b0 74 33 32 28 29 20 74 6f 20 65 78 74 72 61 63 74  t32() to extract
113c0 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 70 61   the.      ** pa
113d0 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69  yload size, so i
113e0 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20  t is impossible 
113f0 66 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36  for payloadSize6
11400 34 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a  4 to be.      **
11410 20 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32 20   larger than 32 
11420 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 61  bits. */.      a
11430 73 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53  ssert( (payloadS
11440 69 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d  ize64 & SQLITE_M
11450 41 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61  AX_U32)==(u64)pa
11460 79 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20  yloadSize64 );. 
11470 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65       payloadSize
11480 20 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53   = (u32)payloadS
11490 69 7a 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65  ize64;.    }else
114a0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
114b0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
114c0 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
114d0 20 29 3b 0a 20 20 20 20 20 20 56 56 41 5f 4f 4e   );.      VVA_ON
114e0 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
114f0 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
11500 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a  rsr, &payloadSiz
11510 65 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e);.      assert
11520 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
11530 29 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65  );   /* DataSize
11540 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a  () cannot fail *
11550 2f 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  /.    }.  }else 
11560 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70  if( ALWAYS(pC->p
11570 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 29  seudoTableReg>0)
11580 20 29 7b 0a 20 20 20 20 70 52 65 67 20 3d 20 26   ){.    pReg = &
11590 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54  aMem[pC->pseudoT
115a0 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 61 73  ableReg];.    as
115b0 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67  sert( pReg->flag
115c0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
115d0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
115e0 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a  sValid(pReg) );.
115f0 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
11600 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 7a  = pReg->n;.    z
11610 52 65 63 20 3d 20 70 52 65 67 2d 3e 7a 3b 0a 20  Rec = pReg->z;. 
11620 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
11630 75 73 20 3d 20 28 70 4f 70 2d 3e 70 35 26 4f 50  us = (pOp->p5&OP
11640 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 29  FLAG_CLEARCACHE)
11650 20 3f 20 43 41 43 48 45 5f 53 54 41 4c 45 20 3a   ? CACHE_STALE :
11660 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20   p->cacheCtr;.  
11670 20 20 61 73 73 65 72 74 28 20 70 61 79 6c 6f 61    assert( payloa
11680 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52 65 63  dSize==0 || zRec
11690 21 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  !=0 );.  }else{.
116a0 20 20 20 20 2f 2a 20 43 6f 6e 73 69 64 65 72 20      /* Consider 
116b0 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 4e 55  the row to be NU
116c0 4c 4c 20 2a 2f 0a 20 20 20 20 70 61 79 6c 6f 61  LL */.    payloa
116d0 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 7d 0a 0a  dSize = 0;.  }..
116e0 20 20 2f 2a 20 49 66 20 70 61 79 6c 6f 61 64 53    /* If payloadS
116f0 69 7a 65 20 69 73 20 30 2c 20 74 68 65 6e 20 6a  ize is 0, then j
11700 75 73 74 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  ust store a NULL
11710 2e 20 20 54 68 69 73 20 63 61 6e 20 68 61 70 70  .  This can happ
11720 65 6e 20 62 65 63 61 75 73 65 20 6f 66 0a 20 20  en because of.  
11730 2a 2a 20 6e 75 6c 6c 52 6f 77 20 6f 72 20 62 65  ** nullRow or be
11740 63 61 75 73 65 20 6f 66 20 61 20 63 6f 72 72 75  cause of a corru
11750 70 74 20 64 61 74 61 62 61 73 65 2e 20 2a 2f 0a  pt database. */.
11760 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a    if( payloadSiz
11770 65 3d 3d 30 20 29 7b 0a 20 20 20 20 4d 65 6d 53  e==0 ){.    MemS
11780 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74  etTypeFlag(pDest
11790 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20  , MEM_Null);.   
117a0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
117b0 6f 75 74 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  out;.  }.  asser
117c0 74 28 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  t( db->aLimit[SQ
117d0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
117e0 48 5d 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  H]>=0 );.  if( p
117f0 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33  ayloadSize > (u3
11800 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
11810 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
11820 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
11830 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 6e 46  o_big;.  }..  nF
11840 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c  ield = pC->nFiel
11850 64 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  d;.  assert( p2<
11860 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20  nField );..  /* 
11870 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 74  Read and parse t
11880 68 65 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e  he table header.
11890 20 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75    Store the resu
118a0 6c 74 73 20 6f 66 20 74 68 65 20 70 61 72 73 65  lts of the parse
118b0 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72  .  ** into the r
118c0 65 63 6f 72 64 20 68 65 61 64 65 72 20 63 61 63  ecord header cac
118d0 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  he fields of the
118e0 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
118f0 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70  aType = pC->aTyp
11900 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63  e;.  if( pC->cac
11910 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63  heStatus==p->cac
11920 68 65 43 74 72 20 29 7b 0a 20 20 20 20 61 4f 66  heCtr ){.    aOf
11930 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73  fset = pC->aOffs
11940 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  et;.  }else{.   
11950 20 61 73 73 65 72 74 28 61 54 79 70 65 29 3b 0a   assert(aType);.
11960 20 20 20 20 61 76 61 69 6c 20 3d 20 30 3b 0a 20      avail = 0;. 
11970 20 20 20 70 43 2d 3e 61 4f 66 66 73 65 74 20 3d     pC->aOffset =
11980 20 61 4f 66 66 73 65 74 20 3d 20 26 61 54 79 70   aOffset = &aTyp
11990 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 70  e[nField];.    p
119a0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
119b0 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20   payloadSize;.  
119c0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
119d0 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b  s = p->cacheCtr;
119e0 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75 72 65 20  ..    /* Figure 
119f0 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20 62 79 74  out how many byt
11a00 65 73 20 61 72 65 20 69 6e 20 74 68 65 20 68 65  es are in the he
11a10 61 64 65 72 20 2a 2f 0a 20 20 20 20 69 66 28 20  ader */.    if( 
11a20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 7a 44  zRec ){.      zD
11a30 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20 20  ata = zRec;.    
11a40 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28  }else{.      if(
11a50 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
11a60 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
11a70 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74  (char*)sqlite3Bt
11a80 72 65 65 4b 65 79 46 65 74 63 68 28 70 43 72 73  reeKeyFetch(pCrs
11a90 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
11aa0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
11ab0 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29   zData = (char*)
11ac0 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
11ad0 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
11ae0 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ail);.      }.  
11af0 20 20 20 20 2f 2a 20 49 66 20 4b 65 79 46 65 74      /* If KeyFet
11b00 63 68 28 29 2f 44 61 74 61 46 65 74 63 68 28 29  ch()/DataFetch()
11b10 20 6d 61 6e 61 67 65 64 20 74 6f 20 67 65 74 20   managed to get 
11b20 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f  the entire paylo
11b30 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ad,.      ** sav
11b40 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e  e the payload in
11b50 20 74 68 65 20 70 43 2d 3e 61 52 6f 77 20 63 61   the pC->aRow ca
11b60 63 68 65 2e 20 20 54 68 61 74 20 77 69 6c 6c 20  che.  That will 
11b70 73 61 76 65 20 75 73 20 66 72 6f 6d 0a 20 20 20  save us from.   
11b80 20 20 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f 20     ** having to 
11b90 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c 20  make additional 
11ba0 63 61 6c 6c 73 20 74 6f 20 66 65 74 63 68 20 74  calls to fetch t
11bb0 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74 69  he content porti
11bc0 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74  on of.      ** t
11bd0 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
11be0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
11bf0 28 20 61 76 61 69 6c 3e 3d 30 20 29 3b 0a 20 20  ( avail>=0 );.  
11c00 20 20 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53      if( payloadS
11c10 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69  ize <= (u32)avai
11c20 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 52 65  l ){.        zRe
11c30 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20 20  c = zData;.     
11c40 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75     pC->aRow = (u
11c50 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20 20 20 20  8*)zData;.      
11c60 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
11c70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20  C->aRow = 0;.   
11c80 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f     }.    }.    /
11c90 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
11ca0 61 73 73 65 72 74 20 69 73 20 74 72 75 65 20 69  assert is true i
11cb0 6e 20 61 6c 6c 20 63 61 73 65 73 20 61 63 63 65  n all cases acce
11cc0 70 74 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20 74  pt when.    ** t
11cd0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
11ce0 20 68 61 73 20 62 65 65 6e 20 63 6f 72 72 75 70   has been corrup
11cf0 74 65 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e 0a  ted externally..
11d00 20 20 20 20 2a 2a 20 20 20 20 61 73 73 65 72 74      **    assert
11d10 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76 61  ( zRec!=0 || ava
11d20 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20  il>=payloadSize 
11d30 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20 2a  || avail>=9 ); *
11d40 2f 0a 20 20 20 20 73 7a 48 64 72 20 3d 20 67 65  /.    szHdr = ge
11d50 74 56 61 72 69 6e 74 33 32 28 28 75 38 2a 29 7a  tVarint32((u8*)z
11d60 44 61 74 61 2c 20 6f 66 66 73 65 74 29 3b 0a 0a  Data, offset);..
11d70 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
11d80 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
11d90 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65  ase has not give
11da0 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65  n us an oversize
11db0 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20   header..    ** 
11dc0 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61  Do this now to a
11dd0 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65  void an oversize
11de0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
11df0 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  on..    **.    *
11e00 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20 63  * Type entries c
11e10 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31 20  an be between 1 
11e20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63 68  and 5 bytes each
11e30 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20 62  .  But 4 and 5 b
11e40 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73  yte.    ** types
11e50 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74   use so much dat
11e60 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65  a space that the
11e70 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34  re can only be 4
11e80 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20  096 and 32 of.  
11e90 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65    ** them, respe
11ea0 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65  ctively.  So the
11eb0 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20   maximum header 
11ec0 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66  length results f
11ed0 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62  rom a.    ** 3-b
11ee0 79 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63  yte type for eac
11ef0 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d  h of the maximum
11f00 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e   of 32768 column
11f10 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20  s plus three.   
11f20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20   ** extra bytes 
11f30 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c  for the header l
11f40 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33  ength itself.  3
11f50 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33  2768*3 + 3 = 983
11f60 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  07..    */.    i
11f70 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30  f( offset > 9830
11f80 37 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  7 ){.      rc = 
11f90 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
11fa0 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
11fb0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
11fc0 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d     }..    /* Com
11fd0 70 75 74 65 20 69 6e 20 6c 65 6e 20 74 68 65 20  pute in len the 
11fe0 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
11ff0 6f 66 20 64 61 74 61 20 77 65 20 6e 65 65 64 20  of data we need 
12000 74 6f 20 72 65 61 64 20 69 6e 20 6f 72 64 65 72  to read in order
12010 0a 20 20 20 20 2a 2a 20 74 6f 20 67 65 74 20 6e  .    ** to get n
12020 46 69 65 6c 64 20 74 79 70 65 20 76 61 6c 75 65  Field type value
12030 73 2e 20 20 6f 66 66 73 65 74 20 69 73 20 61 6e  s.  offset is an
12040 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20   upper bound on 
12050 74 68 69 73 2e 20 20 42 75 74 0a 20 20 20 20 2a  this.  But.    *
12060 2a 20 6e 46 69 65 6c 64 20 6d 69 67 68 74 20 62  * nField might b
12070 65 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 20  e significantly 
12080 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 74 72  less than the tr
12090 75 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  ue number of col
120a0 75 6d 6e 73 0a 20 20 20 20 2a 2a 20 69 6e 20 74  umns.    ** in t
120b0 68 65 20 74 61 62 6c 65 2c 20 61 6e 64 20 69 6e  he table, and in
120c0 20 74 68 61 74 20 63 61 73 65 2c 20 35 2a 6e 46   that case, 5*nF
120d0 69 65 6c 64 2b 33 20 6d 69 67 68 74 20 62 65 20  ield+3 might be 
120e0 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 6f 66 66  smaller than off
120f0 73 65 74 2e 0a 20 20 20 20 2a 2a 20 57 65 20 77  set..    ** We w
12100 61 6e 74 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20  ant to minimize 
12110 6c 65 6e 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  len in order to 
12120 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65 20 6f  limit the size o
12130 66 20 74 68 65 20 6d 65 6d 6f 72 79 0a 20 20 20  f the memory.   
12140 20 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20   ** allocation, 
12150 65 73 70 65 63 69 61 6c 6c 79 20 69 66 20 61 20  especially if a 
12160 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
12170 20 66 69 6c 65 20 68 61 73 20 63 61 75 73 65 64   file has caused
12180 20 6f 66 66 73 65 74 0a 20 20 20 20 2a 2a 20 74   offset.    ** t
12190 6f 20 62 65 20 6f 76 65 72 73 69 7a 65 64 2e 20  o be oversized. 
121a0 4f 66 66 73 65 74 20 69 73 20 6c 69 6d 69 74 65  Offset is limite
121b0 64 20 74 6f 20 39 38 33 30 37 20 61 62 6f 76 65  d to 98307 above
121c0 2e 20 20 42 75 74 20 39 38 33 30 37 20 6d 69 67  .  But 98307 mig
121d0 68 74 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  ht.    ** still 
121e0 65 78 63 65 65 64 20 52 6f 62 73 6f 6e 20 6d 65  exceed Robson me
121f0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
12200 6c 69 6d 69 74 73 20 6f 6e 20 73 6f 6d 65 20 63  limits on some c
12210 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0a 20  onfigurations.. 
12220 20 20 20 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73     ** On systems
12230 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 74 6f 6c   that cannot tol
12240 65 72 61 74 65 20 6c 61 72 67 65 20 6d 65 6d 6f  erate large memo
12250 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
12260 6e 46 69 65 6c 64 2a 35 2b 33 0a 20 20 20 20 2a  nField*5+3.    *
12270 2a 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65  * will likely be
12280 20 6d 75 63 68 20 73 6d 61 6c 6c 65 72 20 73 69   much smaller si
12290 6e 63 65 20 6e 46 69 65 6c 64 20 77 69 6c 6c 20  nce nField will 
122a0 6c 69 6b 65 6c 79 20 62 65 20 6c 65 73 73 20 74  likely be less t
122b0 68 61 6e 0a 20 20 20 20 2a 2a 20 32 30 20 6f 72  han.    ** 20 or
122c0 20 73 6f 2e 20 20 54 68 69 73 20 69 6e 73 75 72   so.  This insur
122d0 65 73 20 74 68 61 74 20 52 6f 62 73 6f 6e 20 6d  es that Robson m
122e0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
122f0 20 6c 69 6d 69 74 73 20 61 72 65 0a 20 20 20 20   limits are.    
12300 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 65 64 20  ** not exceeded 
12310 65 76 65 6e 20 66 6f 72 20 63 6f 72 72 75 70 74  even for corrupt
12320 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e   database files.
12330 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6c 65 6e 20  .    */.    len 
12340 3d 20 6e 46 69 65 6c 64 2a 35 20 2b 20 33 3b 0a  = nField*5 + 3;.
12350 20 20 20 20 69 66 28 20 6c 65 6e 20 3e 20 28 69      if( len > (i
12360 6e 74 29 6f 66 66 73 65 74 20 29 20 6c 65 6e 20  nt)offset ) len 
12370 3d 20 28 69 6e 74 29 6f 66 66 73 65 74 3b 0a 0a  = (int)offset;..
12380 20 20 20 20 2f 2a 20 54 68 65 20 4b 65 79 46 65      /* The KeyFe
12390 74 63 68 28 29 20 6f 72 20 44 61 74 61 46 65 74  tch() or DataFet
123a0 63 68 28 29 20 61 62 6f 76 65 20 61 72 65 20 66  ch() above are f
123b0 61 73 74 20 61 6e 64 20 77 69 6c 6c 20 67 65 74  ast and will get
123c0 20 74 68 65 20 65 6e 74 69 72 65 0a 20 20 20 20   the entire.    
123d0 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  ** record header
123e0 20 69 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e 20   in most cases. 
123f0 20 42 75 74 20 74 68 65 79 20 77 69 6c 6c 20 66   But they will f
12400 61 69 6c 20 74 6f 20 67 65 74 20 74 68 65 20 63  ail to get the c
12410 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a 2a 20 72  omplete.    ** r
12420 65 63 6f 72 64 20 68 65 61 64 65 72 20 69 66 20  ecord header if 
12430 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
12440 72 20 64 6f 65 73 20 6e 6f 74 20 66 69 74 20 6f  r does not fit o
12450 6e 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 0a  n a single page.
12460 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 42 2d      ** in the B-
12470 54 72 65 65 2e 20 20 57 68 65 6e 20 74 68 61 74  Tree.  When that
12480 20 68 61 70 70 65 6e 73 2c 20 75 73 65 20 73 71   happens, use sq
12490 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
124a0 42 74 72 65 65 28 29 20 74 6f 0a 20 20 20 20 2a  Btree() to.    *
124b0 2a 20 61 63 71 75 69 72 65 20 74 68 65 20 63 6f  * acquire the co
124c0 6d 70 6c 65 74 65 20 68 65 61 64 65 72 20 74 65  mplete header te
124d0 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  xt..    */.    i
124e0 66 28 20 21 7a 52 65 63 20 26 26 20 61 76 61 69  f( !zRec && avai
124f0 6c 3c 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 73  l<len ){.      s
12500 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20  Mem.flags = 0;. 
12510 20 20 20 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30       sMem.db = 0
12520 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
12530 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
12540 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6c  tree(pCrsr, 0, l
12550 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c  en, pC->isIndex,
12560 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69   &sMem);.      i
12570 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
12580 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
12590 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
125a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44        }.      zD
125b0 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20  ata = sMem.z;.  
125c0 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20    }.    zEndHdr 
125d0 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6c  = (u8 *)&zData[l
125e0 65 6e 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20  en];.    zIdx = 
125f0 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48  (u8 *)&zData[szH
12600 64 72 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63 61  dr];..    /* Sca
12610 6e 20 74 68 65 20 68 65 61 64 65 72 20 61 6e 64  n the header and
12620 20 75 73 65 20 69 74 20 74 6f 20 66 69 6c 6c 20   use it to fill 
12630 69 6e 20 74 68 65 20 61 54 79 70 65 5b 5d 20 61  in the aType[] a
12640 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20 20  nd aOffset[].   
12650 20 2a 2a 20 61 72 72 61 79 73 2e 20 20 61 54 79   ** arrays.  aTy
12660 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61  pe[i] will conta
12670 69 6e 20 74 68 65 20 74 79 70 65 20 69 6e 74 65  in the type inte
12680 67 65 72 20 66 6f 72 20 74 68 65 20 69 2d 74 68  ger for the i-th
12690 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61  .    ** column a
126a0 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 77 69  nd aOffset[i] wi
126b0 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 6f  ll contain the o
126c0 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
126d0 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a 20  eginning.    ** 
126e0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
126f0 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
12700 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 69  e data for the i
12710 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a  -th column.    *
12720 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  /.    for(i=0; i
12730 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20  <nField; i++){. 
12740 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a 45       if( zIdx<zE
12750 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20  ndHdr ){.       
12760 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66   aOffset[i] = of
12770 66 73 65 74 3b 0a 20 20 20 20 20 20 20 20 69 66  fset;.        if
12780 28 20 7a 49 64 78 5b 30 5d 3c 30 78 38 30 20 29  ( zIdx[0]<0x80 )
12790 7b 0a 20 20 20 20 20 20 20 20 20 20 74 20 3d 20  {.          t = 
127a0 7a 49 64 78 5b 30 5d 3b 0a 20 20 20 20 20 20 20  zIdx[0];.       
127b0 20 20 20 7a 49 64 78 2b 2b 3b 0a 20 20 20 20 20     zIdx++;.     
127c0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
127d0 20 20 20 20 7a 49 64 78 20 2b 3d 20 73 71 6c 69      zIdx += sqli
127e0 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a  te3GetVarint32(z
127f0 49 64 78 2c 20 26 74 29 3b 0a 20 20 20 20 20 20  Idx, &t);.      
12800 20 20 7d 0a 20 20 20 20 20 20 20 20 61 54 79 70    }.        aTyp
12810 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20  e[i] = t;.      
12820 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c 69    szField = sqli
12830 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
12840 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20  eLen(t);.       
12850 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46 69 65   offset += szFie
12860 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ld;.        if( 
12870 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64 20 29  offset<szField )
12880 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 66  {  /* True if of
12890 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a  fset overflows *
128a0 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 49 64 78  /.          zIdx
128b0 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20   = &zEndHdr[1]; 
128c0 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c 49 54   /* Forces SQLIT
128d0 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75 72 6e  E_CORRUPT return
128e0 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20   below */.      
128f0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
12900 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
12910 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
12920 69 20 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e  i is less that n
12930 46 69 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72  Field, then ther
12940 65 20 61 72 65 20 6c 65 73 73 20 66 69 65 6c 64  e are less field
12950 73 20 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20  s in this.      
12960 20 20 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e    ** record than
12970 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69   SetNumColumns i
12980 6e 64 69 63 61 74 65 64 20 74 68 65 72 65 20 61  ndicated there a
12990 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  re columns in th
129a0 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62  e.        ** tab
129b0 6c 65 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73  le. Set the offs
129c0 65 74 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61  et for any extra
129d0 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65   columns not pre
129e0 73 65 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20  sent in.        
129f0 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  ** the record to
12a00 20 30 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63   0. This tells c
12a10 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f  ode below to sto
12a20 72 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20  re a NULL.      
12a30 20 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20    ** instead of 
12a40 64 65 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20  deserializing a 
12a50 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72  value from the r
12a60 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a  ecord..        *
12a70 2f 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65  /.        aOffse
12a80 74 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  t[i] = 0;.      
12a90 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
12aa0 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
12ab0 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d  e(&sMem);.    sM
12ac0 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  em.flags = MEM_N
12ad0 75 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  ull;..    /* If 
12ae0 77 65 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72  we have read mor
12af0 65 20 68 65 61 64 65 72 20 64 61 74 61 20 74 68  e header data th
12b00 61 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64  an was contained
12b10 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a   in the header,.
12b20 20 20 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65      ** or if the
12b30 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74   end of the last
12b40 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74   field appears t
12b50 6f 20 62 65 20 70 61 73 74 20 74 68 65 20 65 6e  o be past the en
12b60 64 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  d of the.    ** 
12b70 72 65 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68  record, or if th
12b80 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73  e end of the las
12b90 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20  t field appears 
12ba0 74 6f 20 62 65 20 62 65 66 6f 72 65 20 74 68 65  to be before the
12bb0 20 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74   end.    ** of t
12bc0 68 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20  he record (when 
12bd0 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65  all fields prese
12be0 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73  nt), then we mus
12bf0 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20  t be dealing .  
12c00 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72    ** with a corr
12c10 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20  upt database..  
12c20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49    */.    if( (zI
12c30 64 78 20 3e 20 7a 45 6e 64 48 64 72 29 20 7c 7c  dx > zEndHdr) ||
12c40 20 28 6f 66 66 73 65 74 20 3e 20 70 61 79 6c 6f   (offset > paylo
12c50 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 20 20  adSize).        
12c60 20 7c 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48   || (zIdx==zEndH
12c70 64 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70 61  dr && offset!=pa
12c80 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20  yloadSize) ){.  
12c90 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
12ca0 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
12cb0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12cc0 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20  mn_out;.    }.  
12cd0 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20  }..  /* Get the 
12ce0 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69  column informati
12cf0 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70  on. If aOffset[p
12d00 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  2] is non-zero, 
12d10 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72  then .  ** deser
12d20 69 61 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65  ialize the value
12d30 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
12d40 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  . If aOffset[p2]
12d50 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74   is zero,.  ** t
12d60 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f  hen there are no
12d70 74 20 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20  t enough fields 
12d80 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  in the record to
12d90 20 73 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a   satisfy the.  *
12da0 2a 20 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74  * request.  In t
12db0 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 74 68  his case, set th
12dc0 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20  e value NULL or 
12dd0 74 6f 20 50 34 20 69 66 20 50 34 20 69 73 0a 20  to P4 if P4 is. 
12de0 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   ** a pointer to
12df0 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20   a Mem object.. 
12e00 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65   */.  if( aOffse
12e10 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73  t[p2] ){.    ass
12e20 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
12e30 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  OK );.    if( zR
12e40 65 63 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65  ec ){.      Vdbe
12e50 4d 65 6d 52 65 6c 65 61 73 65 28 70 44 65 73 74  MemRelease(pDest
12e60 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
12e70 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75  VdbeSerialGet((u
12e80 38 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73 65  8 *)&zRec[aOffse
12e90 74 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32  t[p2]], aType[p2
12ea0 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  ], pDest);.    }
12eb0 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20  else{.      len 
12ec0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
12ed0 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65  ialTypeLen(aType
12ee0 5b 70 32 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c  [p2]);.      sql
12ef0 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
12f00 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20  &sMem, pDest);. 
12f10 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
12f20 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
12f30 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74  e(pCrsr, aOffset
12f40 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69  [p2], len, pC->i
12f50 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a  sIndex, &sMem);.
12f60 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
12f70 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
12f80 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
12f90 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  n_out;.      }. 
12fa0 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65       zData = sMe
12fb0 6d 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  m.z;.      sqlit
12fc0 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
12fd0 28 75 38 2a 29 7a 44 61 74 61 2c 20 61 54 79 70  (u8*)zData, aTyp
12fe0 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20  e[p2], pDest);. 
12ff0 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e     }.    pDest->
13000 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
13010 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28    }else{.    if(
13020 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
13030 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73 71  _MEM ){.      sq
13040 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
13050 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70  lowCopy(pDest, p
13060 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d  Op->p4.pMem, MEM
13070 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d 65  _Static);.    }e
13080 6c 73 65 7b 0a 20 20 20 20 20 20 4d 65 6d 53 65  lse{.      MemSe
13090 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
130a0 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
130b0 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77  }.  }..  /* If w
130c0 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  e dynamically al
130d0 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f  located space to
130e0 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28   hold the data (
130f0 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69  in the.  ** sqli
13100 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
13110 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  ree() call above
13120 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72 20  ) then transfer 
13130 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a  control of that.
13140 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79    ** dynamically
13150 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
13160 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44 65   over to the pDe
13170 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20  st structure..  
13180 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73  ** This prevents
13190 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a   a memory copy..
131a0 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e    */.  if( sMem.
131b0 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61  zMalloc ){.    a
131c0 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73  ssert( sMem.z==s
131d0 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20  Mem.zMalloc );. 
131e0 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65     assert( !(pDe
131f0 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  st->flags & MEM_
13200 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73 65  Dyn) );.    asse
13210 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61  rt( !(pDest->fla
13220 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
13230 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73  EM_Str)) || pDes
13240 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a  t->z==sMem.z );.
13250 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
13260 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c   &= ~(MEM_Ephem|
13270 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
13280 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d   pDest->flags |=
13290 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70   MEM_Term;.    p
132a0 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a  Dest->z = sMem.z
132b0 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61  ;.    pDest->zMa
132c0 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c  lloc = sMem.zMal
132d0 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d  loc;.  }..  rc =
132e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
132f0 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44 65  akeWriteable(pDe
13300 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  st);..op_column_
13310 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  out:.  UPDATE_MA
13320 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
13330 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
13340 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
13350 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st);.  break;.}.
13360 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69  ./* Opcode: Affi
13370 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20  nity P1 P2 * P4 
13380 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66  *.**.** Apply af
13390 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61  finities to a ra
133a0 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74  nge of P2 regist
133b0 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74  ers starting wit
133c0 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  h P1..**.** P4 i
133d0 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
133e0 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
133f0 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63   long. The nth c
13400 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
13410 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
13420 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
13430 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
13440 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
13450 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72  the nth.** memor
13460 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
13470 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
13480 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
13490 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
134a0 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
134b0 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
134c0 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63  lied */.  char c
134d0 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aff;            
134e0 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63     /* A single c
134f0 68 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69  haracter of affi
13500 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  nity */..  zAffi
13510 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
13520 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
13530 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
13540 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b  sert( zAffinity[
13550 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20  pOp->p2]==0 );. 
13560 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
13570 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28  p->p1];.  while(
13580 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69   (cAff = *(zAffi
13590 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20  nity++))!=0 ){. 
135a0 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20     assert( pIn1 
135b0 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e  <= &p->aMem[p->n
135c0 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  Mem] );.    asse
135d0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
135e0 49 6e 31 29 20 29 3b 0a 20 20 20 20 45 78 70 61  In1) );.    Expa
135f0 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
13600 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
13610 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f  pIn1, cAff, enco
13620 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b  ding);.    pIn1+
13630 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
13640 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  }../* Opcode: Ma
13650 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50  keRecord P1 P2 P
13660 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e  3 P4 *.**.** Con
13670 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
13680 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
13690 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
136a0 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
136b0 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
136c0 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
136d0 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
136e0 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
136f0 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
13700 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
13710 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
13720 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
13730 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
13740 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
13750 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
13760 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20  e nth character 
13770 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
13780 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
13790 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
137a0 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
137b0 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a  ed for the nth.*
137c0 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69  * field of the i
137d0 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20  ndex key..**.** 
137e0 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d  The mapping from
137f0 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66   character to af
13800 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20  finity is given 
13810 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  by the SQLITE_AF
13820 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66  F_.** macros def
13830 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e  ined in sqliteIn
13840 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  t.h..**.** If P4
13850 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c   is NULL then al
13860 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68  l index fields h
13870 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79  ave the affinity
13880 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NONE..*/.case O
13890 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a  P_MakeRecord: {.
138a0 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64    u8 *zNewRecord
138b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75  ;        /* A bu
138c0 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65  ffer to hold the
138d0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65   data for the ne
138e0 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  w record */.  Me
138f0 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20  m *pRec;        
13900 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
13910 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20  record */.  u64 
13920 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  nData;          
13930 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13940 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
13950 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64  ace */.  int nHd
13960 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
13970 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
13980 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
13990 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  ce */.  i64 nByt
139a0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
139b0 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71  * Data space req
139c0 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72  uired for this r
139d0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
139e0 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20  Zero;           
139f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
13a00 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
13a10 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
13a20 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72  rd */.  int nVar
13a30 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
13a40 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
13a50 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f  s in a varint */
13a60 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79  .  u32 serial_ty
13a70 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70  pe;       /* Typ
13a80 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d  e field */.  Mem
13a90 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20   *pData0;       
13aa0 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65      /* First fie
13ab0 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65  ld to be combine
13ac0 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  d into the recor
13ad0 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73  d */.  Mem *pLas
13ae0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
13af0 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74   Last field of t
13b00 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
13b10 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
13b20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13b30 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
13b40 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61   record */.  cha
13b50 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
13b60 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
13b70 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ity string for t
13b80 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
13b90 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  nt file_format; 
13ba0 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f        /* File fo
13bb0 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20  rmat to use for 
13bc0 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
13bd0 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
13be0 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
13bf0 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
13c00 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  [] */.  int len;
13c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13c20 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69  * Length of a fi
13c30 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  eld */..  /* Ass
13c40 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  uming the record
13c50 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c   contains N fiel
13c60 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66  ds, the record f
13c70 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a  ormat looks.  **
13c80 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a   like this:.  **
13c90 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
13ca0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13cb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13cc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13cd0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
13ce0 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c   ** | hdr-size |
13cf0 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31   type 0 | type 1
13d00 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d   | ... | type N-
13d10 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20  1 | data0 | ... 
13d20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20  | data N-1 | .  
13d30 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
13d40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13d50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13d60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13d70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
13d80 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73  .  ** Data(0) is
13d90 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
13da0 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31  ster P1.  Data(1
13db0 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67  ) comes from reg
13dc0 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20  ister P1+1.  ** 
13dd0 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20  and so froth..  
13de0 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70  **.  ** Each typ
13df0 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72  e field is a var
13e00 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67  int representing
13e10 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65   the serial type
13e20 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f   of the .  ** co
13e30 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61  rresponding data
13e40 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71   element (see sq
13e50 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
13e60 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a  ype()). The.  **
13e70 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20   hdr-size field 
13e80 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74  is also a varint
13e90 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
13ea0 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
13eb0 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20  ginning.  ** of 
13ec0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61  the record to da
13ed0 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74  ta0..  */.  nDat
13ee0 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
13ef0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
13f00 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
13f10 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20  */.  nHdr = 0;  
13f20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13f30 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
13f40 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
13f50 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20  nZero = 0;      
13f60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13f70 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
13f80 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
13f90 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  ord */.  nField 
13fa0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66  = pOp->p1;.  zAf
13fb0 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
13fc0 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46  .z;.  assert( nF
13fd0 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ield>0 && pOp->p
13fe0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
13ff0 46 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  Field<=p->nMem+1
14000 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
14010 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
14020 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
14030 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
14040 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
14050 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
14060 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
14070 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
14080 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
14090 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
140a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
140b0 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
140c0 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
140d0 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
140e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
140f0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
14100 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
14110 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
14120 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
14130 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
14140 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
14150 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
14160 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
14170 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
14180 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
14190 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30   for(pRec=pData0
141a0 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70  ; pRec<=pLast; p
141b0 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  Rec++){.    asse
141c0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
141d0 52 65 63 29 20 29 3b 0a 20 20 20 20 69 66 28 20  Rec) );.    if( 
141e0 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20  zAffinity ){.   
141f0 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
14200 28 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79  (pRec, zAffinity
14210 5b 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65  [pRec-pData0], e
14220 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a  ncoding);.    }.
14230 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
14240 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20  ags&MEM_Zero && 
14250 70 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20  pRec->n>0 ){.   
14260 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
14270 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63  mExpandBlob(pRec
14280 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72  );.    }.    ser
14290 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
142a0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
142b0 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
142c0 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73  at);.    len = s
142d0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
142e0 54 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74  TypeLen(serial_t
142f0 79 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20  ype);.    nData 
14300 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72  += len;.    nHdr
14310 20 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e   += sqlite3Varin
14320 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
14330 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
14340 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
14350 6f 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e  o ){.      /* On
14360 6c 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c  ly pure zero-fil
14370 6c 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65  led BLOBs can be
14380 20 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f   input to this O
14390 70 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20  pcode..      ** 
143a0 57 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  We do not allow 
143b0 62 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65  blobs with a pre
143c0 66 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66  fix and a zero-f
143d0 69 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20  illed tail. */. 
143e0 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52       nZero += pR
143f0 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
14400 20 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29   }else if( len )
14410 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20  {.      nZero = 
14420 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  0;.    }.  }..  
14430 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69  /* Add the initi
14440 61 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74  al header varint
14450 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73   and total the s
14460 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d  ize */.  nHdr +=
14470 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74   nVarint = sqlit
14480 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
14490 29 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74  );.  if( nVarint
144a0 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65  <sqlite3VarintLe
144b0 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e  n(nHdr) ){.    n
144c0 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79  Hdr++;.  }.  nBy
144d0 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d  te = nHdr+nData-
144e0 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79  nZero;.  if( nBy
144f0 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
14500 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
14510 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
14520 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f  oo_big;.  }..  /
14530 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
14540 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
14550 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72  has a buffer lar
14560 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f  ge enough to sto
14570 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77  re .  ** the new
14580 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74   record. The out
14590 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f  put register (pO
145a0 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c  p->p3) is not al
145b0 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65  lowed to.  ** be
145c0 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75   one of the inpu
145d0 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63  t registers (bec
145e0 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ause the followi
145f0 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20  ng call to.  ** 
14600 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
14610 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62  ow() could clobb
14620 65 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66  er the value bef
14630 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e  ore it is used).
14640 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
14650 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
14660 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c  Out, (int)nByte,
14670 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
14680 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
14690 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
146a0 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
146b0 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
146c0 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
146d0 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
146e0 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70  , nHdr);.  for(p
146f0 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
14700 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
14710 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
14720 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
14730 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
14740 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
14750 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74    i += putVarint
14760 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  32(&zNewRecord[i
14770 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  ], serial_type);
14780 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20        /* serial 
14790 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f  type */.  }.  fo
147a0 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
147b0 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
147c0 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20  ++){  /* serial 
147d0 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d  data */.    i +=
147e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
147f0 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
14800 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74  d[i], (int)(nByt
14810 65 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f  e-i), pRec,file_
14820 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61  format);.  }.  a
14830 73 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20  ssert( i==nByte 
14840 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
14850 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
14860 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
14870 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
14880 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
14890 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20  lags = MEM_Blob 
148a0 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75  | MEM_Dyn;.  pOu
148b0 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69  t->xDel = 0;.  i
148c0 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
148d0 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
148e0 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
148f0 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
14900 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ro;.  }.  pOut->
14910 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
14920 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
14930 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
14940 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78  converted to tex
14950 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f  t */.  REGISTER_
14960 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
14970 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
14980 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
14990 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
149a0 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
149b0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
149c0 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
149d0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
149e0 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
149f0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
14a00 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
14a10 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
14a20 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
14a30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
14a40 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
14a50 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
14a60 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
14a70 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
14a80 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42   i64 nEntry;.  B
14a90 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
14aa0 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70  .  pCrsr = p->ap
14ab0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43  Csr[pOp->p1]->pC
14ac0 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57  ursor;.  if( ALW
14ad0 41 59 53 28 70 43 72 73 72 29 20 29 7b 0a 20 20  AYS(pCrsr) ){.  
14ae0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
14af0 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20  reeCount(pCrsr, 
14b00 26 6e 45 6e 74 72 79 29 3b 0a 20 20 7d 65 6c 73  &nEntry);.  }els
14b10 65 7b 0a 20 20 20 20 6e 45 6e 74 72 79 20 3d 20  e{.    nEntry = 
14b20 30 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  0;.  }.  pOut->u
14b30 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62  .i = nEntry;.  b
14b40 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
14b50 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70  /* Opcode: Savep
14b60 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a  oint P1 * * P4 *
14b70 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c  .**.** Open, rel
14b80 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b  ease or rollback
14b90 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e   the savepoint n
14ba0 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65  amed by paramete
14bb0 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a  r P4, depending.
14bc0 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20  ** on the value 
14bd0 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61  of P1. To open a
14be0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20   new savepoint, 
14bf0 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73  P1==0. To releas
14c00 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a  e (commit) an.**
14c10 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
14c20 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74  int, P1==1, or t
14c30 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78  o rollback an ex
14c40 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
14c50 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20   P1==2..*/.case 
14c60 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a  OP_Savepoint: {.
14c70 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c90 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31    /* Value of P1
14ca0 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68   operand */.  ch
14cb0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14cd0 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69   Name of savepoi
14ce0 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d  nt */.  int nNam
14cf0 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  e;.  Savepoint *
14d00 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e  pNew;.  Savepoin
14d10 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  t *pSavepoint;. 
14d20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70   Savepoint *pTmp
14d30 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  ;.  int iSavepoi
14d40 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20  nt;.  int ii;.. 
14d50 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
14d60 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34   zName = pOp->p4
14d70 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74  .z;..  /* Assert
14d80 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72   that the p1 par
14d90 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e  ameter is valid.
14da0 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68   Also that if th
14db0 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20  ere is no open. 
14dc0 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c   ** transaction,
14dd0 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e   then there cann
14de0 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f  ot be any savepo
14df0 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73  ints. .  */.  as
14e00 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
14e10 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61  oint==0 || db->a
14e20 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
14e30 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41    assert( p1==SA
14e40 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70  VEPOINT_BEGIN||p
14e50 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
14e60 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EASE||p1==SAVEPO
14e70 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a  INT_ROLLBACK );.
14e80 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
14e90 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e  avepoint || db->
14ea0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
14eb0 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61  epoint==0 );.  a
14ec0 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
14ed0 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
14ee0 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56  ;..  if( p1==SAV
14ef0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a  EPOINT_BEGIN ){.
14f00 20 20 20 20 69 66 28 20 64 62 2d 3e 77 72 69 74      if( db->writ
14f10 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20  eVdbeCnt>0 ){.  
14f20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76      /* A new sav
14f30 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65  epoint cannot be
14f40 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72   created if ther
14f50 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
14f60 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61  te .      ** sta
14f70 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70  tements (i.e. op
14f80 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e  en read/write in
14f90 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68  cremental blob h
14fa0 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a  andles)..      *
14fb0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
14fc0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
14fd0 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
14fe0 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74  t open savepoint
14ff0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
15000 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
15010 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
15020 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
15030 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
15040 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
15050 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
15060 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
15070 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
15080 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
15090 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
150a0 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
150b0 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
150c0 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
150d0 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
150e0 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
150f0 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
15100 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
15110 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
15120 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
15130 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
15140 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
15150 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
15160 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
15170 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
15180 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
15190 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
151a0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
151b0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
151c0 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
151d0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
151e0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
151f0 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
15200 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15220 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
15230 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
15240 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
15250 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
15260 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
15270 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
15280 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
15290 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
152a0 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
152b0 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
152c0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
152d0 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
152e0 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
152f0 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
15300 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
15310 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
15320 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
15330 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
15340 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
15350 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
15360 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
15370 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
15380 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
15390 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
153a0 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
153b0 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
153c0 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
153d0 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
153e0 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
153f0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
15400 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
15410 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
15420 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
15430 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
15440 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
15450 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
15460 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
15470 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73  * Link the new s
15480 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68  avepoint into th
15490 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
154a0 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20  e's list. */.   
154b0 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74       pNew->pNext
154c0 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
154d0 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
154e0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77  Savepoint = pNew
154f0 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
15500 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
15510 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
15520 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  s;.      }.    }
15530 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53  .  }else{.    iS
15540 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20  avepoint = 0;.. 
15550 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e     /* Find the n
15560 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  amed savepoint. 
15570 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
15580 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74  uch savepoint, t
15590 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e  hen an.    ** an
155a0 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
155b0 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
155c0 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20   */.    for(.   
155d0 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
155e0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
155f0 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
15600 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49  t && sqlite3StrI
15610 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e  Cmp(pSavepoint->
15620 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20  zName, zName);. 
15630 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
15640 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
15650 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  ext.    ){.     
15660 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20   iSavepoint++;. 
15670 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53     }.    if( !pS
15680 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
15690 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
156a0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
156b0 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76  db, "no such sav
156c0 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61  epoint: %s", zNa
156d0 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  me);.      rc = 
156e0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
156f0 20 20 7d 65 6c 73 65 20 69 66 28 20 0a 20 20 20    }else if( .   
15700 20 20 20 20 20 64 62 2d 3e 77 72 69 74 65 56 64       db->writeVd
15710 62 65 43 6e 74 3e 30 20 7c 7c 20 28 70 31 3d 3d  beCnt>0 || (p1==
15720 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
15730 43 4b 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65  CK && db->active
15740 56 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20  VdbeCnt>1) .    
15750 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69  ){.      /* It i
15760 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
15770 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
15780 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69  t) a savepoint i
15790 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20  f there are .   
157a0 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69     ** active wri
157b0 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  te statements. I
157c0 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
157d0 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 20  e to rollback a 
157e0 73 61 76 65 70 6f 69 6e 74 0a 20 20 20 20 20 20  savepoint.      
157f0 2a 2a 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ** if there are 
15800 61 6e 79 20 61 63 74 69 76 65 20 73 74 61 74 65  any active state
15810 6d 65 6e 74 73 20 61 74 20 61 6c 6c 2e 0a 20 20  ments at all..  
15820 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
15830 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
15840 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a  ->zErrMsg, db, .
15850 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
15860 25 73 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53  %s savepoint - S
15870 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
15880 20 70 72 6f 67 72 65 73 73 22 2c 0a 20 20 20 20   progress",.    
15890 20 20 20 20 28 70 31 3d 3d 53 41 56 45 50 4f 49      (p1==SAVEPOI
158a0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 3f 20 22 72  NT_ROLLBACK ? "r
158b0 6f 6c 6c 62 61 63 6b 22 3a 20 22 72 65 6c 65 61  ollback": "relea
158c0 73 65 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20  se").      );.  
158d0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
158e0 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
158f0 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72  ..      /* Deter
15900 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
15910 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72  not this is a tr
15920 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
15930 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20  int. If so,.    
15940 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73    ** and this is
15950 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
15960 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  nd, then the cur
15970 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
15980 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f   .      ** is co
15990 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20  mmitted. .      
159a0 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54  */.      int isT
159b0 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61  ransaction = pSa
159c0 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d  vepoint->pNext==
159d0 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73  0 && db->isTrans
159e0 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
159f0 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61  .      if( isTra
15a00 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d  nsaction && p1==
15a10 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
15a20 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  E ){.        if(
15a30 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
15a40 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
15a50 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
15a60 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
15a70 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
15a80 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
15a90 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
15aa0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
15ab0 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
15ac0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
15ad0 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20            p->pc 
15ae0 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 20 20  = pc;.          
15af0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
15b00 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   0;.          p-
15b10 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
15b20 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
15b30 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
15b40 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
15b50 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
15b60 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
15b70 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63   = 0;.        rc
15b80 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20   = p->rc;.      
15b90 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69  }else{.        i
15ba0 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
15bb0 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61  nSavepoint - iSa
15bc0 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20  vepoint - 1;.   
15bd0 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
15be0 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
15bf0 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
15c00 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76   sqlite3BtreeSav
15c10 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69  epoint(db->aDb[i
15c20 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76  i].pBt, p1, iSav
15c30 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
15c40 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
15c50 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
15c60 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
15c70 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
15c80 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
15c90 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70   }.        if( p
15ca0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
15cb0 4c 42 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c  LBACK && (db->fl
15cc0 61 67 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72  ags&SQLITE_Inter
15cd0 6e 43 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a  nChanges)!=0 ){.
15ce0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
15cf0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
15d00 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
15d10 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
15d20 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
15d30 65 6d 61 28 64 62 2c 20 2d 31 29 3b 0a 20 20 20  ema(db, -1);.   
15d40 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
15d50 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20   = (db->flags | 
15d60 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
15d70 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d  nges);.        }
15d80 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
15d90 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20    /* Regardless 
15da0 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20  of whether this 
15db0 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20  is a RELEASE or 
15dc0 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f  ROLLBACK, destro
15dd0 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20  y all .      ** 
15de0 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65  savepoints neste
15df0 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20  d inside of the 
15e00 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
15e10 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a  operated on. */.
15e20 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d        while( db-
15e30 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61  >pSavepoint!=pSa
15e40 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
15e50 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53     pTmp = db->pS
15e60 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
15e70 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
15e80 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a   = pTmp->pNext;.
15e90 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
15ea0 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b  bFree(db, pTmp);
15eb0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61  .        db->nSa
15ec0 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
15ed0 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
15ee0 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c  it is a RELEASE,
15ef0 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68   then destroy th
15f00 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
15f10 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20  g operated on . 
15f20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20       ** too. If 
15f30 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b  it is a ROLLBACK
15f40 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68   TO, then set th
15f50 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  e number of defe
15f60 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63  rred .      ** c
15f70 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
15f80 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20  ions present in 
15f90 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
15fa0 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
15fb0 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74  .      ** when t
15fc0 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73  he savepoint was
15fd0 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20   created.  */.  
15fe0 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
15ff0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
16000 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
16010 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d   pSavepoint==db-
16020 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20  >pSavepoint );. 
16030 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
16040 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
16050 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  nt->pNext;.     
16060 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
16070 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29  (db, pSavepoint)
16080 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69  ;.        if( !i
16090 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a  sTransaction ){.
160a0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
160b0 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
160c0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
160d0 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  e{.        db->n
160e0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70  DeferredCons = p
160f0 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
16100 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
16110 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69 73  }..      if( !is
16120 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20  Transaction ){. 
16130 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
16140 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
16150 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  (db, p1, iSavepo
16160 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
16170 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
16180 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
16190 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
161a0 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20   }.    }.  }..  
161b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
161c0 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20  ode: AutoCommit 
161d0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
161e0 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61  * Set the databa
161f0 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  se auto-commit f
16200 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20  lag to P1 (1 or 
16210 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75  0). If P2 is tru
16220 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20  e, roll.** back 
16230 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63  any currently ac
16240 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73  tive btree trans
16250 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72  actions. If ther
16260 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65  e are any active
16270 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66  .** VMs (apart f
16280 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74  rom this one), t
16290 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66  hen a ROLLBACK f
162a0 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20  ails.  A COMMIT 
162b0 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72  fails if.** ther
162c0 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
162d0 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69  ting VMs or acti
162e0 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20  ve VMs that use 
162f0 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a  shared cache..**
16300 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
16310 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20  tion causes the 
16320 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63  VM to halt..*/.c
16330 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69  ase OP_AutoCommi
16340 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72  t: {.  int desir
16350 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
16360 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20  int iRollback;. 
16370 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a   int turnOnAC;..
16380 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d    desiredAutoCom
16390 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  mit = pOp->p1;. 
163a0 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70   iRollback = pOp
163b0 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43  ->p2;.  turnOnAC
163c0 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f   = desiredAutoCo
163d0 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74  mmit && !db->aut
163e0 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72  oCommit;.  asser
163f0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
16400 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
16410 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
16420 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
16430 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
16440 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d  1 || iRollback==
16450 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
16460 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
16470 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61  >0 );  /* At lea
16480 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69  st this one VM i
16490 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69  s active */..  i
164a0 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69  f( turnOnAC && i
164b0 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e  Rollback && db->
164c0 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20  activeVdbeCnt>1 
164d0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69  ){.    /* If thi
164e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
164f0 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42  plements a ROLLB
16500 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  ACK and other VM
16510 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69  s are.    ** sti
16520 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20  ll running, and 
16530 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
16540 20 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20   active, return 
16550 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
16560 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20  ing.    ** that 
16570 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
16580 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
16590 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  t. .    */.    s
165a0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
165b0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
165c0 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63   "cannot rollbac
165d0 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  k transaction - 
165e0 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
165f0 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
16600 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20  gress");.    rc 
16610 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
16620 20 7d 65 6c 73 65 20 69 66 28 20 74 75 72 6e 4f   }else if( turnO
16630 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63  nAC && !iRollbac
16640 6b 20 26 26 20 64 62 2d 3e 77 72 69 74 65 56 64  k && db->writeVd
16650 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20 2f  beCnt>0 ){.    /
16660 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75  * If this instru
16670 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
16680 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74   a COMMIT and ot
16690 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69 74  her VMs are writ
166a0 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72  ing.    ** retur
166b0 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
166c0 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f  ating that the o
166d0 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
166e0 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
166f0 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
16700 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
16710 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
16720 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
16730 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
16740 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
16750 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
16760 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
16770 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20  E_BUSY;.  }else 
16780 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
16790 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43  ommit!=db->autoC
167a0 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28  ommit ){.    if(
167b0 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20   iRollback ){.  
167c0 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69      assert( desi
167d0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
167e0 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
167f0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29  3RollbackAll(db)
16800 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
16810 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
16820 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20  }else if( (rc = 
16830 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
16840 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
16850 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
16860 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
16870 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
16880 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
16890 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74  = (u8)desiredAut
168a0 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69  oCommit;.      i
168b0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
168c0 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
168d0 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d  SY ){.        p-
168e0 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
168f0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
16900 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65   = (u8)(1-desire
16910 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20  dAutoCommit);.  
16920 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
16930 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
16940 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
16950 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
16960 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
16970 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
16980 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  nt==0 );.    sql
16990 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
169a0 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28  nts(db);.    if(
169b0 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   p->rc==SQLITE_O
169c0 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
169d0 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20  SQLITE_DONE;.   
169e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
169f0 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
16a00 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20  .    }.    goto 
16a10 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d  vdbe_return;.  }
16a20 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
16a30 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
16a40 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20  ErrMsg, db,.    
16a50 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74      (!desiredAut
16a60 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74  oCommit)?"cannot
16a70 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63   start a transac
16a80 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72  tion within a tr
16a90 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20  ansaction":(.   
16aa0 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29       (iRollback)
16ab0 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
16ac0 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
16ad0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16af0 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
16b00 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
16b10 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
16b20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
16b30 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
16b40 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
16b50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
16b60 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20  saction P1 P2 * 
16b70 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20  * *.**.** Begin 
16b80 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  a transaction.  
16b90 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  The transaction 
16ba0 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d  ends when a Comm
16bb0 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a  it or Rollback.*
16bc0 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f  * opcode is enco
16bd0 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64  untered.  Depend
16be0 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f  ing on the ON CO
16bf0 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20  NFLICT setting, 
16c00 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  the.** transacti
16c10 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65  on might also be
16c20 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20   rolled back if 
16c30 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  an error is enco
16c40 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  untered..**.** P
16c50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
16c60 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
16c70 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
16c80 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
16c90 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
16ca0 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
16cb0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
16cc0 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
16cd0 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
16ce0 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
16cf0 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
16d00 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
16d10 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
16d20 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
16d30 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  *.** If P2 is no
16d40 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77  n-zero, then a w
16d50 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
16d60 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41 20   is started.  A 
16d70 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73  RESERVED lock is
16d80 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20  .** obtained on 
16d90 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
16da0 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74  e when a write-t
16db0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
16dc0 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74  arted.  No.** ot
16dd0 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20  her process can 
16de0 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72  start another wr
16df0 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
16e00 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73  while this trans
16e10 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64  action is.** und
16e20 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67  erway.  Starting
16e30 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
16e40 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65  tion also create
16e50 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
16e60 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65  rnal. A.** write
16e70 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73   transaction mus
16e80 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66  t be started bef
16e90 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ore any changes 
16ea0 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
16eb0 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  he.** database. 
16ec0 20 49 66 20 50 32 20 69 73 20 32 20 6f 72 20 67   If P2 is 2 or g
16ed0 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20 45  reater then an E
16ee0 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73  XCLUSIVE lock is
16ef0 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a   also obtained.*
16f00 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a  * on the file..*
16f10 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d  *.** If a write-
16f20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
16f30 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56  tarted and the V
16f40 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72  dbe.usesStmtJour
16f50 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74  nal flag is.** t
16f60 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69  rue (this flag i
16f70 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62  s set if the Vdb
16f80 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72  e may modify mor
16f90 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61  e than one row a
16fa0 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20  nd may.** throw 
16fb0 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
16fc0 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  on), a statement
16fd0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
16fe0 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e   also be opened.
16ff0 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69  .** More specifi
17000 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65  cally, a stateme
17010 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
17020 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65  s opened iff the
17030 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
17040 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
17050 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f  ntly not in auto
17060 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20  commit mode, or 
17070 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68  if there are oth
17080 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61  er.** active sta
17090 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65  tements. A state
170a0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
170b0 20 61 6c 6c 6f 77 73 20 74 68 65 20 61 66 66 65   allows the affe
170c0 63 74 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20 56  cts of this.** V
170d0 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  DBE to be rolled
170e0 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65   back after an e
170f0 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76  rror without hav
17100 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b  ing to roll back
17110 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74   the.** entire t
17120 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e  ransaction. If n
17130 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75  o error is encou
17140 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74  ntered, the stat
17150 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
17160 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61  n.** will automa
17170 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77  tically commit w
17180 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c  hen the VDBE hal
17190 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20  ts..**.** If P2 
171a0 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  is zero, then a 
171b0 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74  read-lock is obt
171c0 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74  ained on the dat
171d0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63  abase file..*/.c
171e0 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69  ase OP_Transacti
171f0 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70  on: {.  Btree *p
17200 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
17210 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
17220 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
17230 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
17240 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
17250 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31  Mask)1)<<pOp->p1
17260 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ))!=0 );.  pBt =
17270 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
17280 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42  ].pBt;..  if( pB
17290 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
172a0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
172b0 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70  rans(pBt, pOp->p
172c0 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  2);.    if( rc==
172d0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
172e0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
172f0 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  .      p->rc = r
17300 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
17310 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
17320 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20  _return;.    }. 
17330 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
17340 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
17350 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
17360 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20  error;.    }..  
17370 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
17380 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
17390 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62  nal .     && (db
173a0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
173b0 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  || db->activeVdb
173c0 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b 0a  eCnt>1) .    ){.
173d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
173e0 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72  lite3BtreeIsInTr
173f0 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20  ans(pBt) );.    
17400 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d    if( p->iStatem
17410 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ent==0 ){.      
17420 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53    assert( db->nS
17430 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64  tatement>=0 && d
17440 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30  b->nSavepoint>=0
17450 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   );.        db->
17460 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20  nStatement++; . 
17470 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65         p->iState
17480 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  ment = db->nSave
17490 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61  point + db->nSta
174a0 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a  tement;.      }.
174b0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
174c0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
174d0 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42  (db, SAVEPOINT_B
174e0 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d  EGIN, p->iStatem
174f0 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66  ent-1);.      if
17500 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
17510 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
17520 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
17530 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53  nStmt(pBt, p->iS
17540 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20  tatement);.     
17550 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f   }..      /* Sto
17560 72 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76  re the current v
17570 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61  alue of the data
17580 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66  base handles def
17590 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
175a0 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65  .      ** counte
175b0 72 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d  r. If the statem
175c0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
175d0 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
175e0 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a  ed back,.      *
175f0 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
17600 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64  his counter need
17610 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64  s to be restored
17620 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20   too.  */.      
17630 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20  p->nStmtDefCons 
17640 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  = db->nDeferredC
17650 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ons;.    }.  }. 
17660 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
17670 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65  code: ReadCookie
17680 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
17690 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20  .** Read cookie 
176a0 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64  number P3 from d
176b0 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77  atabase P1 and w
176c0 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67  rite it into reg
176d0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d  ister P2..** P3=
176e0 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
176f0 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32   version.  P3==2
17700 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
17710 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d   format..** P3==
17720 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  3 is the recomme
17730 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
17740 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
17750 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a  rth.  P1==0 is.*
17760 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
17770 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
17780 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
17790 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
177a0 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61  store.** tempora
177b0 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
177c0 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   There must be a
177d0 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68   read-lock on th
177e0 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68  e database (eith
177f0 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  er a transaction
17800 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72  .** must be star
17810 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73  ted or there mus
17820 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72  t be an open cur
17830 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65  sor) before.** e
17840 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e  xecuting this in
17850 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
17860 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  se OP_ReadCookie
17870 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
17880 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
17890 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  ease */.  int iM
178a0 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  eta;.  int iDb;.
178b0 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a    int iCookie;..
178c0 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
178d0 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70  .  iCookie = pOp
178e0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
178f0 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e  pOp->p3<SQLITE_N
17900 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
17910 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
17920 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
17930 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
17940 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20  aDb[iDb].pBt!=0 
17950 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
17960 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
17970 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29  yDbMask)1)<<iDb)
17980 29 21 3d 30 20 29 3b 0a 0a 20 20 73 71 6c 69 74  )!=0 );..  sqlit
17990 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64  e3BtreeGetMeta(d
179a0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
179b0 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a   iCookie, (u32 *
179c0 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74  )&iMeta);.  pOut
179d0 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20  ->u.i = iMeta;. 
179e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
179f0 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20  code: SetCookie 
17a00 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
17a10 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e  ** Write the con
17a20 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
17a30 20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64   P3 (interpreted
17a40 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a   as an integer).
17a50 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e  ** into cookie n
17a60 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61  umber P2 of data
17a70 62 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20  base P1.  P2==1 
17a80 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
17a90 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d  rsion.  .** P2==
17aa0 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
17ab0 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20  e format. P2==3 
17ac0 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
17ad0 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a  ed pager cache .
17ae0 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  ** size, and so 
17af0 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
17b00 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
17b10 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
17b20 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74  1 is the .** dat
17b30 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
17b40 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61  to store tempora
17b50 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
17b60 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d   A transaction m
17b70 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
17b80 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20  efore executing 
17b90 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
17ba0 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69  case OP_SetCooki
17bb0 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  e: {       /* in
17bc0 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a  3 */.  Db *pDb;.
17bd0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
17be0 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  2<SQLITE_N_BTREE
17bf0 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
17c00 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
17c10 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
17c20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
17c30 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
17c40 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
17c50 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
17c60 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
17c70 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
17c80 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
17c90 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
17ca0 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
17cb0 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  d(db, pOp->p1, 0
17cc0 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  ) );.  pIn3 = &a
17cd0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
17ce0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
17cf0 74 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a  tegerify(pIn3);.
17d00 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62    /* See note ab
17d10 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69  out index shifti
17d20 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f  ng on OP_ReadCoo
17d30 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  kie */.  rc = sq
17d40 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65  lite3BtreeUpdate
17d50 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70  Meta(pDb->pBt, p
17d60 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e  Op->p2, (int)pIn
17d70 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70  3->u.i);.  if( p
17d80 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43  Op->p2==BTREE_SC
17d90 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a  HEMA_VERSION ){.
17da0 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20      /* When the 
17db0 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
17dc0 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68  anges, record th
17dd0 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74  e new cookie int
17de0 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70  ernally */.    p
17df0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68  Db->pSchema->sch
17e00 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e  ema_cookie = (in
17e10 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn3->u.i;.   
17e20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
17e30 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
17e40 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  es;.  }else if( 
17e50 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46  pOp->p2==BTREE_F
17e60 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20  ILE_FORMAT ){.  
17e70 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e    /* Record chan
17e80 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20  ges in the file 
17e90 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44  format */.    pD
17ea0 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
17eb0 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49  _format = (u8)pI
17ec0 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69  n3->u.i;.  }.  i
17ed0 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b  f( pOp->p1==1 ){
17ee0 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  .    /* Invalida
17ef0 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20  te all prepared 
17f00 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65  statements whene
17f10 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  ver the TEMP dat
17f20 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68  abase.    ** sch
17f30 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ema is changed. 
17f40 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f   Ticket #1644 */
17f50 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
17f60 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
17f70 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d  ents(db);.    p-
17f80 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
17f90 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
17fa0 20 4f 70 63 6f 64 65 3a 20 56 65 72 69 66 79 43   Opcode: VerifyC
17fb0 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
17fc0 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74   *.**.** Check t
17fd0 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62  he value of glob
17fe0 61 6c 20 64 61 74 61 62 61 73 65 20 70 61 72 61  al database para
17ff0 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30 20 28  meter number 0 (
18000 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65  the.** schema ve
18010 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20  rsion) and make 
18020 73 75 72 65 20 69 74 20 69 73 20 65 71 75 61 6c  sure it is equal
18030 20 74 6f 20 50 32 20 61 6e 64 20 74 68 61 74 20   to P2 and that 
18040 74 68 65 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f  the.** generatio
18050 6e 20 63 6f 75 6e 74 65 72 20 6f 6e 20 74 68 65  n counter on the
18060 20 6c 6f 63 61 6c 20 73 63 68 65 6d 61 20 70 61   local schema pa
18070 72 73 65 20 65 71 75 61 6c 73 20 50 33 2e 0a 2a  rse equals P3..*
18080 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 64  *.** P1 is the d
18090 61 74 61 62 61 73 65 20 6e 75 6d 62 65 72 20 77  atabase number w
180a0 68 69 63 68 20 69 73 20 30 20 66 6f 72 20 74 68  hich is 0 for th
180b0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
180c0 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31 20 66 6f  file.** and 1 fo
180d0 72 20 74 68 65 20 66 69 6c 65 20 68 6f 6c 64 69  r the file holdi
180e0 6e 67 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ng temporary tab
180f0 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20 68 69 67  les and some hig
18100 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f  her number.** fo
18110 72 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  r auxiliary data
18120 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  bases..**.** The
18130 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20   cookie changes 
18140 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76  its value whenev
18150 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
18160 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a  schema changes..
18170 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
18180 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  n is used to det
18190 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68  ect when that th
181a0 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61  e cookie has cha
181b0 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74  nged.** and that
181c0 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
181d0 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65  cess needs to re
181e0 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e  read the schema.
181f0 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72 20 61 20  .**.** Either a 
18200 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64  transaction need
18210 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 73  s to have been s
18220 74 61 72 74 65 64 20 6f 72 20 61 6e 20 4f 50 5f  tarted or an OP_
18230 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a 20 74 6f  Open needs.** to
18240 20 62 65 20 65 78 65 63 75 74 65 64 20 28 74 6f   be executed (to
18250 20 65 73 74 61 62 6c 69 73 68 20 61 20 72 65 61   establish a rea
18260 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72 65 20 74  d lock) before t
18270 68 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a  his opcode is.**
18280 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73   invoked..*/.cas
18290 65 20 4f 50 5f 56 65 72 69 66 79 43 6f 6f 6b 69  e OP_VerifyCooki
182a0 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 65 74 61  e: {.  int iMeta
182b0 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 20 20  ;.  int iGen;.  
182c0 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61  Btree *pBt;..  a
182d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
182e0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
182f0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
18300 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
18310 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
18320 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
18330 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
18340 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
18350 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  d(db, pOp->p1, 0
18360 29 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  ) );.  pBt = db-
18370 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
18380 74 3b 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  t;.  if( pBt ){.
18390 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
183a0 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52  GetMeta(pBt, BTR
183b0 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
183c0 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  N, (u32 *)&iMeta
183d0 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62  );.    iGen = db
183e0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
183f0 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74  Schema->iGenerat
18400 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ion;.  }else{.  
18410 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d    iGen = iMeta =
18420 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 4d   0;.  }.  if( iM
18430 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20 7c 7c 20  eta!=pOp->p2 || 
18440 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 33 20 29 7b  iGen!=pOp->p3 ){
18450 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
18460 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
18470 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
18480 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
18490 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61  rDup(db, "databa
184a0 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
184b0 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20  anged");.    /* 
184c0 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f  If the schema-co
184d0 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61  okie from the da
184e0 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63  tabase file matc
184f0 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a  hes the cookie .
18500 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69      ** stored wi
18510 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  th the in-memory
18520 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
18530 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64  of the schema, d
18540 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c  o.    ** not rel
18550 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66  oad the schema f
18560 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
18570 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20   file..    **.  
18580 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d    ** If virtual-
18590 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73  tables are in us
185a0 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a  e, this is not j
185b0 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ust an optimizat
185c0 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65  ion..    ** Ofte
185d0 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72  n, v-tables stor
185e0 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20  e their data in 
185f0 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62  other SQLite tab
18600 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a  les, which.    *
18610 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72  * are queried fr
18620 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28  om within xNext(
18630 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61  ) and other v-ta
18640 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e  ble methods usin
18650 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65  g.    ** prepare
18660 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75  d queries. If su
18670 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75  ch a query is ou
18680 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f  t-of-date, we do
18690 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20   not want to.   
186a0 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20   ** discard the 
186b0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
186c0 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64   as the user cod
186d0 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  e implementing t
186e0 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c  he.    ** v-tabl
186f0 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20  e would have to 
18700 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65  be ready for the
18710 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
18720 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20  ructure itself. 
18730 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61     ** to be inva
18740 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72  lidated whenever
18750 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
18760 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  is called from w
18770 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20  ithin .    ** a 
18780 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a  v-table method..
18790 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
187a0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
187b0 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
187c0 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b  cookie!=iMeta ){
187d0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
187e0 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
187f0 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
18800 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 65 78      }..    p->ex
18810 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72  pired = 1;.    r
18820 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  c = SQLITE_SCHEM
18830 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  A;.  }.  break;.
18840 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
18850 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
18860 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
18870 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72   a read-only cur
18880 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61  sor for the data
18890 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65  base table whose
188a0 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a   root page is.**
188b0 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73   P2 in a databas
188c0 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74  e file.  The dat
188d0 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65  abase file is de
188e0 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20  termined by P3. 
188f0 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20  .** P3==0 means 
18900 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
18910 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74  e, P3==1 means t
18920 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
18930 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61   for .** tempora
18940 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50  ry tables, and P
18950 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74  3>1 means used t
18960 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
18970 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74   attached.** dat
18980 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65  abase.  Give the
18990 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69   new cursor an i
189a0 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e  dentifier of P1.
189b0 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75    The P1.** valu
189c0 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63  es need not be c
189d0 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c  ontiguous but al
189e0 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75  l P1 values shou
189f0 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65  ld be small inte
18a00 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61  gers..** It is a
18a10 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74  n error for P1 t
18a20 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a  o be negative..*
18a30 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
18a40 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  en use the conte
18a50 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
18a60 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61  2 as the root pa
18a70 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76  ge, not.** the v
18a80 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c  alue of P2 itsel
18a90 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77  f..**.** There w
18aa0 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f  ill be a read lo
18ab0 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
18ac0 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72  se whenever ther
18ad0 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20  e is an.** open 
18ae0 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20  cursor.  If the 
18af0 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c  database was unl
18b00 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74  ocked prior to t
18b10 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  his instruction.
18b20 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c  ** then a read l
18b30 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20  ock is acquired 
18b40 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20  as part of this 
18b50 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20  instruction.  A 
18b60 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c  read.** lock all
18b70 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73  ows other proces
18b80 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20  ses to read the 
18b90 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f  database but pro
18ba0 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74  hibits.** any ot
18bb0 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d  her process from
18bc0 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64   modifying the d
18bd0 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65  atabase.  The re
18be0 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65  ad lock is.** re
18bf0 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20  leased when all 
18c00 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73  cursors are clos
18c10 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73  ed.  If this ins
18c20 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74  truction attempt
18c30 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65  s.** to get a re
18c40 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c  ad lock but fail
18c50 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65  s, the script te
18c60 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e  rminates with an
18c70 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
18c80 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  error code..**.*
18c90 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
18ca0 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
18cb0 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
18cc0 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
18cd0 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
18ce0 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
18cf0 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
18d00 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
18d10 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
18d20 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
18d30 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
18d40 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
18d50 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
18d60 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
18d70 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
18d80 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
18d90 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
18da0 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
18db0 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
18dc0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
18dd0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a  s in the table..
18de0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f  **.** See also O
18df0 70 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20  penWrite..*/./* 
18e00 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74  Opcode: OpenWrit
18e10 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
18e20 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
18e30 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
18e40 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20  named P1 on the 
18e50 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
18e60 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67  hose root.** pag
18e70 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20  e is P2.  Or if 
18e80 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f  P5!=0 use the co
18e90 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
18ea0 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65  r P2 to find the
18eb0 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a  .** root page..*
18ec0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
18ed0 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
18ee0 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
18ef0 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
18f00 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
18f10 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
18f20 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
18f30 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
18f40 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
18f50 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
18f60 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
18f70 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
18f80 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
18f90 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
18fa0 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
18fb0 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
18fc0 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
18fd0 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
18fe0 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
18ff0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
19000 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
19010 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20  e, or to the.** 
19020 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66  largest index of
19030 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   any column of t
19040 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
19050 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a   actually used..
19060 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
19070 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73  uction works jus
19080 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  t like OpenRead 
19090 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
190a0 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
190b0 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
190c0 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69   mode.  For a gi
190d0 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65  ven table, there
190e0 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d   can be one or m
190f0 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a  ore read-only.**
19100 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69   cursors or a si
19110 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20  ngle read/write 
19120 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62  cursor but not b
19130 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  oth..**.** See a
19140 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f  lso OpenRead..*/
19150 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61  .case OP_OpenRea
19160 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57  d:.case OP_OpenW
19170 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 46  rite: {.  int nF
19180 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  ield;.  KeyInfo 
19190 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
191a0 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a   p2;.  int iDb;.
191b0 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20    int wrFlag;.  
191c0 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62  Btree *pX;.  Vdb
191d0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
191e0 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 69 66 28   Db *pDb;..  if(
191f0 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
19200 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
19210 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b 3b  BORT;.    break;
19220 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
19230 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d   0;.  pKeyInfo =
19240 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e   0;.  p2 = pOp->
19250 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  p2;.  iDb = pOp-
19260 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p3;.  assert( i
19270 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
19280 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
19290 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
192a0 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
192b0 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70  <iDb))!=0 );.  p
192c0 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
192d0 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e  b];.  pX = pDb->
192e0 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pBt;.  assert( p
192f0 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  X!=0 );.  if( pO
19300 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
19310 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77  enWrite ){.    w
19320 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61  rFlag = 1;.    a
19330 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
19340 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
19350 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
19360 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d   if( pDb->pSchem
19370 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c  a->file_format <
19380 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
19390 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20  Format ){.      
193a0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
193b0 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63  ormat = pDb->pSc
193c0 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
193d0 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  t;.    }.  }else
193e0 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30  {.    wrFlag = 0
193f0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
19400 3e 70 35 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p5 ){.    asser
19410 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
19420 73 73 65 72 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d  ssert( p2<=p->nM
19430 65 6d 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d  em );.    pIn2 =
19440 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20   &aMem[p2];.    
19450 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
19460 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20  id(pIn2) );.    
19470 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
19480 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
19490 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
194a0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
194b0 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32  fy(pIn2);.    p2
194c0 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e   = (int)pIn2->u.
194d0 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32  i;.    /* The p2
194e0 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f   value always co
194f0 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72  mes from a prior
19500 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
19510 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a  opcode and.    *
19520 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69  * that opcode wi
19530 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68  ll always set th
19540 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20  e p2 value to 2 
19550 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20  or more or else 
19560 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20  fail..    ** If 
19570 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69  there were a fai
19580 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72  lure, the prepar
19590 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  ed statement wou
195a0 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20  ld have halted. 
195b0 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61     ** before rea
195c0 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  ching this instr
195d0 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69  uction. */.    i
195e0 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29  f( NEVER(p2<2) )
195f0 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51   {.      rc = SQ
19600 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
19610 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  T;.      goto ab
19620 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
19630 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
19640 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
19650 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20  4_KEYINFO ){.   
19660 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
19670 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
19680 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20    pKeyInfo->enc 
19690 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20  = ENC(p->db);.  
196a0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49    nField = pKeyI
196b0 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b 0a 20  nfo->nField+1;. 
196c0 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
196d0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
196e0 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   ){.    nField =
196f0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a   pOp->p4.i;.  }.
19700 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
19710 31 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72 20 3d  1>=0 );.  pCur =
19720 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
19730 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65  p, pOp->p1, nFie
19740 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20 69  ld, iDb, 1);.  i
19750 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74  f( pCur==0 ) got
19760 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72  o no_mem;.  pCur
19770 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
19780 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64   pCur->isOrdered
19790 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
197a0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
197b0 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20  pX, p2, wrFlag, 
197c0 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e  pKeyInfo, pCur->
197d0 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72  pCursor);.  pCur
197e0 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65  ->pKeyInfo = pKe
197f0 79 49 6e 66 6f 3b 0a 0a 20 20 2f 2a 20 53 69 6e  yInfo;..  /* Sin
19800 63 65 20 69 74 20 70 65 72 66 6f 72 6d 73 20 6e  ce it performs n
19810 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  o memory allocat
19820 69 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f  ion or IO, the o
19830 6e 6c 79 20 76 61 6c 75 65 20 74 68 61 74 0a 20  nly value that. 
19840 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
19850 43 75 72 73 6f 72 28 29 20 6d 61 79 20 72 65 74  Cursor() may ret
19860 75 72 6e 20 69 73 20 53 51 4c 49 54 45 5f 4f 4b  urn is SQLITE_OK
19870 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72  . */.  assert( r
19880 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
19890 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
198a0 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
198b0 20 61 6e 64 20 69 73 49 6e 64 65 78 20 76 61 72   and isIndex var
198c0 69 61 62 6c 65 73 2e 20 50 72 65 76 69 6f 75 73  iables. Previous
198d0 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a   versions of.  *
198e0 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f  * SQLite used to
198f0 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f   check if the ro
19900 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65  ot-page flags we
19910 72 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20  re sane at this 
19920 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72  point.  ** and r
19930 65 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63  eport database c
19940 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65  orruption if the
19950 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20  y were not, but 
19960 74 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20  this check has. 
19970 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20   ** since moved 
19980 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c  into the btree l
19990 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43  ayer.  */  .  pC
199a0 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  ur->isTable = pO
199b0 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45  p->p4type!=P4_KE
199c0 59 49 4e 46 4f 3b 0a 20 20 70 43 75 72 2d 3e 69  YINFO;.  pCur->i
199d0 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e  sIndex = !pCur->
199e0 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b  isTable;.  break
199f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
19a00 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
19a10 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a   P2 * P4 P5.**.*
19a20 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
19a30 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
19a40 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
19a50 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
19a60 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
19a70 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
19a80 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
19a90 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
19aa0 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
19ab0 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
19ac0 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
19ad0 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
19ae0 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
19af0 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
19b00 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
19b10 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61   in the ephemera
19b20 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  l table..** The 
19b30 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f  cursor points to
19b40 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69   a BTree table i
19b50 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61  f P4==0 and to a
19b60 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20   BTree index.** 
19b70 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20  if P4 is not 0. 
19b80 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
19b90 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  LL, it points to
19ba0 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
19bb0 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66  ture.** that def
19bc0 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20  ines the format 
19bd0 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69  of keys in the i
19be0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ndex..**.** This
19bf0 20 6f 70 63 6f 64 65 20 77 61 73 20 6f 6e 63 65   opcode was once
19c00 20 63 61 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70   called OpenTemp
19c10 2e 20 20 42 75 74 20 74 68 61 74 20 63 72 65 61  .  But that crea
19c20 74 65 64 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e  ted.** confusion
19c30 20 62 65 63 61 75 73 65 20 74 68 65 20 74 65 72   because the ter
19c40 6d 20 22 74 65 6d 70 20 74 61 62 6c 65 22 2c 20  m "temp table", 
19c50 6d 69 67 68 74 20 72 65 66 65 72 20 65 69 74 68  might refer eith
19c60 65 72 0a 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20  er.** to a TEMP 
19c70 74 61 62 6c 65 20 61 74 20 74 68 65 20 53 51 4c  table at the SQL
19c80 20 6c 65 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20   level, or to a 
19c90 74 61 62 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a  table opened by.
19ca0 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  ** this opcode. 
19cb0 20 54 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   Then this opcod
19cc0 65 20 77 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56  e was call OpenV
19cd0 69 72 74 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20  irtual.  But.** 
19ce0 74 68 61 74 20 63 72 65 61 74 65 64 20 63 6f 6e  that created con
19cf0 66 75 73 69 6f 6e 20 77 69 74 68 20 74 68 65 20  fusion with the 
19d00 77 68 6f 6c 65 20 76 69 72 74 75 61 6c 2d 74 61  whole virtual-ta
19d10 62 6c 65 20 69 64 65 61 2e 0a 2a 2a 0a 2a 2a 20  ble idea..**.** 
19d20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
19d30 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f   can be a mask o
19d40 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c  f the BTREE_* fl
19d50 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69  ags defined.** i
19d60 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73  n btree.h.  Thes
19d70 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20  e flags control 
19d80 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f  aspects of the o
19d90 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  peration of.** t
19da0 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42  he btree.  The B
19db0 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
19dc0 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47  L and BTREE_SING
19dd0 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20  LE flags are.** 
19de0 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61  added automatica
19df0 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  lly..*/./* Opcod
19e00 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  e: OpenAutoindex
19e10 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
19e20 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
19e30 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61  works the same a
19e40 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
19e50 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a  al.  It has a.**
19e60 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
19e70 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69  to distinguish i
19e80 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20  ts use.  Tables 
19e90 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a  created using.**
19ea0 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
19eb0 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72  will be used for
19ec0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
19ed0 72 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74  reated transient
19ee0 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a  .** indices in j
19ef0 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  oins..*/.case OP
19f00 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20  _OpenAutoindex: 
19f10 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68  .case OP_OpenEph
19f20 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65  emeral: {.  Vdbe
19f30 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 73  Cursor *pCx;.  s
19f40 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
19f50 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20  vfsFlags = .    
19f60 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45    SQLITE_OPEN_RE
19f70 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20  ADWRITE |.      
19f80 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41  SQLITE_OPEN_CREA
19f90 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
19fa0 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45  E_OPEN_EXCLUSIVE
19fb0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
19fc0 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f  OPEN_DELETEONCLO
19fd0 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  SE |.      SQLIT
19fe0 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54  E_OPEN_TRANSIENT
19ff0 5f 44 42 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  _DB;..  assert( 
1a000 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1a010 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1a020 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1a030 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29   pOp->p2, -1, 1)
1a040 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1a050 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1a060 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
1a070 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1a080 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
1a090 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
1a0a0 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20  >pBt, .         
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1a0c0 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1a0d0 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
1a0e0 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
1a0f0 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
1a100 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1a110 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1a120 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1a130 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a  x->pBt, 1);.  }.
1a140 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1a150 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  _OK ){.    /* If
1a160 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1a170 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  ex is required, 
1a180 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c  create it by cal
1a190 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ling.    ** sqli
1a1a0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1a1b0 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42  ble() with the B
1a1c0 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61  TREE_BLOBKEY fla
1a1d0 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20  g before.    ** 
1a1e0 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
1a1f0 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1a200 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
1a210 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a  st use the.    *
1a220 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
1a230 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69  created table wi
1a240 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28  th root-page 1 (
1a250 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74  an BLOB_INTKEY t
1a260 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
1a270 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b    if( pOp->p4.pK
1a280 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20  eyInfo ){.      
1a290 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20  int pgno;.      
1a2a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1a2b0 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1a2c0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
1a2d0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1a2e0 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20  Table(pCx->pBt, 
1a2f0 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f  &pgno, BTREE_BLO
1a300 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b  BKEY | pOp->p5);
1a310 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
1a320 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1a330 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
1a340 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
1a350 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   );.        rc =
1a360 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1a370 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67  sor(pCx->pBt, pg
1a380 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20 20 20 20  no, 1, .        
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3a0 20 20 20 20 20 20 20 20 28 4b 65 79 49 6e 66 6f          (KeyInfo
1a3b0 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 78  *)pOp->p4.z, pCx
1a3c0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1a3d0 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66      pCx->pKeyInf
1a3e0 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1a3f0 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 70 43  Info;.        pC
1a400 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  x->pKeyInfo->enc
1a410 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20   = ENC(p->db);. 
1a420 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78       }.      pCx
1a430 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20  ->isTable = 0;. 
1a440 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1a450 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1a460 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1a470 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31  , MASTER_ROOT, 1
1a480 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f  , 0, pCx->pCurso
1a490 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69  r);.      pCx->i
1a4a0 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20  sTable = 1;.    
1a4b0 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f  }.  }.  pCx->isO
1a4c0 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70  rdered = (pOp->p
1a4d0 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52  5!=BTREE_UNORDER
1a4e0 45 44 29 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e  ED);.  pCx->isIn
1a4f0 64 65 78 20 3d 20 21 70 43 78 2d 3e 69 73 54 61  dex = !pCx->isTa
1a500 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ble;.  break;.}.
1a510 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1a520 53 6f 72 74 65 72 20 50 31 20 50 32 20 2a 20 50  Sorter P1 P2 * P
1a530 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4 *.**.** This o
1a540 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65  pcode works like
1a550 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1a560 6c 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  l except that it
1a570 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e   opens.** a tran
1a580 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74  sient index that
1a590 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79   is specifically
1a5a0 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72   designed to sor
1a5b0 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65  t large.** table
1a5c0 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72  s using an exter
1a5d0 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61  nal merge-sort a
1a5e0 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2f 0a 63 61 73  lgorithm..*/.cas
1a5f0 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a  e OP_SorterOpen:
1a600 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1a610 2a 70 43 78 3b 0a 23 69 66 6e 64 65 66 20 53 51  *pCx;.#ifndef SQ
1a620 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f  LITE_OMIT_MERGE_
1a630 53 4f 52 54 0a 20 20 70 43 78 20 3d 20 61 6c 6c  SORT.  pCx = all
1a640 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1a650 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1a660 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70   -1, 1);.  if( p
1a670 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1a680 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79  mem;.  pCx->pKey
1a690 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1a6a0 4b 65 79 49 6e 66 6f 3b 0a 20 20 70 43 78 2d 3e  KeyInfo;.  pCx->
1a6b0 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20  pKeyInfo->enc = 
1a6c0 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 70 43  ENC(p->db);.  pC
1a6d0 78 2d 3e 69 73 53 6f 72 74 65 72 20 3d 20 31 3b  x->isSorter = 1;
1a6e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1a6f0 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62  dbeSorterInit(db
1a700 2c 20 70 43 78 29 3b 0a 23 65 6c 73 65 0a 20 20  , pCx);.#else.  
1a710 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
1a720 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3b 0a  _OpenEphemeral;.
1a730 20 20 70 63 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20    pc--;.#endif. 
1a740 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1a750 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f  code: OpenPseudo
1a760 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1a770 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1a780 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
1a790 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
1a7a0 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
1a7b0 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1a7c0 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f  of data.  The co
1a7d0 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e  ntent of that on
1a7e0 65 20 72 6f 77 20 69 6e 20 74 68 65 20 63 6f 6e  e row in the con
1a7f0 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  tent of memory.*
1a800 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  * register P2.  
1a810 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1a820 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65  cursor P1 become
1a830 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
1a840 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20  he .** MEM_Blob 
1a850 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65  content containe
1a860 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
1a870 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f  ..**.** A pseudo
1a880 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62  -table created b
1a890 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
1a8a0 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20   used to hold a 
1a8b0 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75  single.** row ou
1a8c0 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f  tput from the so
1a8d0 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65  rter so that the
1a8e0 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f   row can be deco
1a8f0 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69  mposed into.** i
1a900 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e  ndividual column
1a910 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43  s using the OP_C
1a920 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54  olumn opcode.  T
1a930 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1a940 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e  ode.** is the on
1a950 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65  ly cursor opcode
1a960 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68   that works with
1a970 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1a980 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65  .**.** P3 is the
1a990 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
1a9a0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73  s in the records
1a9b0 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74   that will be st
1a9c0 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70  ored by.** the p
1a9d0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
1a9e0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75  case OP_OpenPseu
1a9f0 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  do: {.  VdbeCurs
1aa00 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1aa10 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1aa20 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1aa30 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1aa40 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31  >p1, pOp->p3, -1
1aa50 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 0);.  if( pCx=
1aa60 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1aa70 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1aa80 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65   = 1;.  pCx->pse
1aa90 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f  udoTableReg = pO
1aaa0 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73  p->p2;.  pCx->is
1aab0 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78  Table = 1;.  pCx
1aac0 2d 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20  ->isIndex = 0;. 
1aad0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1aae0 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a  code: Close P1 *
1aaf0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f   * * *.**.** Clo
1ab00 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76  se a cursor prev
1ab10 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73  iously opened as
1ab20 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e   P1.  If P1 is n
1ab30 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  ot.** currently 
1ab40 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72  open, this instr
1ab50 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  uction is a no-o
1ab60 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  p..*/.case OP_Cl
1ab70 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ose: {.  assert(
1ab80 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1ab90 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1aba0 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  r );.  sqlite3Vd
1abb0 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
1abc0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1abd0 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  ]);.  p->apCsr[p
1abe0 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62  Op->p1] = 0;.  b
1abf0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1ac00 64 65 3a 20 53 65 65 6b 47 65 20 50 31 20 50 32  de: SeekGe P1 P2
1ac10 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
1ac20 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1ac30 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1ac40 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1ac50 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1ac60 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1ac70 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1ac80 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e  r P3 as the key.
1ac90 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72    If cursor P1 r
1aca0 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1acb0 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1acc0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1acd0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1ace0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1acf0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1ad00 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1ad10 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1ad20 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1ad30 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1ad40 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1ad50 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1ad60 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1ad70 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1ad80 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1ad90 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1ada0 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65   records .** gre
1adb0 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1adc0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1add0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1ade0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1adf0 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1ae00 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1ae10 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1ae20 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  ekLt, SeekGt, Se
1ae30 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1ae40 65 3a 20 53 65 65 6b 47 74 20 50 31 20 50 32 20  e: SeekGt P1 P2 
1ae50 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
1ae60 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1ae70 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1ae80 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1ae90 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1aea0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1aeb0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1aec0 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1aed0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1aee0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1aef0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1af00 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1af10 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1af20 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1af30 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1af40 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1af50 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1af60 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1af70 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1af80 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1af90 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1afa0 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1afb0 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
1afc0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1afd0 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72   records greater
1afe0 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1aff0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1b000 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1b010 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
1b020 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1b030 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
1b040 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65  , SeekLt, SeekGe
1b050 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1b060 70 63 6f 64 65 3a 20 53 65 65 6b 4c 74 20 50 31  pcode: SeekLt P1
1b070 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 0a   P2 P3 P4 * .**.
1b080 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1b090 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1b0a0 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1b0b0 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1b0c0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1b0d0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1b0e0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1b0f0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1b100 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1b110 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1b120 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1b130 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1b140 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1b150 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1b160 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1b170 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1b180 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1b190 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1b1a0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1b1b0 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1b1c0 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1b1d0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
1b1e0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1b1f0 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74  o records less t
1b200 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1b210 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1b220 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1b230 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
1b240 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1b250 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
1b260 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1b270 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1b280 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50 31 20 50  ode: SeekLe P1 P
1b290 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1b2a0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1b2b0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1b2c0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1b2d0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1b2e0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1b2f0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1b300 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1b310 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1b320 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1b330 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1b340 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1b350 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1b360 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1b370 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1b380 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1b390 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1b3a0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1b3b0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
1b3c0 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1b3d0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1b3e0 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  * is less than o
1b3f0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1b400 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1b410 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1b420 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20  s .** less than 
1b430 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1b440 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1b450 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1b460 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
1b470 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1b480 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
1b490 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  ct, SeekGt, Seek
1b4a0 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61  Ge, SeekLt.*/.ca
1b4b0 73 65 20 4f 50 5f 53 65 65 6b 4c 74 3a 20 20 20  se OP_SeekLt:   
1b4c0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1b4d0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1b4e0 65 6b 4c 65 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekLe:         /*
1b4f0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1b500 73 65 20 4f 50 5f 53 65 65 6b 47 65 3a 20 20 20  se OP_SeekGe:   
1b510 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1b520 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1b530 65 6b 47 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a  ekGt: {       /*
1b540 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1b550 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f  int res;.  int o
1b560 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  c;.  VdbeCursor 
1b570 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  *pC;.  UnpackedR
1b580 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e  ecord r;.  int n
1b590 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65  Field;.  i64 iKe
1b5a0 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72  y;      /* The r
1b5b0 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73  owid we are to s
1b5c0 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73  eek to */..  ass
1b5d0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1b5e0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1b5f0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1b600 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b  t( pOp->p2!=0 );
1b610 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1b620 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1b630 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1b640 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1b650 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
1b660 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1b670 65 6b 4c 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekLe == OP_SeekL
1b680 74 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  t+1 );.  assert(
1b690 20 4f 50 5f 53 65 65 6b 47 65 20 3d 3d 20 4f 50   OP_SeekGe == OP
1b6a0 5f 53 65 65 6b 4c 74 2b 32 20 29 3b 0a 20 20 61  _SeekLt+2 );.  a
1b6b0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 74  ssert( OP_SeekGt
1b6c0 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 33 20   == OP_SeekLt+3 
1b6d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1b6e0 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
1b6f0 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70  if( ALWAYS(pC->p
1b700 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20  Cursor!=0) ){.  
1b710 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    oc = pOp->opco
1b720 64 65 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c  de;.    pC->null
1b730 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  Row = 0;.    if(
1b740 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
1b750 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70        /* The inp
1b760 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d  ut value in P3 m
1b770 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74  ight be of any t
1b780 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65  ype: integer, re
1b790 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20  al, string,.    
1b7a0 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55    ** blob, or NU
1b7b0 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64  LL.  But it need
1b7c0 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  s to be an integ
1b7d0 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e  er before we can
1b7e0 20 64 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65   do.      ** the
1b7f0 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74   seek, so covert
1b800 20 69 74 2e 20 2a 2f 0a 20 20 20 20 20 20 70 49   it. */.      pI
1b810 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1b820 70 33 5d 3b 0a 20 20 20 20 20 20 61 70 70 6c 79  p3];.      apply
1b830 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
1b840 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 69 4b 65  pIn3);.      iKe
1b850 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  y = sqlite3VdbeI
1b860 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20  ntValue(pIn3);. 
1b870 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1b880 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20  Valid = 0;..    
1b890 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
1b8a0 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62  alue could not b
1b8b0 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1b8c0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
1b8d0 6f 75 74 0a 20 20 20 20 20 20 2a 2a 20 6c 6f 73  out.      ** los
1b8e0 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
1b8f0 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70  , then special p
1b900 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71  rocessing is req
1b910 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20  uired... */.    
1b920 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1b930 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
1b940 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
1b950 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1b960 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Real)==0 ){. 
1b970 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74           /* If t
1b980 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e  he P3 value cann
1b990 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1b9a0 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66  into any kind of
1b9b0 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20   a number,.     
1b9c0 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
1b9d0 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73   seek is not pos
1b9e0 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74  sible, so jump t
1b9f0 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  o P2 */.        
1ba00 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1ba10 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72   1;.          br
1ba20 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
1ba30 20 20 20 20 20 20 20 2f 2a 20 49 66 20 77 65 20         /* If we 
1ba40 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
1ba50 2c 20 74 68 65 6e 20 74 68 65 20 50 33 20 76 61  , then the P3 va
1ba60 6c 75 65 20 6d 75 73 74 20 62 65 20 61 20 66 6c  lue must be a fl
1ba70 6f 61 74 69 6e 67 0a 20 20 20 20 20 20 20 20 2a  oating.        *
1ba80 2a 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 20  * point number. 
1ba90 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
1baa0 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  t( (pIn3->flags 
1bab0 26 20 4d 45 4d 5f 52 65 61 6c 29 21 3d 30 20 29  & MEM_Real)!=0 )
1bac0 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  ;..        if( i
1bad0 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e  Key==SMALLEST_IN
1bae0 54 36 34 20 26 26 20 28 70 49 6e 33 2d 3e 72 3c  T64 && (pIn3->r<
1baf0 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 7c 7c 20  (double)iKey || 
1bb00 70 49 6e 33 2d 3e 72 3e 30 29 20 29 7b 0a 20 20  pIn3->r>0) ){.  
1bb10 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
1bb20 33 20 76 61 6c 75 65 20 69 73 20 74 6f 6f 20 6c  3 value is too l
1bb30 61 72 67 65 20 69 6e 20 6d 61 67 6e 69 74 75 64  arge in magnitud
1bb40 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 65  e to be expresse
1bb50 64 20 61 73 20 61 6e 0a 20 20 20 20 20 20 20 20  d as an.        
1bb60 20 20 2a 2a 20 69 6e 74 65 67 65 72 2e 20 2a 2f    ** integer. */
1bb70 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d  .          res =
1bb80 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66   1;.          if
1bb90 28 20 70 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20  ( pIn3->r<0 ){. 
1bba0 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f             if( o
1bbb0 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20  c>=OP_SeekGe ){ 
1bbc0 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1bbd0 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGe || oc==OP
1bbe0 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20  _SeekGt );.     
1bbf0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
1bc00 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
1bc10 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1bc20 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s);.            
1bc30 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1bc40 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1bc50 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1bc60 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
1bc70 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1bc80 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 63            if( oc
1bc90 3c 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 20 20  <=OP_SeekLe ){  
1bca0 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1bcb0 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLt || oc==OP_
1bcc0 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20  SeekLe );.      
1bcd0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1bce0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
1bcf0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1bd00 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1bd10 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1bd20 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1bd30 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1bd40 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1bd50 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1bd60 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1bd70 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
1bd80 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
1bd90 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1bda0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
1bdb0 65 6c 73 65 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  else if( oc==OP_
1bdc0 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLt || oc==OP
1bdd0 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20  _SeekGe ){.     
1bde0 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20       /* Use the 
1bdf0 63 65 69 6c 69 6e 67 28 29 20 66 75 6e 63 74 69  ceiling() functi
1be00 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65  on to convert re
1be10 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20  al->int */.     
1be20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72       if( pIn3->r
1be30 20 3e 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20   > (double)iKey 
1be40 29 20 69 4b 65 79 2b 2b 3b 0a 20 20 20 20 20 20  ) iKey++;.      
1be50 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1be60 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 66 6c     /* Use the fl
1be70 6f 6f 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 74  oor() function t
1be80 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e  o convert real->
1be90 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  int */.         
1bea0 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1beb0 53 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLe || oc==OP
1bec0 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20  _SeekGt );.     
1bed0 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72       if( pIn3->r
1bee0 20 3c 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20   < (double)iKey 
1bef0 29 20 69 4b 65 79 2d 2d 3b 0a 20 20 20 20 20 20  ) iKey--;.      
1bf00 20 20 7d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20    }.      } .   
1bf10 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1bf20 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1bf30 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1bf40 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c  0, (u64)iKey, 0,
1bf50 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
1bf60 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1bf70 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
1bf80 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1bf90 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
1bfa0 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
1bfb0 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69          pC->rowi
1bfc0 64 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20  dIsValid = 1;.  
1bfd0 20 20 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f        pC->lastRo
1bfe0 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20  wid = iKey;.    
1bff0 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
1c000 20 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f       nField = pO
1c010 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 61  p->p4.i;.      a
1c020 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1c030 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1c040 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 46        assert( nF
1c050 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 20 20  ield>0 );.      
1c060 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
1c070 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20  >pKeyInfo;.     
1c080 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1c090 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 20 20  )nField;..      
1c0a0 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65  /* The next line
1c0b0 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65   of code compute
1c0c0 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e  s as follows, on
1c0d0 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20 20  ly faster:.     
1c0e0 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50   **   if( oc==OP
1c0f0 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGt || oc==O
1c100 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20  P_SeekLe ){.    
1c110 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73    **     r.flags
1c120 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52   = UNPACKED_INCR
1c130 4b 45 59 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20  KEY;.      **   
1c140 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2a 2a 20  }else{.      ** 
1c150 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b      r.flags = 0;
1c160 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20  .      **   }.  
1c170 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 2e 66      */.      r.f
1c180 6c 61 67 73 20 3d 20 28 75 31 36 29 28 55 4e 50  lags = (u16)(UNP
1c190 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 2a 20  ACKED_INCRKEY * 
1c1a0 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65  (1 & (oc - OP_Se
1c1b0 65 6b 4c 74 29 29 29 3b 0a 20 20 20 20 20 20 61  ekLt)));.      a
1c1c0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1c1d0 65 6b 47 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d  ekGt || r.flags=
1c1e0 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45  =UNPACKED_INCRKE
1c1f0 59 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  Y );.      asser
1c200 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 65  t( oc!=OP_SeekLe
1c210 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50   || r.flags==UNP
1c220 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b  ACKED_INCRKEY );
1c230 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1c240 63 21 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20  c!=OP_SeekGe || 
1c250 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 20 20  r.flags==0 );.  
1c260 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1c270 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 72 2e 66  OP_SeekLt || r.f
1c280 6c 61 67 73 3d 3d 30 20 29 3b 0a 0a 20 20 20 20  lags==0 );..    
1c290 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
1c2a0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
1c2b0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1c2c0 20 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f       { int i; fo
1c2d0 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
1c2e0 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
1c2f0 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
1c300 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
1c310 69 66 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42  if.      ExpandB
1c320 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20  lob(r.aMem);.   
1c330 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1c340 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1c350 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1c360 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
1c370 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1c380 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1c390 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1c3a0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1c3b0 20 20 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72     }.      pC->r
1c3c0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1c3d0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64  .    }.    pC->d
1c3e0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1c3f0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
1c400 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1c410 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c  TALE;.#ifdef SQL
1c420 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c  ITE_TEST.    sql
1c430 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
1c440 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  t++;.#endif.    
1c450 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47  if( oc>=OP_SeekG
1c460 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  e ){  assert( oc
1c470 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f  ==OP_SeekGe || o
1c480 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a  c==OP_SeekGt );.
1c490 20 20 20 20 20 20 69 66 28 20 72 65 73 3c 30 20        if( res<0 
1c4a0 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
1c4b0 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a  ==OP_SeekGt) ){.
1c4c0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1c4d0 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
1c4e0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1c4f0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
1c500 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1c510 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1c520 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70  error;.        p
1c530 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1c540 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
1c550 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
1c560 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
1c570 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
1c580 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
1c590 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
1c5a0 4c 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Le );.      if( 
1c5b0 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res>0 || (res==0
1c5c0 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   && oc==OP_SeekL
1c5d0 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  t) ){.        rc
1c5e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
1c5f0 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72  revious(pC->pCur
1c600 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1c610 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1c620 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1c630 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1c640 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  .        pC->row
1c650 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1c660 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1c670 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74      /* res might
1c680 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63   be negative bec
1c690 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69  ause the table i
1c6a0 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20  s empty.  Check 
1c6b0 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65  to.        ** se
1c6c0 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65  e if this is the
1c6d0 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a   case..        *
1c6e0 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  /.        res = 
1c6f0 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28  sqlite3BtreeEof(
1c700 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1c710 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
1c720 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1c730 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  0 );.    if( res
1c740 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1c750 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1c760 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
1c770 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77  * This happens w
1c780 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74  hen attempting t
1c790 6f 20 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74  o open the sqlit
1c7a0 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a  e3_master table.
1c7b0 20 20 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20      ** for read 
1c7c0 61 63 63 65 73 73 20 72 65 74 75 72 6e 73 20 53  access returns S
1c7d0 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20  QLITE_EMPTY. In 
1c7e0 74 68 69 73 20 63 61 73 65 20 61 6c 77 61 79 73  this case always
1c7f0 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65  .    ** take the
1c800 20 6a 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65   jump (since the
1c810 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1c820 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e  s in the table).
1c830 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d  .    */.    pc =
1c840 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1c850 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1c860 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31   Opcode: Seek P1
1c870 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1c880 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61  P1 is an open ta
1c890 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50  ble cursor and P
1c8a0 32 20 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74  2 is a rowid int
1c8b0 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a  eger.  Arrange.*
1c8c0 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65  * for P1 to move
1c8d0 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1c8e0 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ts to the rowid 
1c8f0 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a  given by P2..**.
1c900 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74 75 61  ** This is actua
1c910 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64 20 73  lly a deferred s
1c920 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63  eek.  Nothing ac
1c930 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75  tually happens u
1c940 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73  ntil.** the curs
1c950 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65  or is used to re
1c960 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68  ad a record.  Th
1c970 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65  at way, if no re
1c980 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f  ads.** occur, no
1c990 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f   unnecessary I/O
1c9a0 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73   happens..*/.cas
1c9b0 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20  e OP_Seek: {    
1c9c0 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
1c9d0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
1c9e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1c9f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1ca00 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1ca10 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1ca20 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1ca30 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c  C!=0 );.  if( AL
1ca40 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72  WAYS(pC->pCursor
1ca50 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65  !=0) ){.    asse
1ca60 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1ca70 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  );.    pC->nullR
1ca80 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 49 6e 32  ow = 0;.    pIn2
1ca90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
1caa0 5d 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74  ];.    pC->movet
1cab0 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65  oTarget = sqlite
1cac0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
1cad0 6e 32 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  n2);.    pC->row
1cae0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1caf0 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1cb00 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20  oveto = 1;.  }. 
1cb10 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a   break;.}.  ../*
1cb20 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50   Opcode: Found P
1cb30 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
1cb40 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
1cb50 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
1cb60 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
1cb70 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
1cb80 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
1cb90 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1cba0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
1cbb0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
1cbc0 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
1cbd0 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
1cbe0 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
1cbf0 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
1cc00 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
1cc10 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
1cc20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
1cc30 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61  is a prefix of a
1cc40 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
1cc50 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
1cc60 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20  de to P2 and.** 
1cc70 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
1cc80 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68  ing at the match
1cc90 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2f 0a 2f 2a  ing entry..*/./*
1cca0 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e   Opcode: NotFoun
1ccb0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
1ccc0 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
1ccd0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1cce0 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1ccf0 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1cd00 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
1cd10 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
1cd20 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
1cd30 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
1cd40 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
1cd50 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
1cd60 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72  d..** .** Cursor
1cd70 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
1cd80 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
1cd90 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
1cda0 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
1cdb0 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70  .** is not the p
1cdc0 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74  refix of any ent
1cdd0 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20  ry in P1 then a 
1cde0 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
1cdf0 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64  P2.  If P1 .** d
1ce00 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65  oes contain an e
1ce10 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66 69  ntry whose prefi
1ce20 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50 33  x matches the P3
1ce30 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20  /P4 record then 
1ce40 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73  control.** falls
1ce50 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1ce60 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1ce70 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20   and P1 is left 
1ce80 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a  pointing at the.
1ce90 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  ** matching entr
1cea0 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  y..**.** See als
1ceb0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69  o: Found, NotExi
1cec0 73 74 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f  sts, IsUnique.*/
1ced0 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  .case OP_NotFoun
1cee0 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  d:       /* jump
1cef0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1cf00 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20  _Found: {       
1cf10 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1cf20 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78  .  int alreadyEx
1cf30 69 73 74 73 3b 0a 20 20 56 64 62 65 43 75 72 73  ists;.  VdbeCurs
1cf40 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
1cf50 73 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65  s;.  char *pFree
1cf60 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1cf70 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55  rd *pIdxKey;.  U
1cf80 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1cf90 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63  .  char aTempRec
1cfa0 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55  [ROUND8(sizeof(U
1cfb0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20  npackedRecord)) 
1cfc0 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33 20  + sizeof(Mem)*3 
1cfd0 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51  + 7];..#ifdef SQ
1cfe0 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
1cff0 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b  te3_found_count+
1d000 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 6c 72  +;.#endif..  alr
1d010 65 61 64 79 45 78 69 73 74 73 20 3d 20 30 3b 0a  eadyExists = 0;.
1d020 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d030 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1d040 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1d050 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1d060 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
1d070 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1d080 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1d090 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1d0a0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
1d0b0 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 41 4c 57  ->p3];.  if( ALW
1d0c0 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21  AYS(pC->pCursor!
1d0d0 3d 30 29 20 29 7b 0a 0a 20 20 20 20 61 73 73 65  =0) ){..    asse
1d0e0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
1d0f0 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  =0 );.    if( pO
1d100 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20  p->p4.i>0 ){.   
1d110 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
1d120 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
1d130 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
1d140 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
1d150 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49       r.aMem = pI
1d160 6e 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  n3;.#ifdef SQLIT
1d170 45 5f 44 45 42 55 47 0a 20 20 20 20 20 20 7b 20  E_DEBUG.      { 
1d180 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
1d190 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
1d1a0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1d1b0 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
1d1c0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20  ); }.#endif.    
1d1d0 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
1d1e0 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43  CKED_PREFIX_MATC
1d1f0 48 3b 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79  H;.      pIdxKey
1d200 20 3d 20 26 72 3b 0a 20 20 20 20 7d 65 6c 73 65   = &r;.    }else
1d210 7b 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 20  {.      pIdxKey 
1d220 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c  = sqlite3VdbeAll
1d230 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  ocUnpackedRecord
1d240 28 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  (.          pC->
1d250 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52  pKeyInfo, aTempR
1d260 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70  ec, sizeof(aTemp
1d270 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20 20  Rec), &pFree.   
1d280 20 20 20 29 3b 20 0a 20 20 20 20 20 20 69 66 28     ); .      if(
1d290 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f   pIdxKey==0 ) go
1d2a0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20  to no_mem;.     
1d2b0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1d2c0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
1d2d0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1d2e0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1d2f0 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b 20  MEM_Zero)==0 ); 
1d300 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73 20 61 6c   /* zeroblobs al
1d310 72 65 61 64 79 20 65 78 70 61 6e 64 65 64 20 2a  ready expanded *
1d320 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
1d330 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28  dbeRecordUnpack(
1d340 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49  pC->pKeyInfo, pI
1d350 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20  n3->n, pIn3->z, 
1d360 70 49 64 78 4b 65 79 29 3b 0a 20 20 20 20 20 20  pIdxKey);.      
1d370 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c  pIdxKey->flags |
1d380 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
1d390 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20  X_MATCH;.    }. 
1d3a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1d3b0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1d3c0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1d3d0 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
1d3e0 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  res);.    if( pO
1d3f0 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20  p->p4.i==0 ){.  
1d400 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1d410 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20  e(db, pFree);.  
1d420 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d    }.    if( rc!=
1d430 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1d440 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
1d450 20 20 20 20 61 6c 72 65 61 64 79 45 78 69 73 74      alreadyExist
1d460 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20  s = (res==0);.  
1d470 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1d480 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1d490 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1d4a0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1d4b0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1d4c0 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a  de==OP_Found ){.
1d4d0 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45      if( alreadyE
1d4e0 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70  xists ) pc = pOp
1d4f0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
1d500 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65  e{.    if( !alre
1d510 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
1d520 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1d530 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1d540 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69 71 75   Opcode: IsUniqu
1d550 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
1d560 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
1d570 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 69 6e  is open on an in
1d580 64 65 78 20 62 2d 74 72 65 65 20 2d 20 74 68 61  dex b-tree - tha
1d590 74 20 69 73 20 74 6f 20 73 61 79 2c 20 61 20 62  t is to say, a b
1d5a0 74 72 65 65 20 77 68 69 63 68 0a 2a 2a 20 6e 6f  tree which.** no
1d5b0 20 64 61 74 61 20 61 6e 64 20 77 68 65 72 65 20   data and where 
1d5c0 74 68 65 20 6b 65 79 20 61 72 65 20 72 65 63 6f  the key are reco
1d5d0 72 64 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  rds generated by
1d5e0 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77   OP_MakeRecord w
1d5f0 69 74 68 0a 2a 2a 20 74 68 65 20 6c 69 73 74 20  ith.** the list 
1d600 66 69 65 6c 64 20 62 65 69 6e 67 20 74 68 65 20  field being the 
1d610 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 66  integer ROWID of
1d620 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
1d630 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74  the index.** ent
1d640 72 79 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a  ry refers to..**
1d650 0a 2a 2a 20 54 68 65 20 50 33 20 72 65 67 69 73  .** The P3 regis
1d660 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  ter contains an 
1d670 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e  integer record n
1d680 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74 68 69 73  umber. Call this
1d690 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d 62   record .** numb
1d6a0 65 72 20 52 2e 20 52 65 67 69 73 74 65 72 20 50  er R. Register P
1d6b0 34 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  4 is the first i
1d6c0 6e 20 61 20 73 65 74 20 6f 66 20 4e 20 63 6f 6e  n a set of N con
1d6d0 74 69 67 75 6f 75 73 20 72 65 67 69 73 74 65 72  tiguous register
1d6e0 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b 65 20 75  s.** that make u
1d6f0 70 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  p an unpacked in
1d700 64 65 78 20 6b 65 79 20 74 68 61 74 20 63 61 6e  dex key that can
1d710 20 62 65 20 75 73 65 64 20 77 69 74 68 20 63 75   be used with cu
1d720 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  rsor P1..** The 
1d730 76 61 6c 75 65 20 6f 66 20 4e 20 63 61 6e 20 62  value of N can b
1d740 65 20 69 6e 66 65 72 72 65 64 20 66 72 6f 6d 20  e inferred from 
1d750 74 68 65 20 63 75 72 73 6f 72 2e 20 4e 20 69 6e  the cursor. N in
1d760 63 6c 75 64 65 73 20 74 68 65 20 72 6f 77 69 64  cludes the rowid
1d770 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70 65 6e 64  .** value append
1d780 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  ed to the end of
1d790 20 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f 72   the index recor
1d7a0 64 2e 20 54 68 69 73 20 72 6f 77 69 64 20 76 61  d. This rowid va
1d7b0 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d 61  lue may.** or ma
1d7c0 79 20 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d  y not be the sam
1d7d0 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49 66  e as R..**.** If
1d7e0 20 61 6e 79 20 6f 66 20 74 68 65 20 4e 20 72 65   any of the N re
1d7f0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
1d800 67 20 77 69 74 68 20 72 65 67 69 73 74 65 72 20  g with register 
1d810 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  P4 contains a NU
1d820 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20 6a 75 6d  LL.** value, jum
1d830 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1d840 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72   P2..**.** Other
1d850 77 69 73 65 2c 20 74 68 69 73 20 69 6e 73 74 72  wise, this instr
1d860 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69 66  uction checks if
1d870 20 63 75 72 73 6f 72 20 50 31 20 63 6f 6e 74 61   cursor P1 conta
1d880 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a 2a 2a 20  ins an entry.** 
1d890 77 68 65 72 65 20 74 68 65 20 66 69 72 73 74 20  where the first 
1d8a0 28 4e 2d 31 29 20 66 69 65 6c 64 73 20 6d 61 74  (N-1) fields mat
1d8b0 63 68 20 62 75 74 20 74 68 65 20 72 6f 77 69 64  ch but the rowid
1d8c0 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 65 6e   value at the en
1d8d0 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69 6e 64 65  d.** of the inde
1d8e0 78 20 65 6e 74 72 79 20 69 73 20 6e 6f 74 20 52  x entry is not R
1d8f0 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  . If there is no
1d900 20 73 75 63 68 20 65 6e 74 72 79 2c 20 63 6f 6e   such entry, con
1d910 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74 6f  trol jumps.** to
1d920 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
1d930 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20   Otherwise, the 
1d940 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e  rowid of the con
1d950 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 0a 2a  flicting index.*
1d960 2a 20 65 6e 74 72 79 20 69 73 20 63 6f 70 69 65  * entry is copie
1d970 64 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  d to register P3
1d980 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 66 61 6c   and control fal
1d990 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
1d9a0 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
1d9b0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
1d9c0 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
1d9d0 20 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f 75 6e   NotExists, Foun
1d9e0 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 55  d.*/.case OP_IsU
1d9f0 6e 69 71 75 65 3a 20 7b 20 20 20 20 20 20 20 20  nique: {        
1da00 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1da10 20 20 75 31 36 20 69 69 3b 0a 20 20 56 64 62 65    u16 ii;.  Vdbe
1da20 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42  Cursor *pCx;.  B
1da30 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1da40 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 0a 20 20    u16 nField;.  
1da50 4d 65 6d 20 2a 61 4d 78 3b 0a 20 20 55 6e 70 61  Mem *aMx;.  Unpa
1da60 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 20  ckedRecord r;   
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1da80 2a 20 42 2d 54 72 65 65 20 69 6e 64 65 78 20 73  * B-Tree index s
1da90 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a 20 20 69  earch key */.  i
1daa0 36 34 20 52 3b 20 20 20 20 20 20 20 20 20 20 20  64 R;           
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dac0 20 20 2f 2a 20 52 6f 77 69 64 20 73 74 6f 72 65    /* Rowid store
1dad0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
1dae0 20 2a 2f 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61   */..  pIn3 = &a
1daf0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1db00 61 4d 78 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  aMx = &aMem[pOp-
1db10 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20 41 73 73  >p4.i];.  /* Ass
1db20 65 72 74 20 74 68 61 74 20 74 68 65 20 76 61 6c  ert that the val
1db30 75 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  ues of parameter
1db40 73 20 50 31 20 61 6e 64 20 50 34 20 61 72 65 20  s P1 and P4 are 
1db50 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a 20 20 61  in range. */.  a
1db60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1db70 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1db80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1db90 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d 3e 70 34  4.i>0 && pOp->p4
1dba0 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  .i<=p->nMem );. 
1dbb0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1dbc0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1dbd0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 0a 20 20  ->nCursor );..  
1dbe0 2f 2a 20 46 69 6e 64 20 74 68 65 20 69 6e 64 65  /* Find the inde
1dbf0 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a 20 20 70  x cursor. */.  p
1dc00 43 78 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  Cx = p->apCsr[pO
1dc10 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1dc20 28 20 70 43 78 2d 3e 64 65 66 65 72 72 65 64 4d  ( pCx->deferredM
1dc30 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43  oveto==0 );.  pC
1dc40 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  x->seekResult = 
1dc50 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63 68 65 53  0;.  pCx->cacheS
1dc60 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1dc70 41 4c 45 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  ALE;.  pCrsr = p
1dc80 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20  Cx->pCursor;..  
1dc90 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65  /* If any of the
1dca0 20 76 61 6c 75 65 73 20 61 72 65 20 4e 55 4c 4c   values are NULL
1dcb0 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  , take the jump.
1dcc0 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
1dcd0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  Cx->pKeyInfo->nF
1dce0 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69 69 3d 30  ield;.  for(ii=0
1dcf0 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20 69 69 2b  ; ii<nField; ii+
1dd00 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 4d 78 5b  +){.    if( aMx[
1dd10 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
1dd20 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 70 63  Null ){.      pc
1dd30 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1dd40 20 20 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b        pCrsr = 0;
1dd50 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
1dd60 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74    }.  }.  assert
1dd70 28 20 28 61 4d 78 5b 6e 46 69 65 6c 64 5d 2e 66  ( (aMx[nField].f
1dd80 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
1dd90 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 43  ==0 );..  if( pC
1dda0 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  rsr!=0 ){.    /*
1ddb0 20 50 6f 70 75 6c 61 74 65 20 74 68 65 20 69 6e   Populate the in
1ddc0 64 65 78 20 73 65 61 72 63 68 20 6b 65 79 2e 20  dex search key. 
1ddd0 2a 2f 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  */.    r.pKeyInf
1dde0 6f 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  o = pCx->pKeyInf
1ddf0 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
1de00 3d 20 6e 46 69 65 6c 64 20 2b 20 31 3b 0a 20 20  = nField + 1;.  
1de10 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
1de20 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52  CKED_PREFIX_SEAR
1de30 43 48 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d  CH;.    r.aMem =
1de40 20 61 4d 78 3b 0a 23 69 66 64 65 66 20 53 51 4c   aMx;.#ifdef SQL
1de50 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
1de60 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
1de70 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
1de80 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1de90 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
1dea0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ); }.#endif..   
1deb0 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20   /* Extract the 
1dec0 76 61 6c 75 65 20 6f 66 20 52 20 66 72 6f 6d 20  value of R from 
1ded0 72 65 67 69 73 74 65 72 20 50 33 2e 20 2a 2f 0a  register P3. */.
1dee0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
1def0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
1df00 33 29 3b 0a 20 20 20 20 52 20 3d 20 70 49 6e 33  3);.    R = pIn3
1df10 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20 53  ->u.i;..    /* S
1df20 65 61 72 63 68 20 74 68 65 20 42 2d 54 72 65 65  earch the B-Tree
1df30 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f 20 63 6f   index. If no co
1df40 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64  nflicting record
1df50 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75 6d 70 0a   is found, jump.
1df60 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e 20 4f 74      ** to P2. Ot
1df70 68 65 72 77 69 73 65 2c 20 63 6f 70 79 20 74 68  herwise, copy th
1df80 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63  e rowid of the c
1df90 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72  onflicting recor
1dfa0 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72 65 67 69  d to.    ** regi
1dfb0 73 74 65 72 20 50 33 20 61 6e 64 20 66 61 6c 6c  ster P3 and fall
1dfc0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1dfd0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1dfe0 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  .  */.    rc = s
1dff0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1e000 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
1e010 20 26 72 2c 20 30 2c 20 30 2c 20 26 70 43 78 2d   &r, 0, 0, &pCx-
1e020 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b 0a 20 20  >seekResult);.  
1e030 20 20 69 66 28 20 28 72 2e 66 6c 61 67 73 20 26    if( (r.flags &
1e040 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
1e050 5f 53 45 41 52 43 48 29 20 7c 7c 20 72 2e 72 6f  _SEARCH) || r.ro
1e060 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20  wid==R ){.      
1e070 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1e080 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1e090 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 72     pIn3->u.i = r
1e0a0 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20  .rowid;.    }.  
1e0b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1e0c0 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73   Opcode: NotExis
1e0d0 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ts P1 P2 P3 * *.
1e0e0 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f  **.** Use the co
1e0f0 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1e100 72 20 50 33 20 61 73 20 61 6e 20 69 6e 74 65 67  r P3 as an integ
1e110 65 72 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65  er key.  If a re
1e120 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68  cord .** with th
1e130 61 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20  at key does not 
1e140 65 78 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f  exist in table o
1e150 66 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20  f P1, then jump 
1e160 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68  to P2. .** If th
1e170 65 20 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78  e record does ex
1e180 69 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  ist, then fall t
1e190 68 72 6f 75 67 68 2e 20 20 54 68 65 20 63 75 72  hrough.  The cur
1e1a0 73 6f 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20  sor is left .** 
1e1b0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
1e1c0 72 65 63 6f 72 64 20 69 66 20 69 74 20 65 78 69  record if it exi
1e1d0 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  sts..**.** The d
1e1e0 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
1e1f0 6e 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  n this operation
1e200 20 61 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73   and NotFound is
1e210 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70   that this.** op
1e220 65 72 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20  eration assumes 
1e230 74 68 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e  the key is an in
1e240 74 65 67 65 72 20 61 6e 64 20 74 68 61 74 20 50  teger and that P
1e250 31 20 69 73 20 61 20 74 61 62 6c 65 20 77 68 65  1 is a table whe
1e260 72 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64  reas.** NotFound
1e270 20 61 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20   assumes key is 
1e280 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1e290 65 64 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f  ed from MakeReco
1e2a0 72 64 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20  rd and.** P1 is 
1e2b0 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  an index..**.** 
1e2c0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1e2d0 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69   NotFound, IsUni
1e2e0 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  que.*/.case OP_N
1e2f0 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20  otExists: {     
1e300 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1e310 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1e320 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
1e330 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
1e340 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a  s;.  u64 iKey;..
1e350 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1e360 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
1e370 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
1e380 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
1e390 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1e3a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1e3b0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1e3c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1e3d0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1e3e0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1e3f0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1e400 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
1e410 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
1e420 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
1e430 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
1e440 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
1e450 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b   ){.    res = 0;
1e460 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 49 6e 33  .    iKey = pIn3
1e470 2d 3e 75 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20  ->u.i;.    rc = 
1e480 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1e490 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
1e4a0 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72  , 0, iKey, 0, &r
1e4b0 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73  es);.    pC->las
1e4c0 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75  tRowid = pIn3->u
1e4d0 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  .i;.    pC->rowi
1e4e0 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d  dIsValid = res==
1e4f0 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e  0 ?1:0;.    pC->
1e500 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1e510 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1e520 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1e530 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
1e540 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
1e550 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20  if( res!=0 ){.  
1e560 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1e570 20 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65   - 1;.      asse
1e580 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  rt( pC->rowidIsV
1e590 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  alid==0 );.    }
1e5a0 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  .    pC->seekRes
1e5b0 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65 6c  ult = res;.  }el
1e5c0 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20  se{.    /* This 
1e5d0 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 6e 20  happens when an 
1e5e0 61 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20  attempt to open 
1e5f0 61 20 72 65 61 64 20 63 75 72 73 6f 72 20 6f 6e  a read cursor on
1e600 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c   the .    ** sql
1e610 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
1e620 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
1e630 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20  EMPTY..    */.  
1e640 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1e650 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   1;.    assert( 
1e660 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1e670 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73  ==0 );.    pC->s
1e680 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20  eekResult = 0;. 
1e690 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1e6a0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e  * Opcode: Sequen
1e6b0 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ce P1 P2 * * *.*
1e6c0 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65  *.** Find the ne
1e6d0 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71  xt available seq
1e6e0 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72  uence number for
1e6f0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57   cursor P1..** W
1e700 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63  rite the sequenc
1e710 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65  e number into re
1e720 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68  gister P2..** Th
1e730 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
1e740 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20  r on the cursor 
1e750 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61  is incremented a
1e760 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73  fter this.** ins
1e770 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63  truction.  .*/.c
1e780 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a  ase OP_Sequence:
1e790 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
1e7a0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
1e7b0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
1e7c0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1e7d0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1e7e0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
1e7f0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20  Csr[pOp->p1]!=0 
1e800 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
1e810 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1e820 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a  1]->seqCount++;.
1e830 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
1e840 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64  Opcode: NewRowid
1e850 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1e860 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e  .** Get a new in
1e870 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d  teger record num
1e880 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69  ber (a.k.a "rowi
1e890 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20  d") used as the 
1e8a0 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a  key to a table..
1e8b0 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75  ** The record nu
1e8c0 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76  mber is not prev
1e8d0 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61  iously used as a
1e8e0 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61   key in the data
1e8f0 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68  base.** table th
1e900 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
1e910 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77  nts to.  The new
1e920 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
1e930 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69  s written.** wri
1e940 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72  tten to register
1e950 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33   P2..**.** If P3
1e960 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20  >0 then P3 is a 
1e970 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
1e980 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
1e990 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c  is VDBE that hol
1e9a0 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65  ds .** the large
1e9b0 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65  st previously ge
1e9c0 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
1e9d0 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65  umber. No new re
1e9e0 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65  cord numbers are
1e9f0 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62  .** allowed to b
1ea00 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  e less than this
1ea10 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69   value. When thi
1ea20 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20  s value reaches 
1ea30 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a  its maximum, .**
1ea40 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20   an SQLITE_FULL 
1ea50 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74  error is generat
1ea60 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73  ed. The P3 regis
1ea70 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77  ter is updated w
1ea80 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e  ith the '.** gen
1ea90 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
1eaa0 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65  mber. This P3 me
1eab0 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20  chanism is used 
1eac0 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e  to help implemen
1ead0 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43  t the.** AUTOINC
1eae0 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a  REMENT feature..
1eaf0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f  */.case OP_NewRo
1eb00 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
1eb10 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
1eb20 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20  ase */.  i64 v; 
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb40 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64  /* The new rowid
1eb50 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1eb60 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20   *pC;        /* 
1eb70 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20  Cursor of table 
1eb80 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72  to get the new r
1eb90 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  owid */.  int re
1eba0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1ebb0 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e   /* Result of an
1ebc0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1ebd0 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  t() */.  int cnt
1ebe0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ebf0 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69  /* Counter to li
1ec00 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  mit the number o
1ec10 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20  f searches */.  
1ec20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
1ec30 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1ec40 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65  er holding large
1ec50 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54  st rowid for AUT
1ec60 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
1ec70 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
1ec80 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66  e;     /* Root f
1ec90 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a  rame of VDBE */.
1eca0 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20  .  v = 0;.  res 
1ecb0 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
1ecc0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1ecd0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1ece0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1ecf0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1ed00 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1ed10 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e    if( NEVER(pC->
1ed20 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20  pCursor==0) ){. 
1ed30 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69     /* The zero i
1ed40 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62  nitialization ab
1ed50 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20  ove is all that 
1ed60 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d  is needed */.  }
1ed70 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65  else{.    /* The
1ed80 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72   next rowid or r
1ed90 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69  ecord number (di
1eda0 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f  fferent terms fo
1edb0 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a  r the same.    *
1edc0 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61  * thing) is obta
1edd0 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74  ined in a two-st
1ede0 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20  ep algorithm..  
1edf0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73    **.    ** Firs
1ee00 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20  t we attempt to 
1ee10 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74  find the largest
1ee20 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
1ee30 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20  and add one.    
1ee40 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74  ** to that.  But
1ee50 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   if the largest 
1ee60 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69  existing rowid i
1ee70 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61  s already the ma
1ee80 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73  ximum.    ** pos
1ee90 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77  itive integer, w
1eea0 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74  e have to fall t
1eeb0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65  hrough to the se
1eec0 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62  cond.    ** prob
1eed0 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69  abilistic algori
1eee0 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  thm.    **.    *
1eef0 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67  * The second alg
1ef00 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c  orithm is to sel
1ef10 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72  ect a rowid at r
1ef20 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66  andom and see if
1ef30 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61  .    ** it alrea
1ef40 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  dy exists in the
1ef50 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64   table.  If it d
1ef60 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77  oes not exist, w
1ef70 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75  e have.    ** su
1ef80 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65  cceeded.  If the
1ef90 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f   random rowid do
1efa0 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c  es exist, we sel
1efb0 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20  ect a new one.  
1efc0 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61    ** and try aga
1efd0 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69  in, up to 100 ti
1efe0 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  mes..    */.    
1eff0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1f000 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ble );..#ifdef S
1f010 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49  QLITE_32BIT_ROWI
1f020 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  D.#   define MAX
1f030 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66  _ROWID 0x7ffffff
1f040 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53  f.#else.    /* S
1f050 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f  ome compilers co
1f060 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e  mplain about con
1f070 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f  stants of the fo
1f080 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66  rm 0x7ffffffffff
1f090 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74  fffff..    ** Ot
1f0a0 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  hers complain ab
1f0b0 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66  out 0x7fffffffff
1f0c0 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20  fffffffLL.  The 
1f0d0 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
1f0e0 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20  seems.    ** to 
1f0f0 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73  provide the cons
1f100 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e  tant while makin
1f110 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20  g all compilers 
1f120 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20  happy..    */.# 
1f130 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
1f140 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36  ID  (i64)( (((u6
1f150 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
1f160 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66  2) | (u64)0xffff
1f170 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20  ffff ).#endif.. 
1f180 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52     if( !pC->useR
1f190 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
1f1a0 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42      v = sqlite3B
1f1b0 74 72 65 65 47 65 74 43 61 63 68 65 64 52 6f 77  treeGetCachedRow
1f1c0 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  id(pC->pCursor);
1f1d0 0a 20 20 20 20 20 20 69 66 28 20 76 3d 3d 30 20  .      if( v==0 
1f1e0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1f1f0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
1f200 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1f210 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
1f220 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1f230 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
1f240 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1f250 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1f260 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29         if( res )
1f270 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d 20  {.          v = 
1f280 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36  1;   /* IMP: R-6
1f290 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20  1914-48074 */.  
1f2a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1f2b0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
1f2c0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1f2d0 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75  rIsValid(pC->pCu
1f2e0 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
1f2f0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1f300 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
1f310 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
1f320 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1f330 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
1f340 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69     /* Cannot fai
1f350 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65  l following Btre
1f360 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20  eLast() */.     
1f370 20 20 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f       if( v==MAX_
1f380 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20  ROWID ){.       
1f390 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
1f3a0 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
1f3b0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1f3c0 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20            v++;  
1f3d0 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38   /* IMP: R-29538
1f3e0 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20  -34987 */.      
1f3f0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
1f400 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66        }..#ifndef
1f410 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
1f420 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 20  OINCREMENT.     
1f430 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
1f440 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72          /* Asser
1f450 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
1f460 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
1f470 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
1f480 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
1f490 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 2d  ;.        if( p-
1f4a0 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  >pFrame ){.     
1f4b0 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d       for(pFrame=
1f4c0 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
1f4d0 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
1f4e0 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
1f4f0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f  nt);.          /
1f500 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
1f510 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
1f520 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
1f530 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1f540 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e  p->p3<=pFrame->n
1f550 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Mem );.         
1f560 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
1f570 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
1f580 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1f590 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65           /* Asse
1f5a0 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
1f5b0 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
1f5c0 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  l. */.          
1f5d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
1f5e0 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
1f5f0 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d        pMem = &aM
1f600 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1f610 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
1f620 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29  oChange(p, pMem)
1f630 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1f640 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
1f650 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a  sValid(pMem) );.
1f660 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
1f670 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
1f680 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20   pMem);.        
1f690 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
1f6a0 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a  tegerify(pMem);.
1f6b0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1f6c0 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
1f6d0 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f  EM_Int)!=0 );  /
1f6e0 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20  * mem(P3) holds 
1f6f0 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20  an integer */.  
1f700 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e        if( pMem->
1f710 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c  u.i==MAX_ROWID |
1f720 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  | pC->useRandomR
1f730 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20  owid ){.        
1f740 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
1f750 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
1f760 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20  12275-61338 */. 
1f770 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
1f780 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1f790 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1f7a0 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e      if( v<pMem->
1f7b0 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20  u.i+1 ){.       
1f7c0 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69     v = pMem->u.i
1f7d0 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a   + 1;.        }.
1f7e0 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e          pMem->u.
1f7f0 69 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23  i = v;.      }.#
1f800 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 73 71 6c  endif..      sql
1f810 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
1f820 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72  edRowid(pC->pCur
1f830 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49 44  sor, v<MAX_ROWID
1f840 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20 20   ? v+1 : 0);.   
1f850 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75   }.    if( pC->u
1f860 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1f870 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d  .      /* IMPLEM
1f880 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30  ENTATION-OF: R-0
1f890 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68  7677-41881 If th
1f8a0 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20  e largest ROWID 
1f8b0 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a  is equal to the.
1f8c0 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74        ** largest
1f8d0 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65   possible intege
1f8e0 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  r (9223372036854
1f8f0 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
1f900 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
1f910 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73  ** engine starts
1f920 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76   picking positiv
1f930 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49  e candidate ROWI
1f940 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74  Ds at random unt
1f950 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66  il.      ** it f
1f960 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73  inds one that is
1f970 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
1f980 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61  used. */.      a
1f990 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
1f9a0 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e  0 );  /* We cann
1f9b0 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20  ot be in random 
1f9c0 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68  rowid mode if th
1f9d0 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20  is is.          
1f9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9f0 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43     ** an AUTOINC
1fa00 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f  REMENT table. */
1fa10 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20 74 68 65  .      /* on the
1fa20 20 66 69 72 73 74 20 61 74 74 65 6d 70 74 2c 20   first attempt, 
1fa30 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65 20 6d 6f  simply do one mo
1fa40 72 65 20 74 68 61 6e 20 70 72 65 76 69 6f 75 73  re than previous
1fa50 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20 6c 61   */.      v = la
1fa60 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 76  stRowid;.      v
1fa70 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e   &= (MAX_ROWID>>
1fa80 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f  1); /* ensure do
1fa90 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74 69 76  esn't go negativ
1faa0 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b 2b 3b 20  e */.      v++; 
1fab0 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65  /* ensure non-ze
1fac0 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20  ro */.      cnt 
1fad0 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69 6c 65  = 0;.      while
1fae0 28 20 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74  (   ((rc = sqlit
1faf0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1fb00 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1fb10 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20  r, 0, (u64)v,.  
1fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
1fb50 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45  , &res))==SQLITE
1fb60 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20  _OK).           
1fb70 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20   && (res==0).   
1fb80 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63           && (++c
1fb90 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20 20 20 20  nt<100)){.      
1fba0 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f 6e 20 2d    /* collision -
1fbb0 20 74 72 79 20 61 6e 6f 74 68 65 72 20 72 61 6e   try another ran
1fbc0 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a 20 20 20  dom rowid */.   
1fbd0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e       sqlite3_ran
1fbe0 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76  domness(sizeof(v
1fbf0 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  ), &v);.        
1fc00 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a 20 20 20  if( cnt<5 ){.   
1fc10 20 20 20 20 20 20 20 2f 2a 20 74 72 79 20 22 73         /* try "s
1fc20 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20 72 6f 77  mall" random row
1fc30 69 64 73 20 66 6f 72 20 74 68 65 20 69 6e 69 74  ids for the init
1fc40 69 61 6c 20 61 74 74 65 6d 70 74 73 20 2a 2f 0a  ial attempts */.
1fc50 20 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 30            v &= 0
1fc60 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20  xffffff;.       
1fc70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1fc80 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49    v &= (MAX_ROWI
1fc90 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65  D>>1); /* ensure
1fca0 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61   doesn't go nega
1fcb0 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  tive */.        
1fcc0 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 2f  }.        v++; /
1fcd0 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72  * ensure non-zer
1fce0 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20  o */.      }.   
1fcf0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1fd00 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
1fd10 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
1fd20 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
1fd30 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33   IMP: R-38219-53
1fd40 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  002 */.        g
1fd50 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1fd60 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1fd70 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e        assert( v>
1fd80 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34  0 );  /* EV: R-4
1fd90 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20  0812-03570 */.  
1fda0 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69    }.    pC->rowi
1fdb0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1fdc0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1fdd0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1fde0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1fdf0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1fe00 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
1fe10 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1fe20 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
1fe30 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1fe40 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e  *.** Write an en
1fe50 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62  try into the tab
1fe60 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e  le of cursor P1.
1fe70 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73    A new entry is
1fe80 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69  .** created if i
1fe90 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64  t doesn't alread
1fea0 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64  y exist or the d
1feb0 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74  ata for an exist
1fec0 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20  ing.** entry is 
1fed0 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68  overwritten.  Th
1fee0 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61  e data is the va
1fef0 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f  lue MEM_Blob sto
1ff00 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a  red in register.
1ff10 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68  ** number P2. Th
1ff20 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20  e key is stored 
1ff30 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
1ff40 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20  The key must.** 
1ff50 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a  be a MEM_Int..**
1ff60 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
1ff70 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
1ff80 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
1ff90 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  n the row change
1ffa0 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63   count is.** inc
1ffb0 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
1ffc0 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68  ise not).  If th
1ffd0 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
1ffe0 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  ID flag of P5 is
1fff0 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f   set,.** then ro
20000 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f  wid is stored fo
20010 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74  r subsequent ret
20020 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  urn by the.** sq
20030 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
20040 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69  t_rowid() functi
20050 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74  on (otherwise it
20060 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e   is unmodified).
20070 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
20080 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
20090 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  LT flag of P5 is
200a0 20 73 65 74 20 61 6e 64 20 69 66 20 74 68 65 20   set and if the 
200b0 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65  result of.** the
200c0 20 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61   last seek opera
200d0 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73  tion (OP_NotExis
200e0 74 73 29 20 77 61 73 20 61 20 73 75 63 63 65 73  ts) was a succes
200f0 73 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20  s, then this.** 
20100 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e  operation will n
20110 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  ot attempt to fi
20120 6e 64 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  nd the appropria
20130 74 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f  te row before do
20140 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72  ing.** the inser
20150 74 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65  t but will inste
20160 61 64 20 6f 76 65 72 77 72 69 74 65 20 74 68 65  ad overwrite the
20170 20 72 6f 77 20 74 68 61 74 20 74 68 65 20 63 75   row that the cu
20180 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65  rsor is.** curre
20190 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
201a0 2e 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74  .  Presumably, t
201b0 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45  he prior OP_NotE
201c0 78 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20  xists opcode.** 
201d0 68 61 73 20 61 6c 72 65 61 64 79 20 70 6f 73 69  has already posi
201e0 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f  tioned the curso
201f0 72 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68  r correctly.  Th
20200 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a  is is an optimiz
20210 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f  ation.** that bo
20220 6f 73 74 73 20 70 65 72 66 6f 72 6d 61 6e 63 65  osts performance
20230 20 62 79 20 61 76 6f 69 64 69 6e 67 20 72 65 64   by avoiding red
20240 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a  undant seeks..**
20250 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
20260 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20  G_ISUPDATE flag 
20270 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69  is set, then thi
20280 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74  s opcode is part
20290 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45   of an.** UPDATE
202a0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68   operation.  Oth
202b0 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66  erwise (if the f
202c0 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68  lag is clear) th
202d0 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a  en this opcode.*
202e0 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20  * is part of an 
202f0 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e  INSERT operation
20300 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  .  The differenc
20310 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74  e is only import
20320 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70  ant to.** the up
20330 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a  date hook..**.**
20340 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61   Parameter P4 ma
20350 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 54 61 62  y point to a Tab
20360 6c 65 20 73 74 72 75 63 74 75 72 65 2c 20 6f 72  le structure, or
20370 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66   may be NULL. If
20380 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e   it is .** not N
20390 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70  ULL, then the up
203a0 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69 74  date-hook (sqlit
203b0 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  e3.xUpdateCallba
203c0 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 0a  ck) is invoked .
203d0 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73  ** following a s
203e0 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74  uccessful insert
203f0 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47  ..**.** (WARNING
20400 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20  /TODO: If P1 is 
20410 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20  a pseudo-cursor 
20420 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69  and P2 is dynami
20430 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  cally.** allocat
20440 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68  ed, then ownersh
20450 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e  ip of P2 is tran
20460 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70  sferred to the p
20470 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20  seudo-cursor.** 
20480 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20  and register P2 
20490 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61  becomes ephemera
204a0 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f  l.  If the curso
204b0 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68  r is changed, th
204c0 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65  e.** value of re
204d0 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74  gister P2 will t
204e0 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b  hen change.  Mak
204f0 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73  e sure this does
20500 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e   not.** cause an
20510 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a  y problems.).**.
20520 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
20530 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  ion only works o
20540 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65  n tables.  The e
20550 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
20560 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64  ction.** for ind
20570 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e  ices is OP_IdxIn
20580 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  sert..*/./* Opco
20590 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31  de: InsertInt P1
205a0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
205b0 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78  ** This works ex
205c0 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e  actly like OP_In
205d0 73 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74  sert except that
205e0 20 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a   the key is the.
205f0 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ** integer value
20600 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c   P3, not the val
20610 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ue of the intege
20620 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  r stored in regi
20630 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65  ster P3..*/.case
20640 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73   OP_Insert: .cas
20650 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20  e OP_InsertInt: 
20660 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20  {.  Mem *pData; 
20670 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
20680 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66  l holding data f
20690 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
206a0 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
206b0 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20    Mem *pKey;    
206c0 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
206d0 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72  holding key  for
206e0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
206f0 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
20700 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65     /* The intege
20710 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66  r ROWID or key f
20720 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
20730 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
20740 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
20750 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f  ;   /* Cursor to
20760 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63   table into whic
20770 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74  h insert is writ
20780 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ten */.  int nZe
20790 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ro;        /* Nu
207a0 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74  mber of zero-byt
207b0 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a  es to append */.
207c0 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74    int seekResult
207d0 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66  ;   /* Result of
207e0 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30   prior seek or 0
207f0 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45   if no USESEEKRE
20800 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63  SULT flag */.  c
20810 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
20820 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d   /* database nam
20830 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20  e - used by the 
20840 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20  update hook */. 
20850 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
20860 20 20 20 2f 2a 20 54 61 62 6c 65 20 73 74 72 75     /* Table stru
20870 63 74 75 72 65 20 2d 20 75 73 65 64 20 62 79 20  cture - used by 
20880 75 70 64 61 74 65 20 61 6e 64 20 70 72 65 2d 75  update and pre-u
20890 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20  pdate hooks */. 
208a0 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20   int op;        
208b0 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72     /* Opcode for
208c0 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51   update hook: SQ
208d0 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53  LITE_UPDATE or S
208e0 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a  QLITE_INSERT */.
208f0 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d  .  pData = &aMem
20900 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
20910 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
20920 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
20930 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
20940 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44  t( memIsValid(pD
20950 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ata) );.  pC = p
20960 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
20970 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
20980 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
20990 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
209a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
209b0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
209c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
209d0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61  ->isTable );.  a
209e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
209f0 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20  pe==P4_TABLE || 
20a00 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
20a10 4e 4f 54 55 53 45 44 20 29 3b 0a 20 20 52 45 47  NOTUSED );.  REG
20a20 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
20a30 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20  >p2, pData);..  
20a40 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
20a50 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20  =OP_Insert ){.  
20a60 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70    pKey = &aMem[p
20a70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73  Op->p3];.    ass
20a80 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73  ert( pKey->flags
20a90 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
20aa0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
20ab0 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20  alid(pKey) );.  
20ac0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
20ad0 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b  (pOp->p3, pKey);
20ae0 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79  .    iKey = pKey
20af0 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->u.i;.  }else{.
20b00 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20b10 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
20b20 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65  rtInt );.    iKe
20b30 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  y = pOp->p3;.  }
20b40 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  ..  if( pOp->p4t
20b50 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26  ype==P4_TABLE &&
20b60 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b   HAS_UPDATE_HOOK
20b70 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65  (db) ){.    asse
20b80 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
20b90 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
20ba0 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  C->iDb>=0 );.   
20bb0 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70   zDb = db->aDb[p
20bc0 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
20bd0 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70     pTab = pOp->p
20be0 34 2e 70 54 61 62 3b 0a 20 20 20 20 6f 70 20 3d  4.pTab;.    op =
20bf0 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
20c00 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20  LAG_ISUPDATE) ? 
20c10 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20  SQLITE_UPDATE : 
20c20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a  SQLITE_INSERT);.
20c30 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49    }..#ifdef SQLI
20c40 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44  TE_ENABLE_PREUPD
20c50 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e  ATE_HOOK.  /* In
20c60 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64  voke the pre-upd
20c70 61 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79  ate hook, if any
20c80 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
20c90 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
20ca0 20 0a 20 20 20 26 26 20 70 4f 70 2d 3e 70 34 74   .   && pOp->p4t
20cb0 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 0a 20 20  ype==P4_TABLE.  
20cc0 20 26 26 20 28 21 28 70 4f 70 2d 3e 70 35 20 26   && (!(pOp->p5 &
20cd0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
20ce0 29 20 7c 7c 20 70 43 2d 3e 72 6f 77 69 64 49 73  ) || pC->rowidIs
20cf0 56 61 6c 69 64 3d 3d 30 29 0a 20 20 29 7b 0a 20  Valid==0).  ){. 
20d00 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
20d10 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70  eUpdateHook(p, p
20d20 43 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  C, SQLITE_INSERT
20d30 2c 20 7a 44 62 2c 20 70 54 61 62 2c 20 69 4b 65  , zDb, pTab, iKe
20d40 79 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 7d  y, pOp->p2);.  }
20d50 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70  .#endif..  if( p
20d60 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
20d70 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
20d80 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f  ange++;.  if( pO
20d90 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c  p->p5 & OPFLAG_L
20da0 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c  ASTROWID ) db->l
20db0 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
20dc0 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69  owid = iKey;.  i
20dd0 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
20de0 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
20df0 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a    pData->z = 0;.
20e00 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30      pData->n = 0
20e10 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
20e20 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c  ssert( pData->fl
20e30 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
20e40 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a  MEM_Str) );.  }.
20e50 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28    seekResult = (
20e60 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
20e70 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29  G_USESEEKRESULT)
20e80 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c   ? pC->seekResul
20e90 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44  t : 0);.  if( pD
20ea0 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ata->flags & MEM
20eb0 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65  _Zero ){.    nZe
20ec0 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a  ro = pData->u.nZ
20ed0 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ero;.  }else{.  
20ee0 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d    nZero = 0;.  }
20ef0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53  .  sqlite3BtreeS
20f00 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43  etCachedRowid(pC
20f10 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20  ->pCursor, 0);. 
20f20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
20f30 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75  eeInsert(pC->pCu
20f40 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20  rsor, 0, iKey,. 
20f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f60 20 20 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e           pData->
20f70 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65  z, pData->n, nZe
20f80 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ro,.            
20f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4f                pO
20fa0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41  p->p5 & OPFLAG_A
20fb0 50 50 45 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c  PPEND, seekResul
20fc0 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77  t.  );.  pC->row
20fd0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
20fe0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
20ff0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
21000 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
21010 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
21020 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
21030 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
21040 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
21050 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
21060 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
21070 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
21080 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  {.    db->xUpdat
21090 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
210a0 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44  pdateArg, op, zD
210b0 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20  b, pTab->zName, 
210c0 69 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65  iKey);.  }.  bre
210d0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
210e0 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 50  : Delete P1 P2 P
210f0 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  3 P4 *.**.** Del
21100 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61  ete the record a
21110 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63  t which the P1 c
21120 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74  ursor is current
21130 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a  ly pointing..**.
21140 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 77 69  ** The cursor wi
21150 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74  ll be left point
21160 69 6e 67 20 61 74 20 65 69 74 68 65 72 20 74 68  ing at either th
21170 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72  e next or the pr
21180 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64  evious.** record
21190 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49   in the table. I
211a0 66 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69  f it is left poi
211b0 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78  nting at the nex
211c0 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a  t record, then.*
211d0 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20  * the next Next 
211e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c  instruction will
211f0 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65   be a no-op.  He
21200 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20  nce it is OK to 
21210 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f  delete.** a reco
21220 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  rd from within a
21230 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a  n Next loop..**.
21240 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
21250 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
21260 20 50 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P2 is set, then
21270 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
21280 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72  count is.** incr
21290 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
212a0 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50  se not)..**.** P
212b0 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73  1 must not be ps
212c0 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20  eudo-table.  It 
212d0 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  has to be a real
212e0 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d   table with.** m
212f0 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a  ultiple rows..**
21300 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
21310 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f   NULL then it po
21320 69 6e 74 73 20 74 6f 20 61 20 54 61 62 6c 65 20  ints to a Table 
21330 73 74 72 75 74 75 72 65 2e 20 49 6e 20 74 68 69  struture. In thi
21340 73 20 63 61 73 65 20 65 69 74 68 65 72 20 0a 2a  s case either .*
21350 2a 20 74 68 65 20 75 70 64 61 74 65 20 6f 72 20  * the update or 
21360 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c  pre-update hook,
21370 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20 62 65   or both, may be
21380 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50 31   invoked. The P1
21390 20 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20   cursor must.** 
213a0 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69  have been positi
213b0 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f  oned using OP_No
213c0 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20  tFound prior to 
213d0 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70  invoking this op
213e0 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73  code in .** this
213f0 20 63 61 73 65 2e 20 53 70 65 63 69 66 69 63 61   case. Specifica
21400 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73 20 63  lly, if one is c
21410 6f 6e 66 69 67 75 72 65 64 2c 20 74 68 65 20 70  onfigured, the p
21420 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 69  re-update hook i
21430 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66  s .** invoked if
21440 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e   P4 is not NULL.
21450 20 54 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   The update-hook
21460 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f   is invoked if o
21470 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  ne is configured
21480 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20  , .** P4 is not 
21490 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50  NULL, and the OP
214a0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
214b0 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2e 0a  g is set in P2..
214c0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
214d0 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61  LAG_ISUPDATE fla
214e0 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2c 20  g is set in P2, 
214f0 74 68 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73  then P3 contains
21500 20 74 68 65 20 61 64 64 72 65 73 73 0a 2a 2a 20   the address.** 
21510 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  of the memory ce
21520 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ll that contains
21530 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20   the value that 
21540 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
21550 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20   row will.** be 
21560 73 65 74 20 74 6f 20 62 79 20 74 68 65 20 75 70  set to by the up
21570 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  date..*/.case OP
21580 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34  _Delete: {.  i64
21590 20 69 4b 65 79 3b 0a 20 20 56 64 62 65 43 75 72   iKey;.  VdbeCur
215a0 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74  sor *pC;.  const
215b0 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61   char *zDb;.  Ta
215c0 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74  ble *pTab;.  int
215d0 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66   opflags;..  opf
215e0 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  lags = pOp->p2;.
215f0 20 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61 73    iKey = 0;.  as
21600 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
21610 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
21620 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
21630 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21640 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
21650 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
21660 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
21670 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69  );  /* Only vali
21680 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65  d for real table
21690 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c  s, no pseudotabl
216a0 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  es */.  assert( 
216b0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
216c0 54 41 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34  TABLE || pOp->p4
216d0 74 79 70 65 3d 3d 50 34 5f 4e 4f 54 55 53 45 44  type==P4_NOTUSED
216e0 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50   );..  /* The OP
216f0 5f 44 65 6c 65 74 65 20 6f 70 63 6f 64 65 20 61  _Delete opcode a
21700 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e  lways follows an
21710 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72   OP_NotExists or
21720 20 4f 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a   OP_Last or.  **
21730 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68   OP_Column on th
21740 65 20 73 61 6d 65 20 74 61 62 6c 65 20 77 69 74  e same table wit
21750 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 76 65  hout any interve
21760 6e 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73 20  ning operations 
21770 74 68 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20  that.  ** might 
21780 6d 6f 76 65 20 6f 72 20 69 6e 76 61 6c 69 64 61  move or invalida
21790 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  te the cursor.  
217a0 48 65 6e 63 65 20 63 75 72 73 6f 72 20 70 43 20  Hence cursor pC 
217b0 69 73 20 61 6c 77 61 79 73 20 70 6f 69 6e 74 69  is always pointi
217c0 6e 67 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 72  ng.  ** to the r
217d0 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64  ow to be deleted
217e0 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
217f0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
21800 28 29 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a  () operation.  *
21810 2a 20 62 65 6c 6f 77 20 69 73 20 61 6c 77 61 79  * below is alway
21820 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61  s a no-op and ca
21830 6e 6e 6f 74 20 66 61 69 6c 2e 20 20 57 65 20 77  nnot fail.  We w
21840 69 6c 6c 20 72 75 6e 20 69 74 20 61 6e 79 68 6f  ill run it anyho
21850 77 2c 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20  w, though,.  ** 
21860 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73 74  to guard against
21870 20 66 75 74 75 72 65 20 63 68 61 6e 67 65 73 20   future changes 
21880 74 6f 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  to the code gene
21890 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61  rator..  **/.  a
218a0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
218b0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
218c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
218d0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
218e0 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28  C);.  if( NEVER(
218f0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29  rc!=SQLITE_OK) )
21900 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
21910 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20  to_error;..  /* 
21920 49 66 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  If the update-ho
21930 6f 6b 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65  ok or pre-update
21940 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e  -hook will be in
21950 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65 79 20  voked, set iKey 
21960 74 6f 20 0a 20 20 2a 2a 20 74 68 65 20 72 6f 77  to .  ** the row
21970 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 62 65  id of the row be
21980 69 6e 67 20 64 65 6c 65 74 65 64 2e 20 53 65 74  ing deleted. Set
21990 20 7a 44 62 20 61 6e 64 20 7a 54 61 62 20 61 73   zDb and zTab as
219a0 20 77 65 6c 6c 2e 0a 20 20 2a 2f 0a 20 20 69 66   well..  */.  if
219b0 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 48  ( pOp->p4.z && H
219c0 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64  AS_UPDATE_HOOK(d
219d0 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b) ){.    assert
219e0 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
219f0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
21a00 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61  isTable );.    a
21a10 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
21a20 49 73 56 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c  IsValid );  /* l
21a30 61 73 74 52 6f 77 69 64 20 73 65 74 20 62 79 20  astRowid set by 
21a40 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46  previous OP_NotF
21a50 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79  ound */.    iKey
21a60 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64   = pC->lastRowid
21a70 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  ;.    zDb = db->
21a80 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61  aDb[pC->iDb].zNa
21a90 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70  me;.    pTab = p
21aa0 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 7d  Op->p4.pTab;.  }
21ab0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
21ac0 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
21ad0 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b  _HOOK.  /* Invok
21ae0 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  e the pre-update
21af0 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
21b00 64 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  d. */.  if( db->
21b10 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
21b20 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
21b30 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  ){.    assert( !
21b40 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41  (opflags & OPFLA
21b50 47 5f 49 53 55 50 44 41 54 45 29 20 7c 7c 20 28  G_ISUPDATE) || (
21b60 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c  aMem[pOp->p3].fl
21b70 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20 29  ags & MEM_Int) )
21b80 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
21b90 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70  ePreUpdateHook(p
21ba0 2c 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f  , pC,.        (o
21bb0 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
21bc0 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49  ISUPDATE) ? SQLI
21bd0 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49  TE_UPDATE : SQLI
21be0 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20  TE_DELETE, .    
21bf0 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 69      zDb, pTab, i
21c00 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 70 4f 70  Key,.        pOp
21c10 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20 7d 0a  ->p3.    );.  }.
21c20 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 6f 70  #endif..  if( op
21c30 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49  flags & OPFLAG_I
21c40 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 0a  SNOOP ) break;..
21c50 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
21c60 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
21c70 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20  >pCursor, 0);.  
21c80 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
21c90 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72  eDelete(pC->pCur
21ca0 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  sor);.  pC->cach
21cb0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21cc0 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 55 70 64  STALE;..  /* Upd
21cd0 61 74 65 20 74 68 65 20 63 68 61 6e 67 65 2d 63  ate the change-c
21ce0 6f 75 6e 74 65 72 20 61 6e 64 20 69 6e 76 6f 6b  ounter and invok
21cf0 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
21d00 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
21d10 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20  /.  if( opflags 
21d20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
21d30 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
21d40 67 65 2b 2b 3b 0a 20 20 20 20 61 73 73 65 72 74  ge++;.    assert
21d50 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 3b 0a 20  ( pOp->p4.z );. 
21d60 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
21d70 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64  E_OK && db->xUpd
21d80 61 74 65 43 61 6c 6c 62 61 63 6b 20 29 7b 0a 20  ateCallback ){. 
21d90 20 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65       db->xUpdate
21da0 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
21db0 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
21dc0 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61  DELETE, zDb, pTa
21dd0 62 2d 3e 7a 4e 61 6d 65 2c 69 4b 65 79 29 3b 0a  b->zName,iKey);.
21de0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
21df0 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  k;.}./* Opcode: 
21e00 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a  ResetCount * * *
21e10 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76   * *.**.** The v
21e20 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e  alue of the chan
21e30 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f  ge counter is co
21e40 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  pied to the data
21e50 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63  base handle.** c
21e60 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72  hange counter (r
21e70 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65  eturned by subse
21e80 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73  quent calls to s
21e90 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
21ea0 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56  )..** Then the V
21eb0 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e  Ms internal chan
21ec0 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74  ge counter reset
21ed0 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20  s to 0..** This 
21ee0 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
21ef0 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a  er programs..*/.
21f00 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75  case OP_ResetCou
21f10 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  nt: {.  sqlite3V
21f20 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
21f30 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
21f40 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
21f50 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
21f60 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f  Opcode: SorterCo
21f70 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 0a 2a  mpare P1 P2 P3.*
21f80 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
21f90 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73  ter cursor. This
21fa0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d   instruction com
21fb0 70 61 72 65 73 20 74 68 65 20 72 65 63 6f 72 64  pares the record
21fc0 20 62 6c 6f 62 20 69 6e 20 0a 2a 2a 20 72 65 67   blob in .** reg
21fd0 69 73 74 65 72 20 50 33 20 77 69 74 68 20 74 68  ister P3 with th
21fe0 65 20 65 6e 74 72 79 20 74 68 61 74 20 74 68 65  e entry that the
21ff0 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63   sorter cursor c
22000 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20  urrently points 
22010 74 6f 2e 0a 2a 2a 20 49 66 2c 20 65 78 63 6c 75  to..** If, exclu
22020 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 66  ding the rowid f
22030 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
22040 2c 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64  , the two record
22050 73 20 61 72 65 20 61 20 6d 61 74 63 68 2c 0a 2a  s are a match,.*
22060 2a 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * fall through t
22070 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
22080 75 63 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73  uction. Otherwis
22090 65 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  e, jump to instr
220a0 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
220b0 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70  se OP_SorterComp
220c0 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  are: {.  VdbeCur
220d0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
220e0 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  es;..  pC = p->a
220f0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22100 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
22110 72 28 70 43 29 20 29 3b 0a 20 20 70 49 6e 33 20  r(pC) );.  pIn3 
22120 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
22130 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
22140 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72  VdbeSorterCompar
22150 65 28 70 43 2c 20 70 49 6e 33 2c 20 26 72 65 73  e(pC, pIn3, &res
22160 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
22170 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
22180 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
22190 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .};../* Opcode: 
221a0 53 6f 72 74 65 72 44 61 74 61 20 50 31 20 50 32  SorterData P1 P2
221b0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
221c0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
221d0 20 50 32 20 74 68 65 20 63 75 72 72 65 6e 74 20   P2 the current 
221e0 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72 20  sorter data for 
221f0 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50 31  sorter cursor P1
22200 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
22210 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  terData: {.  Vdb
22220 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 23 69 66  eCursor *pC;.#if
22230 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
22240 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 20 20 70 4f  _MERGE_SORT.  pO
22250 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
22260 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  p2];.  pC = p->a
22270 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22280 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53   assert( pC->isS
22290 6f 72 74 65 72 20 29 3b 0a 20 20 72 63 20 3d 20  orter );.  rc = 
222a0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
222b0 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74  rRowkey(pC, pOut
222c0 29 3b 0a 23 65 6c 73 65 0a 20 20 70 4f 70 2d 3e  );.#else.  pOp->
222d0 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 52 6f 77 4b  opcode = OP_RowK
222e0 65 79 3b 0a 20 20 70 63 2d 2d 3b 0a 23 65 6e 64  ey;.  pc--;.#end
222f0 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  if.  break;.}../
22300 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74  * Opcode: RowDat
22310 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
22320 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
22330 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
22340 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61  omplete row data
22350 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
22360 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
22370 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
22380 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
22390 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65  It is just copie
223a0 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
223b0 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
223c0 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
223d0 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
223e0 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
223f0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
22400 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
22410 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
22420 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
22430 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
22440 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
22450 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  -table..*/./* Op
22460 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20  code: RowKey P1 
22470 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
22480 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
22490 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
224a0 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63  te row key for c
224b0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
224c0 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
224d0 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
224e0 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65  ata.  .** The ke
224f0 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f  y is copied onto
22500 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72   the P3 register
22510 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
22520 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
22530 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
22540 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
22550 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
22560 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
22570 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
22580 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
22590 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
225a0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
225b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
225c0 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77  Key:.case OP_Row
225d0 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
225e0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
225f0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75  rsor *pCrsr;.  u
22600 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b  32 n;.  i64 n64;
22610 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
22620 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
22630 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
22640 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f   pOut);..  /* No
22650 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61  te that RowKey a
22660 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72  nd RowData are r
22670 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68  eally exactly th
22680 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69  e same instructi
22690 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  on */.  assert( 
226a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
226b0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
226c0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
226d0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
226e0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f  assert( pC->isSo
226f0 72 74 65 72 3d 3d 30 20 29 3b 0a 20 20 61 73 73  rter==0 );.  ass
22700 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
22710 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
22720 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
22730 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49   assert( pC->isI
22740 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ndex || pOp->opc
22750 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
22760 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
22770 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
22780 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
22790 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
227a0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
227b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21  0 );.  assert( !
227c0 70 43 2d 3e 69 73 53 6f 72 74 65 72 20 29 3b 0a  pC->isSorter );.
227d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
227e0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43  ursor!=0 );.  pC
227f0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
22800 72 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  r;.  assert( sql
22810 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
22820 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
22830 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f  ..  /* The OP_Ro
22840 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44  wKey and OP_RowD
22850 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61  ata opcodes alwa
22860 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74  ys follow OP_Not
22870 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f  Exists or.  ** O
22880 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74  P_Rewind/Op_Next
22890 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65   with no interve
228a0 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  ning instruction
228b0 73 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76  s that might inv
228c0 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74 68 65  alidate.  ** the
228d0 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20   cursor.  Hence 
228e0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71  the following sq
228f0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
22900 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 69 73 20  oveto() call is 
22910 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f  always.  ** a no
22920 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e 65 76 65  -op and can neve
22930 72 20 66 61 69 6c 2e 20 20 42 75 74 20 77 65 20  r fail.  But we 
22940 6c 65 61 76 65 20 69 74 20 69 6e 20 70 6c 61 63  leave it in plac
22950 65 20 61 73 20 61 20 73 61 66 65 74 79 2e 0a 20  e as a safety.. 
22960 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43   */.  assert( pC
22970 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22980 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
22990 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
229a0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
229b0 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
229c0 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
229d0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
229e0 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e  ..  if( pC->isIn
229f0 64 65 78 20 29 7b 0a 20 20 20 20 61 73 73 65 72  dex ){.    asser
22a00 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20  t( !pC->isTable 
22a10 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  );.    VVA_ONLY(
22a20 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
22a30 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c  eeKeySize(pCrsr,
22a40 20 26 6e 36 34 29 3b 0a 20 20 20 20 61 73 73 65   &n64);.    asse
22a50 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
22a60 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  K );    /* True 
22a70 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
22a80 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61  rMoveto() call a
22a90 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66 28 20  bove */.    if( 
22aa0 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  n64>db->aLimit[S
22ab0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
22ac0 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
22ad0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
22ae0 0a 20 20 20 20 6e 20 3d 20 28 75 33 32 29 6e 36  .    n = (u32)n6
22af0 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  4;.  }else{.    
22b00 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
22b10 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53  qlite3BtreeDataS
22b20 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a  ize(pCrsr, &n);.
22b30 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
22b40 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
22b50 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61  /* DataSize() ca
22b60 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20  nnot fail */.   
22b70 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e   if( n>(u32)db->
22b80 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
22b90 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
22ba0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
22bb0 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  g;.    }.  }.  i
22bc0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
22bd0 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20 30  mGrow(pOut, n, 0
22be0 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
22bf0 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  _mem;.  }.  pOut
22c00 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65  ->n = n;.  MemSe
22c10 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
22c20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28  MEM_Blob);.  if(
22c30 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
22c40 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22c50 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20  BtreeKey(pCrsr, 
22c60 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a  0, n, pOut->z);.
22c70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
22c80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
22c90 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ta(pCrsr, 0, n, 
22ca0 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20  pOut->z);.  }.  
22cb0 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
22cc0 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
22cd0 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
22ce0 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65   ever cast to te
22cf0 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d  xt */.  UPDATE_M
22d00 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
22d10 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
22d20 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20  * Opcode: Rowid 
22d30 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
22d40 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73  * Store in regis
22d50 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
22d60 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b  r which is the k
22d70 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ey of the table 
22d80 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31  entry that.** P1
22d90 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
22da0 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31  int to..**.** P1
22db0 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61   can be either a
22dc0 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
22dd0 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61   or a virtual ta
22de0 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64  ble.  There used
22df0 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61   to.** be a sepa
22e00 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f  rate OP_VRowid o
22e10 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69  pcode for use wi
22e20 74 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  th virtual table
22e30 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f  s, but this.** o
22e40 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f  ne opcode now wo
22e50 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62  rks for both tab
22e60 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73  le types..*/.cas
22e70 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20  e OP_Rowid: {   
22e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22e90 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
22ea0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
22eb0 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20   *pC;.  i64 v;. 
22ec0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
22ed0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
22ee0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
22ef0 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74  odule;..  assert
22f00 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
22f10 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
22f20 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
22f30 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
22f40 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
22f50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
22f60 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
22f70 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  =0 );.  if( pC->
22f80 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70  nullRow ){.    p
22f90 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
22fa0 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b  _Null;.    break
22fb0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  ;.  }else if( pC
22fc0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22fd0 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e   ){.    v = pC->
22fe0 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69  movetoTarget;.#i
22ff0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
23000 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
23010 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70   }else if( pC->p
23020 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20  VtabCursor ){.  
23030 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56    pVtab = pC->pV
23040 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
23050 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ;.    pModule = 
23060 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
23070 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64      assert( pMod
23080 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20  ule->xRowid );. 
23090 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
230a0 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56 74 61  >xRowid(pC->pVta
230b0 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  bCursor, &v);.  
230c0 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d    importVtabErrM
230d0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65  sg(p, pVtab);.#e
230e0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
230f0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
23100 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
23110 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
23120 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72  rsor!=0 );.    r
23130 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
23140 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
23150 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
23160 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
23170 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
23180 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
23190 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 70 43 2d  ){.      v = pC-
231a0 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20  >lastRowid;.    
231b0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
231c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
231d0 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
231e0 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 61 73  r, &v);.      as
231f0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
23200 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79  _OK );  /* Alway
23210 73 20 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20  s so because of 
23220 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61  CursorMoveto() a
23230 62 6f 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  bove */.    }.  
23240 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
23250 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
23260 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f  * Opcode: NullRo
23270 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  w P1 * * * *.**.
23280 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73  ** Move the curs
23290 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20  or P1 to a null 
232a0 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c  row.  Any OP_Col
232b0 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  umn operations.*
232c0 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69  * that occur whi
232d0 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  le the cursor is
232e0 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77   on the null row
232f0 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20   will always.** 
23300 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f  write a NULL..*/
23310 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77  .case OP_NullRow
23320 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
23330 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
23340 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
23350 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
23360 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
23370 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
23380 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
23390 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
233a0 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 1;.  pC->rowid
233b0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 61  IsValid = 0;.  a
233c0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
233d0 6f 72 20 7c 7c 20 70 43 2d 3e 70 56 74 61 62 43  or || pC->pVtabC
233e0 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70  ursor );.  if( p
233f0 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20  C->pCursor ){.  
23400 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
23410 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43  earCursor(pC->pC
23420 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
23430 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23440 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20  e: Last P1 P2 * 
23450 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
23460 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
23470 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
23480 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
23490 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
234a0 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c  l refer to the l
234b0 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
234c0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
234d0 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
234e0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
234f0 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
23500 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
23510 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
23520 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
23530 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
23540 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
23550 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
23560 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
23570 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
23580 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
23590 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
235a0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
235b0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
235c0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
235d0 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
235e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
235f0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
23600 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
23610 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
23620 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
23630 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
23640 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
23650 72 65 73 20 3d 20 30 3b 0a 20 20 69 66 28 20 41  res = 0;.  if( A
23660 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20  LWAYS(pCrsr!=0) 
23670 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
23680 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72  te3BtreeLast(pCr
23690 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20  sr, &res);.  }. 
236a0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
236b0 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65  u8)res;.  pC->de
236c0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
236d0 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
236e0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
236f0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
23700 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
23710 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 72 65   pOp->p2>0 && re
23720 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
23730 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
23740 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
23750 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
23760 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
23770 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
23780 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
23790 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
237a0 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
237b0 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
237c0 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
237d0 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
237e0 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
237f0 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
23800 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
23810 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
23820 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
23830 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
23840 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
23850 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
23860 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
23870 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
23880 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
23890 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
238a0 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
238b0 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
238c0 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
238d0 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
238e0 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
238f0 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
23900 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
23910 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
23920 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
23930 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
23940 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
23950 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
23960 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
23970 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a  orterSort:    /*
23980 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
23990 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47  SQLITE_OMIT_MERG
239a0 45 5f 53 4f 52 54 0a 20 20 70 4f 70 2d 3e 6f 70  E_SORT.  pOp->op
239b0 63 6f 64 65 20 3d 20 4f 50 5f 53 6f 72 74 3b 0a  code = OP_Sort;.
239c0 23 65 6e 64 69 66 0a 63 61 73 65 20 4f 50 5f 53  #endif.case OP_S
239d0 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ort: {        /*
239e0 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
239f0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
23a00 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
23a10 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  ++;.  sqlite3_se
23a20 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65  arch_count--;.#e
23a30 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  ndif.  p->aCount
23a40 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
23a50 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a  ATUS_SORT-1]++;.
23a60 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
23a70 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
23a80 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
23a90 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
23aa0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
23ab0 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
23ac0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
23ad0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
23ae0 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
23af0 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
23b00 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
23b10 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
23b20 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
23b30 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
23b40 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
23b50 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
23b60 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
23b70 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
23b80 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
23b90 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
23ba0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
23bb0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
23bc0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
23bd0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
23be0 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20  P_Rewind: {     
23bf0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
23c00 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23c10 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
23c20 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
23c30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
23c40 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
23c50 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
23c60 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
23c70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
23c80 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
23c90 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72  rt( pC->isSorter
23ca0 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
23cb0 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29  OP_SorterSort) )
23cc0 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 69  ;.  res = 1;.  i
23cd0 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
23ce0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
23cf0 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
23d00 69 6e 64 28 64 62 2c 20 70 43 2c 20 26 72 65 73  ind(db, pC, &res
23d10 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
23d20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
23d30 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  sor;.    assert(
23d40 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63   pCrsr );.    rc
23d50 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
23d60 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  irst(pCrsr, &res
23d70 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46 69 72  );.    pC->atFir
23d80 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30  st = res==0 ?1:0
23d90 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
23da0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
23db0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
23dc0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
23dd0 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
23de0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  Valid = 0;.  }. 
23df0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
23e00 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
23e10 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
23e20 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
23e30 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
23e40 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
23e50 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
23e60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
23e70 65 78 74 20 50 31 20 50 32 20 2a 20 50 34 20 50  ext P1 P2 * P4 P
23e80 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  5.**.** Advance 
23e90 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
23ea0 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
23eb0 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61  he next key/data
23ec0 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
23ed0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
23ee0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
23ef0 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20   more key/value 
23f00 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
23f10 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
23f20 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
23f30 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
23f40 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61   the cursor adva
23f50 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66  nce was successf
23f60 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
23f70 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
23f80 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
23f90 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
23fa0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
23fb0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
23fc0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
23fd0 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
23fe0 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
23ff0 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
24000 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
24010 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a  3BtreeNext()..**
24020 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
24030 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
24040 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
24050 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
24060 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
24070 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
24080 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
24090 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  emented..**.** S
240a0 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f  ee also: Prev.*/
240b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
240c0 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a   P1 P2 * * P5.**
240d0 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73  .** Back up curs
240e0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
240f0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
24100 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61  revious key/data
24110 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
24120 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
24130 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
24140 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c  previous key/val
24150 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
24160 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
24170 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
24180 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
24190 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62   if the cursor b
241a0 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73  ackup was succes
241b0 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
241c0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
241d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
241e0 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
241f0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
24200 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
24210 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
24220 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
24230 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
24240 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
24250 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
24260 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
24270 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
24280 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
24290 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
242a0 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
242b0 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
242c0 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
242d0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
242e0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
242f0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
24300 4e 65 78 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Next:    /* jump
24310 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
24320 45 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52  E_OMIT_MERGE_SOR
24330 54 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  T.  pOp->opcode 
24340 3d 20 4f 50 5f 4e 65 78 74 3b 0a 23 65 6e 64 69  = OP_Next;.#endi
24350 66 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20  f.case OP_Prev: 
24360 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
24370 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
24380 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
24390 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
243a0 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
243b0 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f  s;..  CHECK_FOR_
243c0 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 61 73 73  INTERRUPT;.  ass
243d0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
243e0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
243f0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
24400 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 41 72 72 61  t( pOp->p5<=Arra
24410 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65  ySize(p->aCounte
24420 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  r) );.  pC = p->
24430 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24440 20 20 69 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20    if( pC==0 ){. 
24450 20 20 20 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65     break;  /* Se
24460 65 20 74 69 63 6b 65 74 20 23 32 32 37 33 20 2a  e ticket #2273 *
24470 2f 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  /.  }.  assert( 
24480 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70  pC->isSorter==(p
24490 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
244a0 6f 72 74 65 72 4e 65 78 74 29 20 29 3b 0a 20 20  orterNext) );.  
244b0 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  if( isSorter(pC)
244c0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
244d0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
244e0 53 6f 72 74 65 72 4e 65 78 74 20 29 3b 0a 20 20  SorterNext );.  
244f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
24500 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c  beSorterNext(db,
24510 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65   pC, &res);.  }e
24520 6c 73 65 7b 0a 20 20 20 20 72 65 73 20 3d 20 31  lse{.    res = 1
24530 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
24540 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
24550 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
24560 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29  t( pC->pCursor )
24570 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
24580 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
24590 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  xt || pOp->p4.xA
245a0 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
245b0 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 20 20  treeNext );.    
245c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
245d0 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20  ode!=OP_Prev || 
245e0 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
245f0 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  ==sqlite3BtreePr
24600 65 76 69 6f 75 73 20 29 3b 0a 20 20 20 20 72 63  evious );.    rc
24610 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61   = pOp->p4.xAdva
24620 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  nce(pC->pCursor,
24630 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20 20 70 43   &res);.  }.  pC
24640 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
24650 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  res;.  pC->cache
24660 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
24670 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d  TALE;.  if( res=
24680 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
24690 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
246a0 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 20 70 2d  if( pOp->p5 ) p-
246b0 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70  >aCounter[pOp->p
246c0 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  5-1]++;.#ifdef S
246d0 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
246e0 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
246f0 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
24700 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  }.  pC->rowidIsV
24710 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62 72 65 61  alid = 0;.  brea
24720 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
24730 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32   IdxInsert P1 P2
24740 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 52   P3 * P5.**.** R
24750 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73  egister P2 holds
24760 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65   an SQL index ke
24770 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  y made using the
24780 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  .** MakeRecord i
24790 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68  nstructions.  Th
247a0 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73  is opcode writes
247b0 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74   that key.** int
247c0 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20  o the index P1. 
247d0 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e   Data for the en
247e0 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a  try is nil..**.*
247f0 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74  * P3 is a flag t
24800 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68  hat provides a h
24810 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65  int to the b-tre
24820 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69  e layer that thi
24830 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c  s.** insert is l
24840 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
24850 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ppend..**.** Thi
24860 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
24870 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64  ly works for ind
24880 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  ices.  The equiv
24890 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
248a0 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20  n.** for tables 
248b0 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f  is OP_Insert..*/
248c0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49  .case OP_SorterI
248d0 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20  nsert:       /* 
248e0 69 6e 32 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  in2 */.#ifdef SQ
248f0 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f  LITE_OMIT_MERGE_
24900 53 4f 52 54 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  SORT.  pOp->opco
24910 64 65 20 3d 20 4f 50 5f 49 64 78 49 6e 73 65 72  de = OP_IdxInser
24920 74 3b 0a 23 65 6e 64 69 66 0a 63 61 73 65 20 4f  t;.#endif.case O
24930 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20  P_IdxInsert: {  
24940 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
24950 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
24960 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
24970 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b  rsr;.  int nKey;
24980 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
24990 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Key;..  assert( 
249a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
249b0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
249c0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
249d0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
249e0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
249f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
24a00 73 53 6f 72 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f  sSorter==(pOp->o
24a10 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
24a20 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e  Insert) );.  pIn
24a30 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
24a40 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  2];.  assert( pI
24a50 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
24a60 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20  Blob );.  pCrsr 
24a70 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
24a80 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73   if( ALWAYS(pCrs
24a90 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73  r!=0) ){.    ass
24aa0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
24ab0 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ==0 );.    rc = 
24ac0 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
24ad0 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
24ae0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
24af0 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
24b00 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  ) ){.        rc 
24b10 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
24b20 74 65 72 57 72 69 74 65 28 64 62 2c 20 70 43 2c  terWrite(db, pC,
24b30 20 70 49 6e 32 29 3b 0a 20 20 20 20 20 20 7d 65   pIn2);.      }e
24b40 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 4b 65  lse{.        nKe
24b50 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20  y = pIn2->n;.   
24b60 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32       zKey = pIn2
24b70 2d 3e 7a 3b 0a 20 20 20 20 20 20 20 20 72 63 20  ->z;.        rc 
24b80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
24b90 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79  sert(pCrsr, zKey
24ba0 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30  , nKey, "", 0, 0
24bb0 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20  , pOp->p3, .    
24bc0 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70          ((pOp->p
24bd0 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
24be0 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
24bf0 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a  seekResult : 0).
24c00 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20              );. 
24c10 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
24c20 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
24c30 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  o==0 );.        
24c40 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
24c50 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
24c60 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
24c70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
24c80 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
24c90 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
24ca0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
24cb0 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
24cc0 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
24cd0 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
24ce0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
24cf0 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
24d00 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
24d10 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
24d20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
24d30 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
24d40 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
24d50 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
24d60 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
24d70 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
24d80 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
24d90 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
24da0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
24db0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
24dc0 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
24dd0 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  2+pOp->p3<=p->nM
24de0 65 6d 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  em+1 );.  assert
24df0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24e00 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
24e10 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
24e20 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24e30 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
24e40 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
24e50 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
24e60 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
24e70 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
24e80 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
24e90 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
24ea0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
24eb0 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b      r.flags = 0;
24ec0 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
24ed0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69  Mem[pOp->p2];.#i
24ee0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
24ef0 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
24f00 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
24f10 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
24f20 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
24f30 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
24f40 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  dif.    rc = sql
24f50 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
24f60 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
24f70 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
24f80 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
24f90 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
24fa0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
24fb0 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
24fc0 28 70 43 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20  (pCrsr);.    }. 
24fd0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
24fe0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
24ff0 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   );.    pC->cach
25000 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
25010 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65  STALE;.  }.  bre
25020 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
25030 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32  : IdxRowid P1 P2
25040 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
25050 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
25060 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77   P2 an integer w
25070 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74  hich is the last
25080 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65   entry in the re
25090 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65  cord at.** the e
250a0 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  nd of the index 
250b0 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  key pointed to b
250c0 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68  y cursor P1.  Th
250d0 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c  is integer shoul
250e0 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69  d be.** the rowi
250f0 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  d of the table e
25100 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68  ntry to which th
25110 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70  is index entry p
25120 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  oints..**.** See
25130 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61   also: Rowid, Ma
25140 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73  keRecord..*/.cas
25150 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b  e OP_IdxRowid: {
25160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25170 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
25180 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a   */.  BtCursor *
25190 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72  pCrsr;.  VdbeCur
251a0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72  sor *pC;.  i64 r
251b0 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28  owid;..  assert(
251c0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
251d0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
251e0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
251f0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
25200 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
25210 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
25220 70 43 75 72 73 6f 72 3b 0a 20 20 70 4f 75 74 2d  pCursor;.  pOut-
25230 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
25240 6c 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  l;.  if( ALWAYS(
25250 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
25260 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
25270 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
25280 29 3b 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  );.    if( NEVER
25290 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (rc) ) goto abor
252a0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
252b0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
252c0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
252d0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
252e0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
252f0 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  );.    if( !pC->
25300 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
25310 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
25320 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43  eIdxRowid(db, pC
25330 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  rsr, &rowid);.  
25340 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
25350 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
25360 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
25370 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
25380 7d 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e  }.      pOut->u.
25390 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20  i = rowid;.     
253a0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
253b0 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20  EM_Int;.    }.  
253c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
253d0 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50   Opcode: IdxGE P
253e0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
253f0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
25400 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
25410 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
25420 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
25430 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
25440 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44   omits the ROWID
25450 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
25460 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
25470 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
25480 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
25490 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
254a0 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52  , ignoring the R
254b0 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
254c0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
254d0 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
254e0 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
254f0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
25500 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
25510 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
25520 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
25530 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
25540 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
25550 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
25560 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68  non-zero then th
25570 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69  e key value is i
25580 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65  ncreased by an e
25590 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72  psilon .** prior
255a0 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   to the comparis
255b0 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20 74  on.  This make t
255c0 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
255d0 69 6b 65 20 49 64 78 47 54 20 65 78 63 65 70 74  ike IdxGT except
255e0 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65 20  .** that if the 
255f0 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74 65  key from registe
25600 72 20 50 33 20 69 73 20 61 20 70 72 65 66 69 78  r P3 is a prefix
25610 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20 74   of the key in t
25620 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  he cursor,.** th
25630 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
25640 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f 75  e whereas it wou
25650 6c 64 20 62 65 20 74 72 75 65 20 77 69 74 68 20  ld be true with 
25660 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  IdxGT..*/./* Opc
25670 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32  ode: IdxLT P1 P2
25680 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
25690 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
256a0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
256b0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
256c0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
256d0 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
256e0 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
256f0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
25700 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
25710 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
25720 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
25730 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
25740 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
25750 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
25760 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
25770 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
25780 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
25790 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
257a0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
257b0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
257c0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
257d0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
257e0 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
257f0 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
25800 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
25810 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
25820 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20  on prior .** to 
25830 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
25840 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20   This makes the 
25850 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65  opcode work like
25860 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20   IdxLE..*/.case 
25870 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
25880 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
25890 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20  se OP_IdxGE: {  
258a0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
258b0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
258c0 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
258d0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
258e0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
258f0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
25900 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
25910 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
25920 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
25930 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
25940 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
25950 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28 20 41  dered );.  if( A
25960 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f  LWAYS(pC->pCurso
25970 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73  r!=0) ){.    ass
25980 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
25990 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
259a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
259b0 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
259c0 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =1 );.    assert
259d0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
259e0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 72  4_INT32 );.    r
259f0 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
25a00 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
25a10 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
25a20 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 69 66 28  p->p4.i;.    if(
25a30 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
25a40 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
25a50 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55  CKED_INCRKEY | U
25a60 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d  NPACKED_PREFIX_M
25a70 41 54 43 48 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ATCH;.    }else{
25a80 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  .      r.flags =
25a90 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
25aa0 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20 20  _MATCH;.    }.  
25ab0 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
25ac0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
25ad0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
25ae0 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
25af0 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
25b00 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
25b10 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
25b20 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
25b30 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
25b40 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
25b50 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29  re(pC, &r, &res)
25b60 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
25b70 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
25b80 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d  ){.      res = -
25b90 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  res;.    }else{.
25ba0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
25bb0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
25bc0 78 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73  xGE );.      res
25bd0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
25be0 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20  ( res>0 ){.     
25bf0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
25c00 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1 ;.    }.  }.  
25c10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
25c20 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
25c30 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
25c40 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
25c50 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
25c60 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
25c70 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
25c80 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
25c90 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
25ca0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
25cb0 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
25cc0 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
25cd0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
25ce0 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
25cf0 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
25d00 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
25d10 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
25d20 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
25d30 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
25d40 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
25d50 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
25d60 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
25d70 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
25d80 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
25d90 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
25da0 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
25db0 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
25dc0 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
25dd0 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
25de0 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
25df0 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
25e00 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
25e10 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
25e20 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
25e30 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
25e40 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
25e50 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
25e60 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
25e70 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
25e80 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
25e90 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
25ea0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
25eb0 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20  ster P2.  If no 
25ec0 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e  page .** movemen
25ed0 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
25ee0 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
25ef0 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
25f00 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20  was already .** 
25f10 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
25f20 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
25f30 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
25f40 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
25f50 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  P2..** If AUTOVA
25f60 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
25f70 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
25f80 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
25f90 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
25fa0 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
25fb0 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
25fc0 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70   {     /* out2-p
25fd0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
25fe0 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74  nt iMoved;.  int
25ff0 20 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70   iCnt;.  Vdbe *p
26000 56 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Vdbe;.  int iDb;
26010 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26020 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
26030 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20  E.  iCnt = 0;.  
26040 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56  for(pVdbe=db->pV
26050 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62  dbe; pVdbe; pVdb
26060 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78 74  e = pVdbe->pNext
26070 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62 65  ){.    if( pVdbe
26080 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
26090 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65  GIC_RUN && pVdbe
260a0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32  ->inVtabMethod<2
260b0 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30   && pVdbe->pc>=0
260c0 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b   ){.      iCnt++
260d0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73  ;.    }.  }.#els
260e0 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61  e.  iCnt = db->a
260f0 63 74 69 76 65 56 64 62 65 43 6e 74 3b 0a 23 65  ctiveVdbeCnt;.#e
26100 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ndif.  pOut->fla
26110 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
26120 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20   if( iCnt>1 ){. 
26130 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
26140 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72  OCKED;.    p->er
26150 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41  rorAction = OE_A
26160 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  bort;.  }else{. 
26170 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33     iDb = pOp->p3
26180 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 43  ;.    assert( iC
26190 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73  nt==1 );.    ass
261a0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
261b0 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
261c0 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  1)<<iDb))!=0 );.
261d0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
261e0 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64  BtreeDropTable(d
261f0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
26200 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65   pOp->p1, &iMove
26210 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  d);.    pOut->fl
26220 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
26230 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
26240 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53  Moved;.#ifndef S
26250 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
26260 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63  ACUUM.    if( rc
26270 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69  ==SQLITE_OK && i
26280 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20  Moved!=0 ){.    
26290 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67    sqlite3RootPag
262a0 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20  eMoved(db, iDb, 
262b0 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29  iMoved, pOp->p1)
262c0 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f  ;.      /* All O
262d0 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  P_Destroy operat
262e0 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68  ions occur on th
262f0 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a  e same btree */.
26300 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65        assert( re
26310 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
26320 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65  ==0 || resetSche
26330 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31  maOnFault==iDb+1
26340 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53   );.      resetS
26350 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69  chemaOnFault = i
26360 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Db+1;.    }.#end
26370 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
26380 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
26390 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a  ear P1 P2 P3.**.
263a0 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
263b0 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61  ntents of the da
263c0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
263d0 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
263e0 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20   page.** in the 
263f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
26400 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42   given by P1.  B
26410 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72  ut, unlike Destr
26420 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65  oy, do not.** re
26430 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f  move the table o
26440 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65  r index from the
26450 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
26460 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
26470 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69  being clear is i
26480 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
26490 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d  ase file if P2==
264a0 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20  0.  If.** P2==1 
264b0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
264c0 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
264d0 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
264e0 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
264f0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
26500 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
26510 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
26520 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
26530 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
26540 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  3 value is non-z
26550 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61  ero, then the ta
26560 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f 20  ble referred to 
26570 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e  must be an.** in
26580 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53  tkey table (an S
26590 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e  QL table, not an
265a0 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73   index). In this
265b0 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68   case the row ch
265c0 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69  ange .** count i
265d0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  s incremented by
265e0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
265f0 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
26600 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20   being cleared. 
26610 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65  .** If P3 is gre
26620 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
26630 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73  then the value s
26640 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
26650 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20  r P3 is.** also 
26660 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
26670 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
26680 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
26690 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a  eing cleared..**
266a0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65  .** See also: De
266b0 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50  stroy.*/.case OP
266c0 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20  _Clear: {.  int 
266d0 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68  nChange;. .  nCh
266e0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65  ange = 0;.  asse
266f0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
26700 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
26710 29 3c 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20  )<<pOp->p2))!=0 
26720 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
26730 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
26740 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  (.      db->aDb[
26750 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f  pOp->p2].pBt, pO
26760 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20  p->p1, (pOp->p3 
26770 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a  ? &nChange : 0).
26780 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e    );.  if( pOp->
26790 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68  p3 ){.    p->nCh
267a0 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b  ange += nChange;
267b0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
267c0 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  >0 ){.      asse
267d0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
267e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
267f0 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
26800 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
26810 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
26820 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d     aMem[pOp->p3]
26830 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b  .u.i += nChange;
26840 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
26850 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26860 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31  : CreateTable P1
26870 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
26880 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74  Allocate a new t
26890 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e  able in the main
268a0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
268b0 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
268c0 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
268d0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
268e0 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
268f0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
26900 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
26910 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
26920 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
26930 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
26940 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  * register P2.**
26950 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e  .** The differen
26960 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62  ce between a tab
26970 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20  le and an index 
26980 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c  is this:  A tabl
26990 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61  e must.** have a
269a0 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20   4-byte integer 
269b0 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65  key and can have
269c0 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e   arbitrary data.
269d0 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61    An index.** ha
269e0 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b  s an arbitrary k
269f0 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a  ey but no data..
26a00 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
26a10 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f  CreateIndex.*/./
26a20 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
26a30 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20  Index P1 P2 * * 
26a40 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  *.**.** Allocate
26a50 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20   a new index in 
26a60 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
26a70 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
26a80 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
26a90 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
26aa0 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
26ab0 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
26ac0 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
26ad0 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
26ae0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
26af0 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
26b00 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
26b10 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
26b20 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
26b30 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  n OP_CreateTable
26b40 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
26b50 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
26b60 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e  case OP_CreateIn
26b70 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20 20  dex:            
26b80 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
26b90 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  se */.case OP_Cr
26ba0 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20  eateTable: {    
26bb0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
26bc0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
26bd0 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c  t pgno;.  int fl
26be0 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  ags;.  Db *pDb;.
26bf0 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61  .  pgno = 0;.  a
26c00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
26c10 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
26c20 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
26c30 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
26c40 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
26c50 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
26c60 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
26c70 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
26c80 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
26c90 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
26ca0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74  opcode==OP_Creat
26cb0 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  eTable ){.    /*
26cc0 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
26cd0 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c  NTKEY; */.    fl
26ce0 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
26cf0 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EY;.  }else{.   
26d00 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42   flags = BTREE_B
26d10 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63  LOBKEY;.  }.  rc
26d20 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
26d30 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
26d40 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67  pBt, &pgno, flag
26d50 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  s);.  pOut->u.i 
26d60 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b  = pgno;.  break;
26d70 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
26d80 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20  arseSchema P1 * 
26d90 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
26da0 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
26db0 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
26dc0 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
26dd0 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
26de0 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
26df0 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
26e00 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  se P4. .**.** Th
26e10 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
26e20 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  s the parser to 
26e30 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72  create a new vir
26e40 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a  tual machine,.**
26e50 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e   then runs the n
26e60 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
26e70 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20  ne.  It is thus 
26e80 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63  a re-entrant opc
26e90 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
26ea0 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20  ParseSchema: {. 
26eb0 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73   int iDb;.  cons
26ec0 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
26ed0 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
26ee0 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61   InitData initDa
26ef0 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72  ta;..  /* Any pr
26f00 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
26f10 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68   that invokes th
26f20 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68  is opcode will h
26f30 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a  old mutexes.  **
26f40 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e   on every btree.
26f50 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72    This is a prer
26f60 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76  equisite for inv
26f70 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69  oking .  ** sqli
26f80 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
26f90 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  )..  */.#ifdef S
26fa0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
26fb0 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d  r(iDb=0; iDb<db-
26fc0 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20  >nDb; iDb++){.  
26fd0 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31    assert( iDb==1
26fe0 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
26ff0 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
27000 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a  Db[iDb].pBt) );.
27010 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44    }.#endif..  iD
27020 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
27030 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
27040 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
27050 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50    assert( DbHasP
27060 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c  roperty(db, iDb,
27070 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
27080 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74  ) );.  /* Used t
27090 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e  o be a condition
270a0 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73  al */ {.    zMas
270b0 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42  ter = SCHEMA_TAB
270c0 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69  LE(iDb);.    ini
270d0 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
270e0 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20     initData.iDb 
270f0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69  = pOp->p1;.    i
27100 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67  nitData.pzErrMsg
27110 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a   = &p->zErrMsg;.
27120 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
27130 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
27140 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
27150 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
27160 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
27170 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20  ERE %s ORDER BY 
27180 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64  rowid",.       d
27190 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d  b->aDb[iDb].zNam
271a0 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d  e, zMaster, pOp-
271b0 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20  >p4.z);.    if( 
271c0 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  zSql==0 ){.     
271d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
271e0 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  EM;.    }else{. 
271f0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
27200 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b  >init.busy==0 );
27210 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
27220 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  busy = 1;.      
27230 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51  initData.rc = SQ
27240 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61  LITE_OK;.      a
27250 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
27260 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
27270 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
27280 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71  xec(db, zSql, sq
27290 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
272a0 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29  k, &initData, 0)
272b0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
272c0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d  SQLITE_OK ) rc =
272d0 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20   initData.rc;.  
272e0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
272f0 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  e(db, zSql);.   
27300 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
27310 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
27320 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
27330 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f  _NOMEM ){.    go
27340 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
27350 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66   break;  .}..#if
27360 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
27370 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f  _OMIT_ANALYZE)./
27380 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e  * Opcode: LoadAn
27390 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20  alysis P1 * * * 
273a0 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65  *.**.** Read the
273b0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
273c0 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65  ble for database
273d0 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65   P1 and load the
273e0 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74   content.** of t
273f0 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74  hat table into t
27400 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  he internal inde
27410 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54  x hash table.  T
27420 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a  his will cause.*
27430 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74  * the analysis t
27440 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70  o be used when p
27450 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62  reparing all sub
27460 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e  sequent queries.
27470 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64  .*/.case OP_Load
27480 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73  Analysis: {.  as
27490 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
274a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
274b0 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  nDb );.  rc = sq
274c0 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
274d0 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  d(db, pOp->p1);.
274e0 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e    break;  .}.#en
274f0 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
27500 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
27510 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  YZE) */../* Opco
27520 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31  de: DropTable P1
27530 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
27540 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
27550 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
27560 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
27570 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
27580 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64   the table named
27590 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
275a0 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
275b0 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c  led after a tabl
275c0 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  e.** is dropped 
275d0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
275e0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
275f0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
27600 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
27610 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
27620 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
27630 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61  /.case OP_DropTa
27640 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ble: {.  sqlite3
27650 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
27660 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  able(db, pOp->p1
27670 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
27680 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
27690 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50  ode: DropIndex P
276a0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
276b0 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
276c0 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
276d0 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
276e0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
276f0 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65  * the index name
27700 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
27710 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
27720 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e  lled after an in
27730 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  dex.** is droppe
27740 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
27750 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
27760 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
27770 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
27780 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
27790 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
277a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
277b0 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74  Index: {.  sqlit
277c0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
277d0 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e  eIndex(db, pOp->
277e0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
277f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
27800 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67  pcode: DropTrigg
27810 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  er P1 * * P4 *.*
27820 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
27830 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
27840 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
27850 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
27860 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65  be.** the trigge
27870 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  r named P4 in da
27880 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
27890 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
278a0 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73   a trigger.** is
278b0 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
278c0 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
278d0 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
278e0 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
278f0 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
27900 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
27910 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
27920 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20  OP_DropTrigger: 
27930 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
27940 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
27950 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  r(db, pOp->p1, p
27960 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
27970 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
27980 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
27990 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f  GRITY_CHECK./* O
279a0 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79  pcode: Integrity
279b0 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  Ck P1 P2 P3 * P5
279c0 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61  .**.** Do an ana
279d0 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72  lysis of the cur
279e0 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61  rently open data
279f0 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a  base.  Store in.
27a00 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74  ** register P1 t
27a10 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72  he text of an er
27a20 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63  ror message desc
27a30 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c  ribing any probl
27a40 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72  ems..** If no pr
27a50 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64  oblems are found
27a60 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  , store a NULL i
27a70 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
27a80 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
27a90 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
27aa0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
27ab0 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f   of allowed erro
27ac0 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72  rs..** At most r
27ad0 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69  eg(P3) errors wi
27ae0 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a  ll be reported..
27af0 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
27b00 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  s, the analysis 
27b10 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73  stops as soon as
27b20 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20   reg(P1) errors 
27b30 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52  are .** seen.  R
27b40 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65  eg(P1) is update
27b50 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65  d with the numbe
27b60 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  r of errors rema
27b70 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ining..**.** The
27b80 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
27b90 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73  rs of all tables
27ba0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
27bb0 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20   are integer.** 
27bc0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31  stored in reg(P1
27bd0 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65  ), reg(P1+1), re
27be0 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54  g(P1+2), ....  T
27bf0 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c  here are P2 tabl
27c00 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a  es.** total..**.
27c10 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
27c20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20  zero, the check 
27c30 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61  is done on the a
27c40 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
27c50 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74  e.** file, not t
27c60 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
27c70 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   file..**.** Thi
27c80 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
27c90 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
27ca0 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  e integrity_chec
27cb0 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73  k pragma..*/.cas
27cc0 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  e OP_IntegrityCk
27cd0 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b  : {.  int nRoot;
27ce0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
27cf0 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65  of tables to che
27d00 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20  ck.  (Number of 
27d10 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a  root pages.) */.
27d20 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20    int *aRoot;   
27d30 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f    /* Array of ro
27d40 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66  otpage numbers f
27d50 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20  or tables to be 
27d60 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74  checked */.  int
27d70 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   j;          /* 
27d80 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
27d90 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
27da0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
27db0 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a  rrors reported *
27dc0 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  /.  char *z;    
27dd0 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
27de0 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20  he error report 
27df0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b  */.  Mem *pnErr;
27e00 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
27e10 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f   keeping track o
27e20 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
27e30 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74  ng */.  .  nRoot
27e40 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
27e50 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
27e60 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74  .  aRoot = sqlit
27e70 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
27e80 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e  , sizeof(int)*(n
27e90 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28  Root+1) );.  if(
27ea0 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f   aRoot==0 ) goto
27eb0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72   no_mem;.  asser
27ec0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
27ed0 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
27ee0 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61   );.  pnErr = &a
27ef0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
27f00 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
27f10 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
27f20 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
27f30 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
27f40 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
27f50 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  ob))==0 );.  pIn
27f60 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
27f70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a  1];.  for(j=0; j
27f80 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20  <nRoot; j++){.  
27f90 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e    aRoot[j] = (in
27fa0 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  t)sqlite3VdbeInt
27fb0 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b  Value(&pIn1[j]);
27fc0 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20  .  }.  aRoot[j] 
27fd0 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
27fe0 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29  Op->p5<db->nDb )
27ff0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
28000 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
28010 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
28020 70 35 29 29 21 3d 30 20 29 3b 0a 20 20 7a 20 3d  p5))!=0 );.  z =
28030 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
28040 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e  egrityCheck(db->
28050 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74  aDb[pOp->p5].pBt
28060 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a  , aRoot, nRoot,.
28070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28090 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69   (int)pnErr->u.i
280a0 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69  , &nErr);.  sqli
280b0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61 52  te3DbFree(db, aR
280c0 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75  oot);.  pnErr->u
280d0 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71  .i -= nErr;.  sq
280e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
280f0 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28  ull(pIn1);.  if(
28100 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20   nErr==0 ){.    
28110 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a  assert( z==0 );.
28120 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30    }else if( z==0
28130 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
28140 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  mem;.  }else{.  
28150 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
28160 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20  SetStr(pIn1, z, 
28170 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
28180 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a   sqlite3_free);.
28190 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58    }.  UPDATE_MAX
281a0 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
281b0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
281c0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e  angeEncoding(pIn
281d0 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
281e0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
281f0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  /* SQLITE_OMIT_I
28200 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a  NTEGRITY_CHECK *
28210 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  /../* Opcode: Ro
28220 77 53 65 74 41 64 64 20 50 31 20 50 32 20 2a 20  wSetAdd P1 P2 * 
28230 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74  * *.**.** Insert
28240 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
28250 75 65 20 68 65 6c 64 20 62 79 20 72 65 67 69 73  ue held by regis
28260 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62 6f  ter P2 into a bo
28270 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  olean index.** h
28280 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  eld in register 
28290 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73  P1..**.** An ass
282a0 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20  ertion fails if 
282b0 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P2 is not an int
282c0 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
282d0 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20  _RowSetAdd: {   
282e0 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20      /* in1, in2 
282f0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
28300 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
28310 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
28320 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p2];.  assert( (
28330 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
28340 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69  M_Int)!=0 );.  i
28350 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
28360 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
28370 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
28380 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
28390 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
283a0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
283b0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
283c0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
283d0 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
283e0 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52  nsert(pIn1->u.pR
283f0 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69  owSet, pIn2->u.i
28400 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
28410 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
28420 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20  Read P1 P2 P3 * 
28430 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20  *.**.** Extract 
28440 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
28450 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20  ue from boolean 
28460 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75 74  index P1 and put
28470 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
28480 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e  .** register P3.
28490 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e    Or, if boolean
284a0 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69   index P1 is ini
284b0 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65  tially empty, le
284c0 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e  ave P3.** unchan
284d0 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20  ged and jump to 
284e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a  instruction P2..
284f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
28500 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f  tRead: {       /
28510 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74  * jump, in1, out
28520 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a  3 */.  i64 val;.
28530 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45    CHECK_FOR_INTE
28540 52 52 55 50 54 3b 0a 20 20 70 49 6e 31 20 3d 20  RRUPT;.  pIn1 = 
28550 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
28560 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
28570 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
28580 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
28590 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e  e3RowSetNext(pIn
285a0 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76  1->u.pRowSet, &v
285b0 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20  al)==0.  ){.    
285c0 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69  /* The boolean i
285d0 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f  ndex is empty */
285e0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
285f0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
28600 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  ;.    pc = pOp->
28610 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
28620 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20  .    /* A value 
28630 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20  was pulled from 
28640 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  the index */.   
28650 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
28660 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
28670 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20  p->p3], val);.  
28680 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
28690 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54   Opcode: RowSetT
286a0 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a  est P1 P2 P3 P4.
286b0 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
286c0 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  3 is assumed to 
286d0 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e  hold a 64-bit in
286e0 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20  teger value. If 
286f0 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63  register P1.** c
28700 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74  ontains a RowSet
28710 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74   object and that
28720 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63   RowSet object c
28730 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76  ontains.** the v
28740 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c  alue held in P3,
28750 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65   jump to registe
28760 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  r P2. Otherwise,
28770 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69   insert the.** i
28780 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74  nteger in P3 int
28790 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64  o the RowSet and
287a0 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20   continue on to 
287b0 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f  the.** next opco
287c0 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f  de..**.** The Ro
287d0 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f  wSet object is o
287e0 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65  ptimized for the
287f0 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63 63   case where succ
28800 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f  essive sets.** o
28810 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72  f integers, wher
28820 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61  e each set conta
28830 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65  ins no duplicate
28840 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f  s. Each set.** o
28850 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e  f values is iden
28860 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71  tified by a uniq
28870 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65  ue P4 value. The
28880 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75   first set.** mu
28890 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74  st have P4==0, t
288a0 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d  he final set P4=
288b0 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20  -1.  P4 must be 
288c0 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20  either -1 or.** 
288d0 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46  non-negative.  F
288e0 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  or non-negative 
288f0 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c  values of P4 onl
28900 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a  y the lower 4.**
28910 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69 66   bits are signif
28920 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  icant..**.** Thi
28930 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a  s allows optimiz
28940 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e  ations: (a) when
28950 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20   P4==0 there is 
28960 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a  no need to test.
28970 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62  ** the rowset ob
28980 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20  ject for P3, as 
28990 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
289a0 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20   not to contain 
289b0 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20  it,.** (b) when 
289c0 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20  P4==-1 there is 
289d0 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72  no need to inser
289e0 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20  t the value, as 
289f0 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72  it will.** never
28a00 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20   be tested for, 
28a10 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76  and (c) when a v
28a20 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72  alue that is par
28a30 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a  t of set X is.**
28a40 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65   inserted, there
28a50 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73   is no need to s
28a60 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20  earch to see if 
28a70 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77  the same value w
28a80 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
28a90 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
28aa0 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79  t of set X (only
28ab0 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69   if it was previ
28ac0 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65  ously.** inserte
28ad0 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d  d as part of som
28ae0 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f  e other set)..*/
28af0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54  .case OP_RowSetT
28b00 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  est: {          
28b10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
28b20 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
28b30 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e    int iSet;.  in
28b40 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e  t exists;..  pIn
28b50 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
28b60 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
28b70 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
28b80 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Set = pOp->p4.i;
28b90 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
28ba0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
28bb0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65  ;..  /* If there
28bc0 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68   is anything oth
28bd0 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74  er than a rowset
28be0 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72   object in memor
28bf0 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20  y cell P1,.  ** 
28c00 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e  delete it now an
28c10 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20  d initialize P1 
28c20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f  with an empty ro
28c30 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20  wset.  */.  if( 
28c40 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
28c50 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
28c60 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
28c70 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
28c80 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  1);.    if( (pIn
28c90 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
28ca0 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
28cb0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
28cc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
28cd0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
28ce0 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d  .  assert( iSet=
28cf0 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29  =-1 || iSet>=0 )
28d00 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a  ;.  if( iSet ){.
28d10 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c      exists = sql
28d20 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70  ite3RowSetTest(p
28d30 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
28d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d60 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f 20 69  (u8)(iSet>=0 ? i
28d70 53 65 74 20 26 20 30 78 66 20 3a 20 30 78 66 66  Set & 0xf : 0xff
28d80 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
28d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28da0 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20    pIn3->u.i);.  
28db0 20 20 69 66 28 20 65 78 69 73 74 73 20 29 7b 0a    if( exists ){.
28dc0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
28dd0 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72  p2 - 1;.      br
28de0 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
28df0 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a   if( iSet>=0 ){.
28e00 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65      sqlite3RowSe
28e10 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
28e20 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75  pRowSet, pIn3->u
28e30 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  .i);.  }.  break
28e40 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
28e50 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
28e60 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  R../* Opcode: Pr
28e70 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50  ogram P1 P2 P3 P
28e80 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  4 *.**.** Execut
28e90 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  e the trigger pr
28ea0 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73 20  ogram passed as 
28eb0 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42 50  P4 (type P4_SUBP
28ec0 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20  ROGRAM). .**.** 
28ed0 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P1 contains the 
28ee0 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d  address of the m
28ef0 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
28f00 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72  contains the fir
28f10 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65  st memory .** ce
28f20 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  ll in an array o
28f30 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61 73  f values used as
28f40 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
28f50 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50  e sub-program. P
28f60 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74  2 .** contains t
28f70 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  he address to ju
28f80 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75 62  mp to if the sub
28f90 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20  -program throws 
28fa0 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78  an IGNORE .** ex
28fb0 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68  ception using th
28fc0 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
28fd0 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33 20  on. Register P3 
28fe0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
28ff0 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65  ress .** of a me
29000 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69  mory cell in thi
29010 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20 56  s (the parent) V
29020 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  M that is used t
29030 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a  o allocate the .
29040 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ** memory requir
29050 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76 64  ed by the sub-vd
29060 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a  be at runtime..*
29070 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
29080 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63  nter to the VM c
29090 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
290a0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a  igger program..*
290b0 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61  /.case OP_Progra
290c0 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
290d0 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ump */.  int nMe
290e0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
290f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
29100 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66  mory registers f
29110 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
29120 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20  /.  int nByte;  
29130 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
29140 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20  ytes of runtime 
29150 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66  space required f
29160 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
29170 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20  /.  Mem *pRt;   
29180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
29190 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63  egister to alloc
291a0 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63  ate runtime spac
291b0 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  e */.  Mem *pMem
291c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
291d0 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74  * Used to iterat
291e0 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79  e through memory
291f0 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20   cells */.  Mem 
29200 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
29210 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f      /* Last memo
29220 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61  ry cell in new a
29230 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72  rray */.  VdbeFr
29240 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
29250 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72    /* New vdbe fr
29260 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69  ame to execute i
29270 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  n */.  SubProgra
29280 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
29290 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f  * Sub-program to
292a0 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f   execute */.  vo
292b0 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20  id *t;          
292c0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69        /* Token i
292d0 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67  dentifying trigg
292e0 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61  er */..  pProgra
292f0 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f  m = pOp->p4.pPro
29300 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61  gram;.  pRt = &a
29310 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
29320 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
29330 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20  ->nOp>0 );.  .  
29340 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61  /* If the p5 fla
29350 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  g is clear, then
29360 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
29370 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
29380 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  s is .  ** disab
29390 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64  led for backward
293a0 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  s compatibility 
293b0 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68  (p5 is set if th
293c0 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20  is sub-program. 
293d0 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20   ** is really a 
293e0 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66  trigger, not a f
293f0 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f  oreign key actio
29400 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20  n, and the flag 
29410 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65  set.  ** and cle
29420 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41  ared by the "PRA
29430 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72  GMA recursive_tr
29440 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20  iggers" command 
29450 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20  is clear)..  ** 
29460 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75  .  ** It is recu
29470 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
29480 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74   of triggers, at
29490 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20   the SQL level, 
294a0 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69  that is .  ** di
294b0 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20  sabled. In some 
294c0 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74  cases a single t
294d0 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72  rigger may gener
294e0 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ate more than on
294f0 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72  e .  ** SubProgr
29500 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67  am (if the trigg
29510 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74  er may be execut
29520 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61  ed with more tha
29530 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20  n one different 
29540 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43  .  ** ON CONFLIC
29550 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75  T algorithm). Su
29560 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75  bProgram structu
29570 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  res associated w
29580 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c  ith a.  ** singl
29590 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61  e trigger all ha
295a0 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  ve the same valu
295b0 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f  e for the SubPro
295c0 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a  gram.token .  **
295d0 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20   variable.  */. 
295e0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
295f0 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d      t = pProgram
29600 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72  ->token;.    for
29610 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
29620 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72  e; pFrame && pFr
29630 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70  ame->token!=t; p
29640 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
29650 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20  arent);.    if( 
29660 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a  pFrame ) break;.
29670 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46    }..  if( p->nF
29680 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74  rame>=db->aLimit
29690 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52  [SQLITE_LIMIT_TR
296a0 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a  IGGER_DEPTH] ){.
296b0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
296c0 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74  ERROR;.    sqlit
296d0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
296e0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f  zErrMsg, db, "to
296f0 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66  o many levels of
29700 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69   trigger recursi
29710 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  on");.    break;
29720 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73  .  }..  /* Regis
29730 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20  ter pRt is used 
29740 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d  to store the mem
29750 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20  ory required to 
29760 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20  save the state. 
29770 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65   ** of the curre
29780 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20  nt program, and 
29790 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  the memory requi
297a0 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74  red at runtime t
297b0 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74  o execute.  ** t
297c0 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
297d0 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67  am. If this trig
297e0 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72  ger has been fir
297f0 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20  ed before, then 
29800 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72  pRt .  ** is alr
29810 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20  eady allocated. 
29820 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75  Otherwise, it mu
29830 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  st be initialize
29840 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52  d.  */.  if( (pR
29850 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61  t->flags&MEM_Fra
29860 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  me)==0 ){.    /*
29870 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d   SubProgram.nMem
29880 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
29890 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
298a0 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68  cells used by th
298b0 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61  e .    ** progra
298c0 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50  m stored in SubP
298d0 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77  rogram.aOp. As w
298e0 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e  ell as these, on
298f0 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20  e memory.    ** 
29900 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64  cell is required
29910 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72   for each cursor
29920 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f   used by the pro
29930 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a  gram. Set local.
29940 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20      ** variable 
29950 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c  nMem (and later,
29960 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c   VdbeFrame.nChil
29970 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61  dMem) to this va
29980 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lue..    */.    
29990 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d  nMem = pProgram-
299a0 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d  >nMem + pProgram
299b0 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74  ->nCsr;.    nByt
299c0 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f  e = ROUND8(sizeo
299d0 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20  f(VdbeFrame)).  
299e0 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d              + nM
299f0 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29  em * sizeof(Mem)
29a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
29a10 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20   pProgram->nCsr 
29a20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  * sizeof(VdbeCur
29a30 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20  sor *).         
29a40 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
29a50 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28  >nOnce * sizeof(
29a60 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20  u8);.    pFrame 
29a70 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
29a80 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29  cZero(db, nByte)
29a90 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d  ;.    if( !pFram
29aa0 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  e ){.      goto 
29ab0 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
29ac0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
29ad0 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20  Release(pRt);.  
29ae0 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d    pRt->flags = M
29af0 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52  EM_Frame;.    pR
29b00 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46  t->u.pFrame = pF
29b10 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d  rame;..    pFram
29b20 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46  e->v = p;.    pF
29b30 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20  rame->nChildMem 
29b40 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  = nMem;.    pFra
29b50 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20  me->nChildCsr = 
29b60 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a  pProgram->nCsr;.
29b70 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d      pFrame->pc =
29b80 20 70 63 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d   pc;.    pFrame-
29b90 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  >aMem = p->aMem;
29ba0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65  .    pFrame->nMe
29bb0 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20  m = p->nMem;.   
29bc0 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d   pFrame->apCsr =
29bd0 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70   p->apCsr;.    p
29be0 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d  Frame->nCursor =
29bf0 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20   p->nCursor;.   
29c00 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70   pFrame->aOp = p
29c10 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->aOp;.    pFram
29c20 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b  e->nOp = p->nOp;
29c30 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  .    pFrame->tok
29c40 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74  en = pProgram->t
29c50 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65  oken;.    pFrame
29c60 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d  ->aOnceFlag = p-
29c70 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20  >aOnceFlag;.    
29c80 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61  pFrame->nOnceFla
29c90 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67  g = p->nOnceFlag
29ca0 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56  ;..    pEnd = &V
29cb0 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
29cc0 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69  me)[pFrame->nChi
29cd0 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28  ldMem];.    for(
29ce0 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65  pMem=VdbeFrameMe
29cf0 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21  m(pFrame); pMem!
29d00 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a  =pEnd; pMem++){.
29d10 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67        pMem->flag
29d20 73 20 3d 20 4d 45 4d 5f 49 6e 76 61 6c 69 64 3b  s = MEM_Invalid;
29d30 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20  .      pMem->db 
29d40 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  = db;.    }.  }e
29d50 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20  lse{.    pFrame 
29d60 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b  = pRt->u.pFrame;
29d70 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
29d80 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f  ogram->nMem+pPro
29d90 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
29da0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b  me->nChildMem );
29db0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
29dc0 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
29dd0 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29  ame->nChildCsr )
29de0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  ;.    assert( pc
29df0 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a  ==pFrame->pc );.
29e00 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65    }..  p->nFrame
29e10 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50  ++;.  pFrame->pP
29e20 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d  arent = p->pFram
29e30 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73  e;.  pFrame->las
29e40 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
29e50 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43  id;.  pFrame->nC
29e60 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e  hange = p->nChan
29e70 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  ge;.  p->nChange
29e80 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
29e90 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
29ea0 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26  >aMem = aMem = &
29eb0 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
29ec0 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e  ame)[-1];.  p->n
29ed0 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43  Mem = pFrame->nC
29ee0 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43  hildMem;.  p->nC
29ef0 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72  ursor = (u16)pFr
29f00 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a  ame->nChildCsr;.
29f10 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64    p->apCsr = (Vd
29f20 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65  beCursor **)&aMe
29f30 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20  m[p->nMem+1];.  
29f40 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70  p->aOp = aOp = p
29f50 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20  Program->aOp;.  
29f60 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61  p->nOp = pProgra
29f70 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e  m->nOp;.  p->aOn
29f80 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26  ceFlag = (u8 *)&
29f90 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72  p->apCsr[p->nCur
29fa0 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65  sor];.  p->nOnce
29fb0 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d  Flag = pProgram-
29fc0 3e 6e 4f 6e 63 65 3b 0a 20 20 70 2d 3e 6e 4f 70  >nOnce;.  p->nOp
29fd0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70   = pProgram->nOp
29fe0 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 20 20 6d  ;.  pc = -1;.  m
29ff0 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46 6c  emset(p->aOnceFl
2a000 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46  ag, 0, p->nOnceF
2a010 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  lag);..  break;.
2a020 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
2a030 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ram P1 P2 * * *.
2a040 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2a050 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70  e is only ever p
2a060 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72  resent in sub-pr
2a070 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69  ograms called vi
2a080 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f  a the .** OP_Pro
2a090 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
2a0a0 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63  . Copy a value c
2a0b0 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20  urrently stored 
2a0c0 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  in a memory .** 
2a0d0 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c  cell of the call
2a0e0 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61  ing (parent) fra
2a0f0 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e  me to cell P2 in
2a100 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
2a110 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20  mes .** address 
2a120 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75  space. This is u
2a130 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
2a140 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73  rograms to acces
2a150 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20  s the new.* .** 
2a160 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73  and old.* values
2a170 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72  ..**.** The addr
2a180 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20  ess of the cell 
2a190 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  in the parent fr
2a1a0 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ame is determine
2a1b0 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74  d by adding.** t
2a1c0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2a1d0 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
2a1e0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2a1f0 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
2a200 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50  he.** calling OP
2a210 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
2a220 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2a230 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  _Param: {       
2a240 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
2a250 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65  elease */.  Vdbe
2a260 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
2a270 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72   Mem *pIn;.  pFr
2a280 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
2a290 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65  .  pIn = &pFrame
2a2a0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b  ->aMem[pOp->p1 +
2a2b0 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72   pFrame->aOp[pFr
2a2c0 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20  ame->pc].p1];   
2a2d0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2a2e0 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
2a2f0 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65  t, pIn, MEM_Ephe
2a300 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  m);.  break;.}..
2a310 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
2a320 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2a330 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65  IGGER */..#ifnde
2a340 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
2a350 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63  REIGN_KEY./* Opc
2a360 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50  ode: FkCounter P
2a370 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2a380 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f   Increment a "co
2a390 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
2a3a0 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20  " by P2 (P2 may 
2a3b0 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70  be negative or p
2a3c0 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20  ositive)..** If 
2a3d0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
2a3e0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
2a3f0 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20  straint counter 
2a400 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a  is incremented .
2a410 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72  ** (deferred for
2a420 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2a430 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65  ints). Otherwise
2a440 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c  , if P1 is zero,
2a450 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65   the .** stateme
2a460 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
2a470 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64  cremented (immed
2a480 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
2a490 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a   constraints)..*
2a4a0 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e  /.case OP_FkCoun
2a4b0 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70  ter: {.  if( pOp
2a4c0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e  ->p1 ){.    db->
2a4d0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d  nDeferredCons +=
2a4e0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
2a4f0 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e  e{.    p->nFkCon
2a500 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e  straint += pOp->
2a510 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
2a520 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
2a530 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  kIfZero P1 P2 * 
2a540 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
2a550 70 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61  pcode tests if a
2a560 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2a570 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
2a580 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72  is currently zer
2a590 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d  o..** If so, jum
2a5a0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2a5b0 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
2a5c0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2a5d0 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73  the next .** ins
2a5e0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
2a5f0 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
2a600 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70  o, then the jump
2a610 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
2a620 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
2a630 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20  aint-counter.** 
2a640 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65  is zero (the one
2a650 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66   that counts def
2a660 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
2a670 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66   violations). If
2a680 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20   P1 is.** zero, 
2a690 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
2a6a0 6e 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65  n if the stateme
2a6b0 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  nt constraint-co
2a6c0 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a  unter is zero.**
2a6d0 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65   (immediate fore
2a6e0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2a6f0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a  nt violations)..
2a700 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a  */.case OP_FkIfZ
2a710 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ero: {         /
2a720 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
2a730 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 69  pOp->p1 ){.    i
2a740 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  f( db->nDeferred
2a750 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70  Cons==0 ) pc = p
2a760 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73  Op->p2-1;.  }els
2a770 65 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46  e{.    if( p->nF
2a780 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 29  kConstraint==0 )
2a790 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
2a7a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2a7b0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
2a7c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
2a7d0 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69  REIGN_KEY */..#i
2a7e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a7f0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
2a800 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
2a810 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
2a820 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69  .** P1 is a regi
2a830 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
2a840 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
2a850 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  M (the root fram
2a860 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e  e is.** differen
2a870 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65  t from the curre
2a880 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73  nt frame if this
2a890 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
2a8a0 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a  being executed.*
2a8b0 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70  * within a sub-p
2a8c0 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65  rogram). Set the
2a8d0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2a8e0 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78  er P1 to the max
2a8f0 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20  imum of .** its 
2a900 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e  current value an
2a910 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
2a920 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
2a930 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
2a940 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72  on throws an err
2a950 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79  or if the memory
2a960 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69   cell is not ini
2a970 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74  tially.** an int
2a980 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
2a990 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20  _MemMax: {      
2a9a0 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65    /* in2 */.  Me
2a9b0 6d 20 2a 70 49 6e 31 3b 0a 20 20 56 64 62 65 46  m *pIn1;.  VdbeF
2a9c0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
2a9d0 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
2a9e0 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
2a9f0 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
2aa00 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
2aa10 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
2aa20 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20  nt);.    pIn1 = 
2aa30 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
2aa40 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b  p->p1];.  }else{
2aa50 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  .    pIn1 = &aMe
2aa60 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a  m[pOp->p1];.  }.
2aa70 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2aa80 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
2aa90 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
2aaa0 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
2aab0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
2aac0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
2aad0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
2aae0 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  ify(pIn2);.  if(
2aaf0 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d   pIn1->u.i<pIn2-
2ab00 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d  >u.i){.    pIn1-
2ab10 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69  >u.i = pIn2->u.i
2ab20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2ab30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2ab40 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
2ab50 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  MENT */../* Opco
2ab60 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20  de: IfPos P1 P2 
2ab70 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74  * * *.**.** If t
2ab80 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2ab90 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20  ster P1 is 1 or 
2aba0 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f  greater, jump to
2abb0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73   P2..**.** It is
2abc0 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20   illegal to use 
2abd0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2abe0 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74   on a register t
2abf0 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  hat does.** not 
2ac00 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2ac10 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f  er.  An assertio
2ac20 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73  n fault will res
2ac30 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a  ult if you try..
2ac40 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
2ac50 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2ac60 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2ac70 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2ac80 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2ac90 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2aca0 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  t );.  if( pIn1-
2acb0 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 70  >u.i>0 ){.     p
2acc0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2acd0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2ace0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65  ./* Opcode: IfNe
2acf0 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  g P1 P2 * * *.**
2ad00 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
2ad10 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
2ad20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72  is less than zer
2ad30 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  o, jump to P2. .
2ad40 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
2ad50 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
2ad60 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
2ad70 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
2ad80 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
2ad90 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2ada0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
2adb0 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
2adc0 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
2add0 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20  se OP_IfNeg: {  
2ade0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2adf0 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2ae00 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2ae10 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2ae20 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2ae30 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c    if( pIn1->u.i<
2ae40 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2ae50 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2ae60 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2ae70 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31  pcode: IfZero P1
2ae80 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2ae90 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50 31   The register P1
2aea0 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e   must contain an
2aeb0 20 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20 6c   integer.  Add l
2aec0 69 74 65 72 61 6c 20 50 33 20 74 6f 20 74 68 65  iteral P3 to the
2aed0 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
2aee0 69 73 74 65 72 20 50 31 2e 20 20 49 66 20 74 68  ister P1.  If th
2aef0 65 20 72 65 73 75 6c 74 20 69 73 20 65 78 61 63  e result is exac
2af00 74 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50  tly 0, jump to P
2af10 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20  2. .**.** It is 
2af20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74  illegal to use t
2af30 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2af40 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68  on a register th
2af50 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63  at does.** not c
2af60 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
2af70 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  r.  An assertion
2af80 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75   fault will resu
2af90 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a  lt if you try..*
2afa0 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f  /.case OP_IfZero
2afb0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2afc0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2afd0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2afe0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2aff0 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2b000 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  t );.  pIn1->u.i
2b010 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69   += pOp->p3;.  i
2b020 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20  f( pIn1->u.i==0 
2b030 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
2b040 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
2b050 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2b060 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50  ode: AggStep * P
2b070 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
2b080 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65   Execute the ste
2b090 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
2b0a0 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68  n aggregate.  Th
2b0b0 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61  e.** function ha
2b0c0 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
2b0d0 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
2b0e0 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
2b0f0 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68  .** structure th
2b100 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
2b110 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20   function.  Use 
2b120 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20 61  register.** P3 a
2b130 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
2b140 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  r..**.** The P5 
2b150 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61  arguments are ta
2b160 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
2b170 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20  r P2 and its.** 
2b180 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63  successors..*/.c
2b190 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20  ase OP_AggStep: 
2b1a0 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
2b1b0 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   i;.  Mem *pMem;
2b1c0 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20  .  Mem *pRec;.  
2b1d0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2b1e0 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ctx;.  sqlite3_v
2b1f0 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20  alue **apVal;.. 
2b200 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
2b210 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a  assert( n>=0 );.
2b220 20 20 70 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70    pRec = &aMem[p
2b230 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c  Op->p2];.  apVal
2b240 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61   = p->apArg;.  a
2b250 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20  ssert( apVal || 
2b260 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d  n==0 );.  for(i=
2b270 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65  0; i<n; i++, pRe
2b280 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  c++){.    assert
2b290 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
2b2a0 63 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b  c) );.    apVal[
2b2b0 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d  i] = pRec;.    m
2b2c0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2b2d0 70 2c 20 70 52 65 63 29 3b 0a 20 20 20 20 73 71  p, pRec);.    sq
2b2e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
2b2f0 65 54 79 70 65 28 70 52 65 63 29 3b 0a 20 20 7d  eType(pRec);.  }
2b300 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70  .  ctx.pFunc = p
2b310 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
2b320 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2b330 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
2b340 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70  >nMem );.  ctx.p
2b350 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d  Mem = pMem = &aM
2b360 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
2b370 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e  Mem->n++;.  ctx.
2b380 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  s.flags = MEM_Nu
2b390 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20  ll;.  ctx.s.z = 
2b3a0 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c  0;.  ctx.s.zMall
2b3b0 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e  oc = 0;.  ctx.s.
2b3c0 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e  xDel = 0;.  ctx.
2b3d0 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78  s.db = db;.  ctx
2b3e0 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20  .isError = 0;.  
2b3f0 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20  ctx.pColl = 0;. 
2b400 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
2b410 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  flags & SQLITE_F
2b420 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a  UNC_NEEDCOLL ){.
2b430 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
2b440 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  p->aOp );.    as
2b450 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
2b460 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
2b470 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2b480 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
2b490 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
2b4a0 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f    ctx.pColl = pO
2b4b0 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a  p[-1].p4.pColl;.
2b4c0 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63    }.  (ctx.pFunc
2b4d0 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e  ->xStep)(&ctx, n
2b4e0 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50  , apVal); /* IMP
2b4f0 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
2b500 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45  */.  if( ctx.isE
2b510 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rror ){.    sqli
2b520 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2b530 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
2b540 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
2b550 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b  e_text(&ctx.s));
2b560 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73  .    rc = ctx.is
2b570 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 73 71  Error;.  }..  sq
2b580 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
2b590 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 0a 20 20  ase(&ctx.s);..  
2b5a0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2b5b0 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31  ode: AggFinal P1
2b5c0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
2b5d0 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e   Execute the fin
2b5e0 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20  alizer function 
2b5f0 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
2b600 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20  .  P1 is.** the 
2b610 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  memory location 
2b620 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75  that is the accu
2b630 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20  mulator for the 
2b640 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a  aggregate..**.**
2b650 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
2b660 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
2b670 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e  hat the step fun
2b680 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a  ction takes and.
2b690 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2b6a0 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
2b6b0 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74  f for this funct
2b6c0 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20  ion.  The P2.** 
2b6d0 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20  argument is not 
2b6e0 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
2b6f0 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ode.  It is only
2b700 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62   there to disamb
2b710 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69  iguate.** functi
2b720 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b  ons that can tak
2b730 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72  e varying number
2b740 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  s of arguments. 
2b750 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d   The.** P4 argum
2b760 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64  ent is only need
2b770 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e  ed for the degen
2b780 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65  erate case where
2b790 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e  .** the step fun
2b7a0 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72  ction was not pr
2b7b0 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e  eviously called.
2b7c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46  .*/.case OP_AggF
2b7d0 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  inal: {.  Mem *p
2b7e0 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Mem;.  assert( p
2b7f0 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
2b800 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p1<=p->nMem );.
2b810 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
2b820 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2b830 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
2b840 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d  & ~(MEM_Null|MEM
2b850 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72  _Agg))==0 );.  r
2b860 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
2b870 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c  emFinalize(pMem,
2b880 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b   pOp->p4.pFunc);
2b890 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
2b8a0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2b8b0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2b8c0 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
2b8d0 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d  _value_text(pMem
2b8e0 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ));.  }.  sqlite
2b8f0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2b900 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69  ing(pMem, encodi
2b910 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
2b920 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29  X_BLOBSIZE(pMem)
2b930 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
2b940 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65  dbeMemTooBig(pMe
2b950 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  m) ){.    goto t
2b960 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
2b970 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
2b980 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2b990 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b  /* Opcode: Check
2b9a0 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a  point P1 P2 P3 *
2b9b0 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f   *.**.** Checkpo
2b9c0 69 6e 74 20 64 61 74 61 62 61 73 65 20 50 31 2e  int database P1.
2b9d0 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70   This is a no-op
2b9e0 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75   if P1 is not cu
2b9f0 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41  rrently in.** WA
2ba00 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65  L mode. Paramete
2ba10 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53  r P2 is one of S
2ba20 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2ba30 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 0a 2a  _PASSIVE, FULL.*
2ba40 2a 20 6f 72 20 52 45 53 54 41 52 54 2e 20 20 57  * or RESTART.  W
2ba50 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f  rite 1 or 0 into
2ba60 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20   mem[P3] if the 
2ba70 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72  checkpoint retur
2ba80 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  ns.** SQLITE_BUS
2ba90 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63  Y or not, respec
2baa0 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74  tively.  Write t
2bab0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
2bac0 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c  es in the.** WAL
2bad0 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b   after the check
2bae0 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50  point into mem[P
2baf0 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d  3+1] and the num
2bb00 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20  ber of pages.** 
2bb10 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20  in the WAL that 
2bb20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70  have been checkp
2bb30 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65  ointed after the
2bb40 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63   checkpoint.** c
2bb50 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65  ompletes into me
2bb60 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65  m[P3+2].  Howeve
2bb70 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d  r on an error, m
2bb80 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20  em[P3+1] and.** 
2bb90 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e  mem[P3+2] are in
2bba0 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e  itialized to -1.
2bbb0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63  .*/.case OP_Chec
2bbc0 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  kpoint: {.  int 
2bbd0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
2bbe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
2bbf0 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
2bc00 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20   int aRes[3];   
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20   /* Results */. 
2bc30 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
2bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc50 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74   /* Write result
2bc60 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 52 65  s here */..  aRe
2bc70 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73  s[0] = 0;.  aRes
2bc80 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20  [1] = aRes[2] = 
2bc90 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  -1;.  assert( pO
2bca0 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
2bcb0 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
2bcc0 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
2bcd0 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
2bce0 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20  POINT_FULL.     
2bcf0 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
2bd00 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2bd10 52 45 53 54 41 52 54 0a 20 20 29 3b 0a 20 20 72  RESTART.  );.  r
2bd20 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b  c = sqlite3Check
2bd30 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70  point(db, pOp->p
2bd40 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65  1, pOp->p2, &aRe
2bd50 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b  s[1], &aRes[2]);
2bd60 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2bd70 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 72 63  E_BUSY ){.    rc
2bd80 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2bd90 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20    aRes[0] = 1;. 
2bda0 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d   }.  for(i=0, pM
2bdb0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2bdc0 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70  p3]; i<3; i++, p
2bdd0 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  Mem++){.    sqli
2bde0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
2bdf0 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52  64(pMem, (i64)aR
2be00 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a  es[i]);.  }    .
2be10 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65    break;.};  .#e
2be20 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2be30 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
2be40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72  ./* Opcode: Jour
2be50 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33  nalMode P1 P2 P3
2be60 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 43 68 61 6e   * P5.**.** Chan
2be70 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d  ge the journal m
2be80 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ode of database 
2be90 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73  P1 to P3. P3 mus
2bea0 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a  t be one of the.
2beb0 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  ** PAGER_JOURNAL
2bec0 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e  MODE_XXX values.
2bed0 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74   If changing bet
2bee0 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73  ween the various
2bef0 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64   rollback.** mod
2bf00 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e  es (delete, trun
2bf10 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f  cate, persist, o
2bf20 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20  ff and memory), 
2bf30 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65  this is a simple
2bf40 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e  .** operation. N
2bf50 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64  o IO is required
2bf60 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67  ..**.** If chang
2bf70 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20  ing into or out 
2bf80 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20  of WAL mode the 
2bf90 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72  procedure is mor
2bfa0 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a  e complicated..*
2bfb0 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72  *.** Write a str
2bfc0 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
2bfd0 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c  he final journal
2bfe0 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65  -mode to registe
2bff0 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
2c000 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20  _JournalMode: { 
2c010 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
2c020 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65  lease */.  Btree
2c030 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20   *pBt;          
2c040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74             /* Bt
2c050 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f  ree to change jo
2c060 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f  urnal mode of */
2c070 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72  .  Pager *pPager
2c080 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2c090 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f     /* Pager asso
2c0a0 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20  ciated with pBt 
2c0b0 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20  */.  int eNew;  
2c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0d0 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72       /* New jour
2c0e0 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e  nal mode */.  in
2c0f0 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20  t eOld;         
2c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2c110 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c   The old journal
2c120 20 6d 6f 64 65 20 2a 2f 0a 20 20 63 6f 6e 73 74   mode */.  const
2c130 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
2c140 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
2c150 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66  me of database f
2c160 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a  ile for pPager *
2c170 2f 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d  /..  eNew = pOp-
2c180 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65  >p3;.  assert( e
2c190 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2c1a0 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20  ALMODE_DELETE . 
2c1b0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2c1c0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2c1d0 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20  _TRUNCATE .     
2c1e0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2c1f0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52  _JOURNALMODE_PER
2c200 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20  SIST .       || 
2c210 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2c220 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20  NALMODE_OFF.    
2c230 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2c240 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
2c250 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65  MORY.       || e
2c260 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2c270 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20  ALMODE_WAL.     
2c280 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2c290 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
2c2a0 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74  RY.  );.  assert
2c2b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2c2c0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
2c2d0 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e  );..  pBt = db->
2c2e0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
2c2f0 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c  ;.  pPager = sql
2c300 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
2c310 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71  Bt);.  eOld = sq
2c320 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75  lite3PagerGetJou
2c330 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
2c340 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  ;.  if( eNew==PA
2c350 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2c360 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65  QUERY ) eNew = e
2c370 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69  Old;.  if( !sqli
2c380 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e  te3PagerOkToChan
2c390 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  geJournalMode(pP
2c3a0 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65  ager) ) eNew = e
2c3b0 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  Old;..#ifndef SQ
2c3c0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
2c3d0 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69  zFilename = sqli
2c3e0 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65  te3PagerFilename
2c3f0 28 70 50 61 67 65 72 29 3b 0a 0a 20 20 2f 2a 20  (pPager);..  /* 
2c400 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74  Do not allow a t
2c410 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75  ransition to jou
2c420 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f  rnal_mode=WAL fo
2c430 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a  r a database.  *
2c440 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73  * in temporary s
2c450 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65  torage or if the
2c460 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75   VFS does not su
2c470 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d  pport shared mem
2c480 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ory .  */.  if( 
2c490 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2c4a0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26  NALMODE_WAL.   &
2c4b0 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  & (sqlite3Strlen
2c4c0 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30  30(zFilename)==0
2c4d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
2c4e0 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20  mp file */.     
2c4f0 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67    || !sqlite3Pag
2c500 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70  erWalSupported(p
2c510 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20  Pager))   /* No 
2c520 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75  shared-memory su
2c530 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20  pport */.  ){.  
2c540 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20    eNew = eOld;. 
2c550 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21   }..  if( (eNew!
2c560 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f  =eOld).   && (eO
2c570 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
2c580 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65  LMODE_WAL || eNe
2c590 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2c5a0 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20  MODE_WAL).  ){. 
2c5b0 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f     if( !db->auto
2c5c0 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 61 63  Commit || db->ac
2c5d0 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b  tiveVdbeCnt>1 ){
2c5e0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
2c5f0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
2c600 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2c610 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2c620 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22 63 61  , .          "ca
2c630 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77  nnot change %s w
2c640 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74  al mode from wit
2c650 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
2c660 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65  n",.          (e
2c670 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2c680 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e  ALMODE_WAL ? "in
2c690 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a  to" : "out of").
2c6a0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62        );.      b
2c6b0 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  reak;.    }else{
2c6c0 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c  . .      if( eOl
2c6d0 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
2c6e0 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20  MODE_WAL ){.    
2c6f0 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e      /* If leavin
2c700 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73  g WAL mode, clos
2c710 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20  e the log file. 
2c720 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  If successful, t
2c730 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20  he call.        
2c740 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65  ** to PagerClose
2c750 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74  Wal() checkpoint
2c760 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68  s and deletes th
2c770 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f  e write-ahead-lo
2c780 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69  g .        ** fi
2c790 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45  le. An EXCLUSIVE
2c7a0 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20   lock may still 
2c7b0 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64  be held on the d
2c7c0 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20  atabase file .  
2c7d0 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61        ** after a
2c7e0 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74 75   successful retu
2c7f0 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a  rn. .        */.
2c800 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
2c810 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61  ite3PagerCloseWa
2c820 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  l(pPager);.     
2c830 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2c840 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
2c850 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
2c860 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2c870 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20  ger, eNew);.    
2c880 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
2c890 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45  e if( eOld==PAGE
2c8a0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
2c8b0 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20  MORY ){.        
2c8c0 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69  /* Cannot transi
2c8d0 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72  tion directly fr
2c8e0 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c  om MEMORY to WAL
2c8f0 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a  .  Use mode OFF.
2c900 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e          ** as an
2c910 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f   intermediate */
2c920 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2c930 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
2c940 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41 47 45  ode(pPager, PAGE
2c950 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
2c960 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  F);.      }.  . 
2c970 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74       /* Open a t
2c980 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
2c990 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
2c9a0 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74   Regardless of t
2c9b0 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20  he journal.     
2c9c0 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74   ** mode, this t
2c9d0 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79  ransaction alway
2c9e0 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63  s uses a rollbac
2c9f0 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20  k journal..     
2ca00 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
2ca10 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
2ca20 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20  InTrans(pBt)==0 
2ca30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
2ca40 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2ca50 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2ca60 65 33 42 74 72 65 65 53 65 74 56 65 72 73 69 6f  e3BtreeSetVersio
2ca70 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41  n(pBt, (eNew==PA
2ca80 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2ca90 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20  WAL ? 2 : 1));. 
2caa0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
2cab0 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65  .#endif /* ifnde
2cac0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2cad0 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29  L */..  if( rc )
2cae0 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
2caf0 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20  d;.  }.  eNew = 
2cb00 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2cb10 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2cb20 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75  r, eNew);..  pOu
2cb30 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
2cb40 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  2];.  pOut->flag
2cb50 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
2cb60 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
2cb70 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68  .  pOut->z = (ch
2cb80 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72  ar *)sqlite3Jour
2cb90 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77  nalModename(eNew
2cba0 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73  );.  pOut->n = s
2cbb0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
2cbc0 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d  Out->z);.  pOut-
2cbd0 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
2cbe0 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  F8;.  sqlite3Vdb
2cbf0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2cc00 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pOut, encoding);
2cc10 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e  .  break;.};.#en
2cc20 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2cc30 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69  IT_PRAGMA */..#i
2cc40 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2cc50 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26  E_OMIT_VACUUM) &
2cc60 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2cc70 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f  E_OMIT_ATTACH)./
2cc80 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d  * Opcode: Vacuum
2cc90 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
2cca0 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69   Vacuum the enti
2ccb0 72 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  re database.  Th
2ccc0 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63  is opcode will c
2ccd0 61 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75  ause other virtu
2cce0 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74  al.** machines t
2ccf0 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64  o be created and
2cd00 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f   run.  It may no
2cd10 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d  t be called from
2cd20 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61   within.** a tra
2cd30 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  nsaction..*/.cas
2cd40 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: {. 
2cd50 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
2cd60 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
2cd70 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b  sg, db);.  break
2cd80 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ;.}.#endif..#if 
2cd90 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2cda0 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
2cdb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72  ./* Opcode: Incr
2cdc0 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a  Vacuum P1 P2 * *
2cdd0 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d   *.**.** Perform
2cde0 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f   a single step o
2cdf0 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61  f the incrementa
2ce00 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75  l vacuum procedu
2ce10 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20  re on.** the P1 
2ce20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
2ce30 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69   vacuum has fini
2ce40 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  shed, jump to in
2ce50 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e  struction.** P2.
2ce60 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
2ce70 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2ce80 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2ce90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63  ..*/.case OP_Inc
2cea0 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20  rVacuum: {      
2ceb0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42    /* jump */.  B
2cec0 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
2ced0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2cee0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
2cef0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2cf00 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
2cf10 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
2cf20 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
2cf30 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
2cf40 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
2cf50 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2cf60 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29  eIncrVacuum(pBt)
2cf70 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2cf80 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70  TE_DONE ){.    p
2cf90 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2cfa0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2cfb0 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _OK;.  }.  break
2cfc0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
2cfd0 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31  pcode: Expire P1
2cfe0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
2cff0 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64  ause precompiled
2d000 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62   statements to b
2d010 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41  ecome expired. A
2d020 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
2d030 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74  ent.** fails wit
2d040 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
2d050 6f 66 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  of SQLITE_SCHEMA
2d060 20 69 66 20 69 74 20 69 73 20 65 76 65 72 20 65   if it is ever e
2d070 78 65 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61  xecuted .** (via
2d080 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29   sqlite3_step())
2d090 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
2d0a0 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
2d0b0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
2d0c0 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
2d0d0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
2d0e0 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
2d0f0 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
2d100 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
2d110 73 20 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a  s affected. .*/.
2d120 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20  case OP_Expire: 
2d130 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31  {.  if( !pOp->p1
2d140 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
2d150 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
2d160 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
2d170 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70  else{.    p->exp
2d180 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ired = 1;.  }.  
2d190 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
2d1a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
2d1b0 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70  ARED_CACHE./* Op
2d1c0 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20  code: TableLock 
2d1d0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
2d1e0 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
2d1f0 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
2d200 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
2d210 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
2d220 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
2d230 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
2d240 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
2d250 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ed. .**.** P1 is
2d260 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
2d270 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
2d280 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
2d290 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
2d2a0 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
2d2b0 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
2d2c0 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
2d2d0 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
2d2e0 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
2d2f0 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
2d300 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
2d310 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
2d320 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
2d330 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
2d340 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
2d350 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
2d360 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
2d370 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
2d380 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
2d390 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
2d3a0 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
2d3b0 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
2d3c0 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
2d3d0 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
2d3e0 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20   u8 isWriteLock 
2d3f0 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20  = (u8)pOp->p3;. 
2d400 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b   if( isWriteLock
2d410 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67   || 0==(db->flag
2d420 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  s&SQLITE_ReadUnc
2d430 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20  ommitted) ){.   
2d440 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
2d450 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20  1; .    assert( 
2d460 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
2d470 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  nDb );.    asser
2d480 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
2d490 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
2d4a0 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20  <<p1))!=0 );.   
2d4b0 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65   assert( isWrite
2d4c0 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69  Lock==0 || isWri
2d4d0 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20  teLock==1 );.   
2d4e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2d4f0 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e  eeLockTable(db->
2d500 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70  aDb[p1].pBt, pOp
2d510 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63  ->p2, isWriteLoc
2d520 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26  k);.    if( (rc&
2d530 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f  0xFF)==SQLITE_LO
2d540 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f  CKED ){.      co
2d550 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f  nst char *z = pO
2d560 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73  p->p4.z;.      s
2d570 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2d580 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2d590 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
2d5a0 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c   is locked: %s",
2d5b0 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   z);.    }.  }. 
2d5c0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2d5d0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2d5e0 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a  SHARED_CACHE */.
2d5f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d600 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2d610 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65  E./* Opcode: VBe
2d620 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  gin * * * P4 *.*
2d630 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
2d640 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
2d650 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
2d660 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61  cture. If so, ca
2d670 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69  ll the .** xBegi
2d680 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  n method for tha
2d690 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  t table..**.** A
2d6a0 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20  lso, whether or 
2d6b0 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63  not P4 is set, c
2d6c0 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69  heck that this i
2d6d0 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c  s not being call
2d6e0 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69  ed from.** withi
2d6f0 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  n a callback to 
2d700 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2d710 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20  xSync() method. 
2d720 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72  If it is, the er
2d730 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c  ror.** code will
2d740 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54   be set to SQLIT
2d750 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73  E_LOCKED..*/.cas
2d760 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20  e OP_VBegin: {. 
2d770 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a   VTable *pVTab;.
2d780 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70    pVTab = pOp->p
2d790 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20  4.pVtab;.  rc = 
2d7a0 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
2d7b0 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69  (db, pVTab);.  i
2d7c0 66 28 20 70 56 54 61 62 20 29 20 69 6d 70 6f 72  f( pVTab ) impor
2d7d0 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
2d7e0 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20  VTab->pVtab);.  
2d7f0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2d800 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2d810 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2d820 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2d830 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2d840 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65  ./* Opcode: VCre
2d850 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ate P1 * * P4 *.
2d860 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
2d870 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
2d880 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
2d890 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65  ase P1. Call the
2d8a0 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a   xCreate method.
2d8b0 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  ** for that tabl
2d8c0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  e..*/.case OP_VC
2d8d0 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20  reate: {.  rc = 
2d8e0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2d8f0 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70  reate(db, pOp->p
2d900 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70  1, pOp->p4.z, &p
2d910 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72  ->zErrMsg);.  br
2d920 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2d930 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2d940 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2d950 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d960 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2d970 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72  * Opcode: VDestr
2d980 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  oy P1 * * P4 *.*
2d990 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
2d9a0 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
2d9b0 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
2d9c0 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65  se P1.  Call the
2d9d0 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64   xDestroy method
2d9e0 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
2d9f0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44  e..*/.case OP_VD
2da00 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69  estroy: {.  p->i
2da10 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b  nVtabMethod = 2;
2da20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2da30 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64  tabCallDestroy(d
2da40 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2da50 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56  >p4.z);.  p->inV
2da60 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
2da70 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2da80 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2da90 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2daa0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2dab0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2dac0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70  E./* Opcode: VOp
2dad0 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  en P1 * * P4 *.*
2dae0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
2daf0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
2db00 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
2db10 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
2db20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31  structure..** P1
2db30 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d   is a cursor num
2db40 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ber.  This opcod
2db50 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72  e opens a cursor
2db60 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a   to the virtual.
2db70 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f  ** table and sto
2db80 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20  res that cursor 
2db90 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P1..*/.case O
2dba0 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  P_VOpen: {.  Vdb
2dbb0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
2dbc0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
2dbd0 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
2dbe0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
2dbf0 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69  b *pVtab;.  sqli
2dc00 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2dc10 75 6c 65 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30  ule;..  pCur = 0
2dc20 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
2dc30 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  = 0;.  pVtab = p
2dc40 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
2dc50 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2dc60 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
2dc70 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
2dc80 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74 61  e;.  assert(pVta
2dc90 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20  b && pModule);. 
2dca0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2dcb0 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74  Open(pVtab, &pVt
2dcc0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 69 6d 70  abCursor);.  imp
2dcd0 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2dce0 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53   pVtab);.  if( S
2dcf0 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a  QLITE_OK==rc ){.
2dd00 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
2dd10 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
2dd20 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
2dd30 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72   */.    pVtabCur
2dd40 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74  sor->pVtab = pVt
2dd50 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74  ab;..    /* Init
2dd60 69 61 6c 69 73 65 20 76 64 62 65 20 63 75 72 73  ialise vdbe curs
2dd70 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20  or object */.   
2dd80 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
2dd90 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
2dda0 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  1, 0, -1, 0);.  
2ddb0 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20    if( pCur ){.  
2ddc0 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43      pCur->pVtabC
2ddd0 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72  ursor = pVtabCur
2dde0 73 6f 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d  sor;.      pCur-
2ddf0 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62  >pModule = pVtab
2de00 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70  Cursor->pVtab->p
2de10 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73  Module;.    }els
2de20 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c  e{.      db->mal
2de30 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
2de40 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43       pModule->xC
2de50 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72  lose(pVtabCursor
2de60 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
2de70 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2de80 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2de90 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2dea0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2deb0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2dec0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74  /* Opcode: VFilt
2ded0 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  er P1 P2 P3 P4 *
2dee0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  .**.** P1 is a c
2def0 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69  ursor opened usi
2df00 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73  ng VOpen.  P2 is
2df10 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a   an address to j
2df20 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65  ump to if.** the
2df30 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74   filtered result
2df40 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a   set is empty..*
2df50 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65  *.** P4 is eithe
2df60 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69  r NULL or a stri
2df70 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65  ng that was gene
2df80 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65  rated by the xBe
2df90 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f  stIndex.** metho
2dfa0 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
2dfb0 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61    The interpreta
2dfc0 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73  tion of the P4 s
2dfd0 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a  tring is left.**
2dfe0 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69   to the module i
2dff0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a  mplementation..*
2e000 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2e010 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69   invokes the xFi
2e020 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74  lter method on t
2e030 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2e040 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79   specified.** by
2e050 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65   P1.  The intege
2e060 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72  r query plan par
2e070 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65  ameter to xFilte
2e080 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  r is stored in r
2e090 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52  egister.** P3. R
2e0a0 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f  egister P3+1 sto
2e0b0 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72  res the argc par
2e0c0 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73  ameter to be pas
2e0d0 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46  sed to the.** xF
2e0e0 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65  ilter method. Re
2e0f0 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33  gisters P3+2..P3
2e100 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20  +1+argc are the 
2e110 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e  argc.** addition
2e120 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68  al parameters wh
2e130 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74  ich are passed t
2e140 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20  o.** xFilter as 
2e150 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50  argv. Register P
2e160 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76  3+2 becomes argv
2e170 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20  [0] when passed 
2e180 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a  to xFilter..**.*
2e190 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  * A jump is made
2e1a0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65   to P2 if the re
2e1b0 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66  sult set after f
2e1c0 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62  iltering would b
2e1d0 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65  e empty..*/.case
2e1e0 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20   OP_VFilter: {  
2e1f0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
2e200 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51  t nArg;.  int iQ
2e210 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71  uery;.  const sq
2e220 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2e230 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51  odule;.  Mem *pQ
2e240 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  uery;.  Mem *pAr
2e250 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  gc;.  sqlite3_vt
2e260 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
2e270 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
2e280 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2e290 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2e2a0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
2e2b0 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61  int i;.  Mem **a
2e2c0 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20  pArg;..  pQuery 
2e2d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2e2e0 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75  ;.  pArgc = &pQu
2e2f0 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d  ery[1];.  pCur =
2e300 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2e310 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65  1];.  assert( me
2e320 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29  mIsValid(pQuery)
2e330 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
2e340 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51  RACE(pOp->p3, pQ
2e350 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28  uery);.  assert(
2e360 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2e370 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72  or );.  pVtabCur
2e380 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  sor = pCur->pVta
2e390 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62  bCursor;.  pVtab
2e3a0 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e   = pVtabCursor->
2e3b0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2e3c0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2e3d0 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68  e;..  /* Grab th
2e3e0 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61  e index number a
2e3f0 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  nd argc paramete
2e400 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  rs */.  assert( 
2e410 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d  (pQuery->flags&M
2e420 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41  EM_Int)!=0 && pA
2e430 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  rgc->flags==MEM_
2e440 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20  Int );.  nArg = 
2e450 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b  (int)pArgc->u.i;
2e460 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74  .  iQuery = (int
2e470 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20  )pQuery->u.i;.. 
2e480 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
2e490 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f  Filter method */
2e4a0 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30  .  {.    res = 0
2e4b0 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d  ;.    apArg = p-
2e4c0 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28  >apArg;.    for(
2e4d0 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69  i = 0; i<nArg; i
2e4e0 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67  ++){.      apArg
2e4f0 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31  [i] = &pArgc[i+1
2e500 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ];.      sqlite3
2e510 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2e520 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20  (apArg[i]);.    
2e530 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  }..    p->inVtab
2e540 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20  Method = 1;.    
2e550 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
2e560 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f  ilter(pVtabCurso
2e570 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
2e580 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
2e590 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61  g);.    p->inVta
2e5a0 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20  bMethod = 0;.   
2e5b0 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
2e5c0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
2e5d0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2e5e0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  OK ){.      res 
2e5f0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
2e600 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2e610 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 72 65 73    }..    if( res
2e620 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
2e630 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2e640 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75  }.  }.  pCur->nu
2e650 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72  llRow = 0;..  br
2e660 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2e670 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2e680 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2e690 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e6a0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2e6b0 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
2e6c0 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
2e6d0 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76  *.** Store the v
2e6e0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74  alue of the P2-t
2e6f0 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74  h column of.** t
2e700 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69  he row of the vi
2e710 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74  rtual-table that
2e720 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73   the .** P1 curs
2e730 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  or is pointing t
2e740 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  o into register 
2e750 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P3..*/.case OP_V
2e760 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69  Column: {.  sqli
2e770 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2e780 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2e790 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2e7a0 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a  ;.  Mem *pDest;.
2e7b0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2e7c0 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56  t sContext;..  V
2e7d0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
2e7e0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2e7f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2e800 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2e810 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2e820 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
2e830 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
2e840 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
2e850 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
2e860 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
2e870 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75  Dest);.  if( pCu
2e880 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
2e890 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2e8a0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
2e8b0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
2e8c0 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
2e8d0 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
2e8e0 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
2e8f0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2e900 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
2e910 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
2e920 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
2e930 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
2e940 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  ext));..  /* The
2e950 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
2e960 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
2e970 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
2e980 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
2e990 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73  current contents
2e9a0 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73   to sContext.s s
2e9b0 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
2e9c0 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a  er-function .  *
2e9d0 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c  * can use the al
2e9e0 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
2e9f0 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
2ea00 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a  f allocating a .
2ea10 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20    ** new one..  
2ea20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
2ea30 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78  MemMove(&sContex
2ea40 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d  t.s, pDest);.  M
2ea50 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73  emSetTypeFlag(&s
2ea60 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e  Context.s, MEM_N
2ea70 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4d  ull);..  rc = pM
2ea80 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70  odule->xColumn(p
2ea90 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2eaa0 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70  , &sContext, pOp
2eab0 2d 3e 70 32 29 3b 0a 20 20 69 6d 70 6f 72 74 56  ->p2);.  importV
2eac0 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74  tabErrMsg(p, pVt
2ead0 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74  ab);.  if( sCont
2eae0 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ext.isError ){. 
2eaf0 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74     rc = sContext
2eb00 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  .isError;.  }.. 
2eb10 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
2eb20 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
2eb30 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65  ion to the P3 re
2eb40 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20  gister. We.  ** 
2eb50 64 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c 65  do this regardle
2eb60 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
2eb70 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63   not an error oc
2eb80 63 75 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65  curred to ensure
2eb90 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69   any.  ** dynami
2eba0 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20  c allocation in 
2ebb0 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65  sContext.s (a Me
2ebc0 6d 20 73 74 72 75 63 74 29 20 69 73 20 20 72 65  m struct) is  re
2ebd0 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73  leased..  */.  s
2ebe0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2ebf0 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65  Encoding(&sConte
2ec00 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  xt.s, encoding);
2ec10 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2ec20 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43  mMove(pDest, &sC
2ec30 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47  ontext.s);.  REG
2ec40 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
2ec50 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55  >p3, pDest);.  U
2ec60 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2ec70 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66  ZE(pDest);..  if
2ec80 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
2ec90 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b  TooBig(pDest) ){
2eca0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
2ecb0 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
2ecc0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2ecd0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2ece0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2ecf0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2ed00 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2ed10 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32  ode: VNext P1 P2
2ed20 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76   * * *.**.** Adv
2ed30 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62  ance virtual tab
2ed40 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78  le P1 to the nex
2ed50 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73  t row in its res
2ed60 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a  ult set and.** j
2ed70 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2ed80 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74  on P2.  Or, if t
2ed90 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2eda0 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20   has reached.** 
2edb0 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72  the end of its r
2edc0 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20  esult set, then 
2edd0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2ede0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2edf0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2ee00 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a  _VNext: {   /* j
2ee10 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ump */.  sqlite3
2ee20 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2ee30 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2ee40 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
2ee50 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65   int res;.  Vdbe
2ee60 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20  Cursor *pCur;.. 
2ee70 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72   res = 0;.  pCur
2ee80 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2ee90 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2eea0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2eeb0 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  r );.  if( pCur-
2eec0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
2eed0 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
2eee0 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
2eef0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
2ef00 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
2ef10 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
2ef20 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  ert( pModule->xN
2ef30 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ext );..  /* Inv
2ef40 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20  oke the xNext() 
2ef50 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
2ef60 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e  dule. There is n
2ef70 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20  o way for the.  
2ef80 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d  ** underlying im
2ef90 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
2efa0 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
2efb0 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75  if one occurs du
2efc0 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28  ring.  ** xNext(
2efd0 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61  ). Instead, if a
2efe0 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
2eff0 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64  true is returned
2f000 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61   (indicating tha
2f010 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20  t .  ** data is 
2f020 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74  available) and t
2f030 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65  he error code re
2f040 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c  turned when xCol
2f050 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65  umn or.  ** some
2f060 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73   other method is
2f070 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e   next invoked on
2f080 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61   the save virtua
2f090 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a  l table cursor..
2f0a0 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62    */.  p->inVtab
2f0b0 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63  Method = 1;.  rc
2f0c0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78   = pModule->xNex
2f0d0 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  t(pCur->pVtabCur
2f0e0 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  sor);.  p->inVta
2f0f0 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 69  bMethod = 0;.  i
2f100 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2f110 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
2f120 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2f130 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64  {.    res = pMod
2f140 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e  ule->xEof(pCur->
2f150 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2f160 7d 0a 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b  }..  if( !res ){
2f170 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
2f180 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74   is data, jump t
2f190 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d  o P2 */.    pc =
2f1a0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2f1b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2f1c0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2f1d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2f1e0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2f1f0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2f200 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2f210 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50  VRename P1 * * P
2f220 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2f230 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
2f240 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
2f250 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
2f260 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
2f270 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2f280 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
2f290 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65  sponding xRename
2f2a0 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c   method. The val
2f2b0 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ue.** in registe
2f2c0 72 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61  r P1 is passed a
2f2d0 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75  s the zName argu
2f2e0 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e  ment to the xRen
2f2f0 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63  ame method..*/.c
2f300 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20  ase OP_VRename: 
2f310 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
2f320 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a   *pVtab;.  Mem *
2f330 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20  pName;..  pVtab 
2f340 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
2f350 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20  >pVtab;.  pName 
2f360 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2f370 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61  ;.  assert( pVta
2f380 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
2f390 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ame );.  assert(
2f3a0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d   memIsValid(pNam
2f3b0 65 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  e) );.  REGISTER
2f3c0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
2f3d0 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74  pName);.  assert
2f3e0 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26  ( pName->flags &
2f3f0 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65   MEM_Str );.  te
2f400 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
2f410 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  nc==SQLITE_UTF8 
2f420 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
2f430 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
2f440 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74  E_UTF16BE );.  t
2f450 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
2f460 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
2f470 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  6LE );.  rc = sq
2f480 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2f490 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53  ncoding(pName, S
2f4a0 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69  QLITE_UTF8);.  i
2f4b0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2f4c0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56 74   ){.    rc = pVt
2f4d0 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
2f4e0 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d  name(pVtab, pNam
2f4f0 65 2d 3e 7a 29 3b 0a 20 20 20 20 69 6d 70 6f 72  e->z);.    impor
2f500 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
2f510 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  Vtab);.    p->ex
2f520 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
2f530 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2f540 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2f550 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2f560 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55  LE./* Opcode: VU
2f570 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50  pdate P1 P2 P3 P
2f580 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2f590 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
2f5a0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
2f5b0 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
2f5c0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
2f5d0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2f5e0 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
2f5f0 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65  sponding xUpdate
2f600 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75   method. P2 valu
2f610 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67  es.** are contig
2f620 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  uous memory cell
2f630 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33  s starting at P3
2f640 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20   to pass to the 
2f650 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f  xUpdate .** invo
2f660 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75  cation. The valu
2f670 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50  e in register (P
2f680 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f  3+P2-1) correspo
2f690 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70  nds to the .** p
2f6a0 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  2th element of t
2f6b0 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61  he argv array pa
2f6c0 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e  ssed to xUpdate.
2f6d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61  .**.** The xUpda
2f6e0 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64  te method will d
2f6f0 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e  o a DELETE or an
2f700 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e   INSERT or both.
2f710 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20  .** The argv[0] 
2f720 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63  element (which c
2f730 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65  orresponds to me
2f740 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a  mory cell P3).**
2f750 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
2f760 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
2f770 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73  .  If argv[0] is
2f780 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a   NULL then no .*
2f790 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72  * deletion occur
2f7a0 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20  s.  The argv[1] 
2f7b0 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72  element is the r
2f7c0 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20  owid of the new 
2f7d0 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63  .** row.  This c
2f7e0 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61  an be NULL to ha
2f7f0 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ve the virtual t
2f800 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20  able select the 
2f810 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f  new .** rowid fo
2f820 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73  r itself.  The s
2f830 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e  ubsequent elemen
2f840 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20  ts in the array 
2f850 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  are .** the valu
2f860 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  es of columns in
2f870 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a   the new row..**
2f880 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65  .** If P2==1 the
2f890 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70  n no insert is p
2f8a0 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b  erformed.  argv[
2f8b0 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  0] is the rowid 
2f8c0 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64  of.** a row to d
2f8d0 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  elete..**.** P1 
2f8e0 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61  is a boolean fla
2f8f0 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20  g. If it is set 
2f900 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20  to true and the 
2f910 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20  xUpdate call.** 
2f920 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  is successful, t
2f930 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65  hen the value re
2f940 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
2f950 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
2f960 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74  wid() .** is set
2f970 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
2f980 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74   the rowid for t
2f990 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65  he row just inse
2f9a0 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rted..*/.case OP
2f9b0 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71  _VUpdate: {.  sq
2f9c0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2f9d0 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
2f9e0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
2f9f0 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
2fa00 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36  i;.  sqlite_int6
2fa10 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a  4 rowid;.  Mem *
2fa20 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70  *apArg;.  Mem *p
2fa30 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  X;..  assert( pO
2fa40 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20  p->p2==1        
2fa50 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46  || pOp->p5==OE_F
2fa60 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35  ail   || pOp->p5
2fa70 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20  ==OE_Rollback . 
2fa80 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35        || pOp->p5
2fa90 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f  ==OE_Abort || pO
2faa0 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p5==OE_Ignore
2fab0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
2fac0 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 70  Replace.  );.  p
2fad0 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
2fae0 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
2faf0 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65  Module = (sqlite
2fb00 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62  3_module *)pVtab
2fb10 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72  ->pModule;.  nAr
2fb20 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  g = pOp->p2;.  a
2fb30 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2fb40 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20  pe==P4_VTAB );. 
2fb50 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64   if( ALWAYS(pMod
2fb60 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b  ule->xUpdate) ){
2fb70 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  .    u8 vtabOnCo
2fb80 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74 61  nflict = db->vta
2fb90 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20  bOnConflict;.   
2fba0 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
2fbb0 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65  g;.    pX = &aMe
2fbc0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
2fbd0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
2fbe0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73   i++){.      ass
2fbf0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2fc00 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  pX) );.      mem
2fc10 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
2fc20 20 70 58 29 3b 0a 20 20 20 20 20 20 73 71 6c 69   pX);.      sqli
2fc30 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54  te3VdbeMemStoreT
2fc40 79 70 65 28 70 58 29 3b 0a 20 20 20 20 20 20 61  ype(pX);.      a
2fc50 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20  pArg[i] = pX;.  
2fc60 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a      pX++;.    }.
2fc70 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f      db->vtabOnCo
2fc80 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35  nflict = pOp->p5
2fc90 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
2fca0 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61  le->xUpdate(pVta
2fcb0 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20  b, nArg, apArg, 
2fcc0 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d  &rowid);.    db-
2fcd0 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20  >vtabOnConflict 
2fce0 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  = vtabOnConflict
2fcf0 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62  ;.    importVtab
2fd00 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29  ErrMsg(p, pVtab)
2fd10 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
2fd20 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e  LITE_OK && pOp->
2fd30 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  p1 ){.      asse
2fd40 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70  rt( nArg>1 && ap
2fd50 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67  Arg[0] && (apArg
2fd60 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  [0]->flags&MEM_N
2fd70 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62  ull) );.      db
2fd80 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
2fd90 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b  stRowid = rowid;
2fda0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
2fdb0 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  c==SQLITE_CONSTR
2fdc0 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e  AINT && pOp->p4.
2fdd0 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69  pVtab->bConstrai
2fde0 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  nt ){.      if( 
2fdf0 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p5==OE_Igno
2fe00 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  re ){.        rc
2fe10 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2fe20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2fe30 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
2fe40 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f  n = ((pOp->p5==O
2fe50 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f  E_Replace) ? OE_
2fe60 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29  Abort : pOp->p5)
2fe70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
2fe80 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43  lse{.      p->nC
2fe90 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20  hange++;.    }. 
2fea0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2feb0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2fec0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2fed0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51   */..#ifndef  SQ
2fee0 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
2fef0 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64  PRAGMAS./* Opcod
2ff00 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20  e: Pagecount P1 
2ff10 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
2ff20 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
2ff30 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
2ff40 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   in database P1 
2ff50 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  to memory cell P
2ff60 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  2..*/.case OP_Pa
2ff70 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20  gecount: {      
2ff80 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
2ff90 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
2ffa0 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65  ut->u.i = sqlite
2ffb0 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 64  3BtreeLastPage(d
2ffc0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
2ffd0 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pBt);.  break;.}
2ffe0 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
2fff0 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  f  SQLITE_OMIT_P
30000 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20  AGER_PRAGMAS./* 
30010 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74  Opcode: MaxPgcnt
30020 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
30030 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74  .** Try to set t
30040 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
30050 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61  count for databa
30060 73 65 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c  se P1 to the val
30070 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20  ue in P3..** Do 
30080 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69  not let the maxi
30090 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66  mum page count f
300a0 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75  all below the cu
300b0 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74  rrent page count
300c0 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63   and.** do not c
300d0 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75  hange the maximu
300e0 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c  m page count val
300f0 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a  ue if P3==0..**.
30100 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78  ** Store the max
30110 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20  imum page count 
30120 61 66 74 65 72 20 74 68 65 20 63 68 61 6e 67 65  after the change
30130 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
30140 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50  .*/.case OP_MaxP
30150 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  gcnt: {         
30160 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
30170 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67  lease */.  unsig
30180 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a  ned int newMax;.
30190 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
301a0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
301b0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e  Op->p1].pBt;.  n
301c0 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28  ewMax = 0;.  if(
301d0 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
301e0 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33  newMax = sqlite3
301f0 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 70 42  BtreeLastPage(pB
30200 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d  t);.    if( newM
30210 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70  ax < (unsigned)p
30220 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20  Op->p3 ) newMax 
30230 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d  = (unsigned)pOp-
30240 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >p3;.  }.  pOut-
30250 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74  >u.i = sqlite3Bt
30260 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28  reeMaxPageCount(
30270 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20  pBt, newMax);.  
30280 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
30290 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
302a0 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f  _OMIT_TRACE./* O
302b0 70 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a  pcode: Trace * *
302c0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66   * P4 *.**.** If
302d0 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62   tracing is enab
302e0 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69  led (by the sqli
302f0 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74  te3_trace()) int
30300 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20  erface, then.** 
30310 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
30320 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34   contained in P4
30330 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74   is emitted on t
30340 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
30350 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72  k..*/.case OP_Tr
30360 61 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ace: {.  char *z
30370 54 72 61 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a  Trace;.  char *z
30380 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72  ;..  if( db->xTr
30390 61 63 65 20 26 26 20 28 7a 54 72 61 63 65 20 3d  ace && (zTrace =
303a0 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
303b0 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
303c0 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 7a 20  l))!=0 ){.    z 
303d0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70  = sqlite3VdbeExp
303e0 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65  andSql(p, zTrace
303f0 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63  );.    db->xTrac
30400 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c  e(db->pTraceArg,
30410 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   z);.    sqlite3
30420 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20  DbFree(db, z);. 
30430 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
30440 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62  _DEBUG.  if( (db
30450 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
30460 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20  _SqlTrace)!=0.  
30470 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70   && (zTrace = (p
30480 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
30490 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29  p4.z : p->zSql))
304a0 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c  !=0.  ){.    sql
304b0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
304c0 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e  "SQL-trace: %s\n
304d0 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a  ", zTrace);.  }.
304e0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
304f0 5f 44 45 42 55 47 20 2a 2f 0a 20 20 62 72 65 61  _DEBUG */.  brea
30500 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  k;.}.#endif.../*
30510 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20   Opcode: Noop * 
30520 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f  * * * *.**.** Do
30530 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20   nothing.  This 
30540 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f  instruction is o
30550 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61  ften useful as a
30560 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61   jump.** destina
30570 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54  tion..*/./*.** T
30580 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e  he magic Explain
30590 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79   opcode are only
305a0 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65   inserted when e
305b0 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68  xplain==2 (which
305c0 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68  .** is to say wh
305d0 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
305e0 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78  UERY PLAN syntax
305f0 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68   is used.).** Th
30600 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64  is opcode record
30610 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  s information fr
30620 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  om the optimizer
30630 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20  .  It is the.** 
30640 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f  the same as a no
30650 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  -op.  This opcod
30660 65 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20  esnever appears 
30670 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f  in a real VM pro
30680 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74  gram..*/.default
30690 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
306a0 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f  This is really O
306b0 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78  P_Noop and OP_Ex
306c0 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72  plain */.  asser
306d0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
306e0 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e  OP_Noop || pOp->
306f0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61  opcode==OP_Expla
30700 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  in );.  break;.}
30710 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
30720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30730 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30750 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30760 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66  .** The cases of
30770 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
30780 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73  ement above this
30790 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c   line should all
307a0 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20   be indented.** 
307b0 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
307c0 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  t the left-most 
307d0 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65  6 spaces have be
307e0 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d  en removed to im
307f0 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61  prove the.** rea
30800 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20  dability.  From 
30810 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f  this point on do
30820 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69  wn, the normal i
30830 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73  ndentation rules
30840 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64   are.** restored
30850 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**************
30860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30890 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
308a0 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56  .    }..#ifdef V
308b0 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
308c0 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70  {.      u64 elap
308d0 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74  sed = sqlite3Hwt
308e0 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20  ime() - start;. 
308f0 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73       pOp->cycles
30900 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20   += elapsed;.   
30910 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23     pOp->cnt++;.#
30920 69 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72  if 0.        fpr
30930 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31  intf(stdout, "%1
30940 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29  0llu ", elapsed)
30950 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
30960 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
30970 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 61 4f  out, origPc, &aO
30980 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64  p[origPc]);.#end
30990 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  if.    }.#endif.
309a0 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
309b0 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20  owing code adds 
309c0 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61  nothing to the a
309d0 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c  ctual functional
309e0 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ity.    ** of th
309f0 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69  e program.  It i
30a00 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20  s only here for 
30a10 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75  testing and debu
30a20 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e  gging..    ** On
30a30 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c   the other hand,
30a40 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50   it does burn CP
30a50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74  U cycles every t
30a60 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20  ime through.    
30a70 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72  ** the evaluator
30a80 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61   loop.  So we ca
30a90 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77  n leave it out w
30aa0 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65  hen NDEBUG is de
30ab0 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
30ac0 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20  fndef NDEBUG.   
30ad0 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20   assert( pc>=-1 
30ae0 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
30af0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
30b00 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e  EBUG.    if( p->
30b10 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69  trace ){.      i
30b20 66 28 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e  f( rc!=0 ) fprin
30b30 74 66 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d  tf(p->trace,"rc=
30b40 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20  %d\n",rc);.     
30b50 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
30b60 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f  s & (OPFLG_OUT2_
30b70 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c 47  PRERELEASE|OPFLG
30b80 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20  _OUT2) ){.      
30b90 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28    registerTrace(
30ba0 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70  p->trace, pOp->p
30bb0 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
30bc0 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
30bd0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61    if( pOp->opfla
30be0 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20  gs & OPFLG_OUT3 
30bf0 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
30c00 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63  terTrace(p->trac
30c10 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  e, pOp->p3, &aMe
30c20 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
30c30 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
30c40 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  f  /* SQLITE_DEB
30c50 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a  UG */.#endif  /*
30c60 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20   NDEBUG */.  }  
30c70 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68  /* The end of th
30c80 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74  e for(;;) loop t
30c90 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68  he loops through
30ca0 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f   opcodes */..  /
30cb0 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
30cc0 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61  is point, it mea
30cd0 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f  ns that executio
30ce0 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69  n is finished wi
30cf0 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  th.  ** an error
30d00 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20   of some kind.. 
30d10 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68   */.vdbe_error_h
30d20 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72  alt:.  assert( r
30d30 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  c );.  p->rc = r
30d40 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73  c;.  testcase( s
30d50 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
30d60 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20  ig.xLog!=0 );.  
30d70 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20  sqlite3_log(rc, 
30d80 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74  "statement abort
30d90 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73  s at %d: [%s] %s
30da0 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
30db0 20 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53         pc, p->zS
30dc0 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
30dd0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  .  sqlite3VdbeHa
30de0 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d  lt(p);.  if( rc=
30df0 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
30e00 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63  MEM ) db->malloc
30e10 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63  Failed = 1;.  rc
30e20 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
30e30 0a 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65  .  if( resetSche
30e40 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20  maOnFault>0 ){. 
30e50 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49     sqlite3ResetI
30e60 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
30e70 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  , resetSchemaOnF
30e80 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20  ault-1);.  }..  
30e90 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  /* This is the o
30ea0 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74  nly way out of t
30eb0 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20  his procedure.  
30ec0 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20  We have to.  ** 
30ed0 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65  release the mute
30ee0 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68  xes on btrees th
30ef0 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64  at were acquired
30f00 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70   at the.  ** top
30f10 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e  . */.vdbe_return
30f20 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  :.  db->lastRowi
30f30 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
30f40 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65 61 76   sqlite3VdbeLeav
30f50 65 28 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  e(p);.  return r
30f60 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  c;..  /* Jump to
30f70 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69 6e   here if a strin
30f80 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72  g or blob larger
30f90 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58   than SQLITE_MAX
30fa0 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20  _LENGTH.  ** is 
30fb0 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a  encountered..  *
30fc0 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c  /.too_big:.  sql
30fd0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
30fe0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
30ff0 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
31000 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d  oo big");.  rc =
31010 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a   SQLITE_TOOBIG;.
31020 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
31030 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
31040 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
31050 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a  malloc() fails..
31060 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64    */.no_mem:.  d
31070 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
31080 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65  = 1;.  sqlite3Se
31090 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
310a0 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66  Msg, db, "out of
310b0 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20   memory");.  rc 
310c0 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
310d0 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
310e0 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
310f0 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61  mp to here for a
31100 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66  ny other kind of
31110 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54   fatal error.  T
31120 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65  he "rc" variable
31130 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c  .  ** should hol
31140 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62  d the error numb
31150 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  er..  */.abort_d
31160 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61  ue_to_error:.  a
31170 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73  ssert( p->zErrMs
31180 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62  g==0 );.  if( db
31190 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
311a0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
311b0 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  EM;.  if( rc!=SQ
311c0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
311d0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
311e0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
311f0 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
31200 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
31210 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  ));.  }.  goto v
31220 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
31230 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
31240 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65  re if the sqlite
31250 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50  3_interrupt() AP
31260 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72  I sets the inter
31270 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a  rupt.  ** flag..
31280 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
31290 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61  o_interrupt:.  a
312a0 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73  ssert( db->u1.is
312b0 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20  Interrupted );. 
312c0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
312d0 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20  ERRUPT;.  p->rc 
312e0 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53  = rc;.  sqlite3S
312f0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
31300 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
31310 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
31320 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  ));.  goto vdbe_
31330 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a        error_halt;.}.