/ Hex Artifact Content
Login

Artifact 4914ae1d00045a5310aea9e0f7c9a8edd3d9f856:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f 75  lite3VdbeMemAbou
0940: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a 23  tToChange(P,M).#
0950: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d 65  else.# define me
0960: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 50  mAboutToChange(P
0970: 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,M).#endif../*.*
0980: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
0990: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
09a0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
09b0: 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72 73  very time a curs
09c0: 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69 74  or.** moves, eit
09d0: 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53 65  her by the OP_Se
09e0: 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20 6f  ekXX, OP_Next, o
09f0: 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64 65  r OP_Prev opcode
0a00: 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a 20  s.  The test.** 
0a10: 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20 74  procedures use t
0a20: 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
0a30: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  to make sure tha
0a40: 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a 2a  t indices are.**
0a50: 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74   working correct
0a60: 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61 62  ly.  This variab
0a70: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0a80: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0a90: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0aa0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0ab0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0ac0: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0ad0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ae0: 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
0af0: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
0b00: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69  ../*.** When thi
0b10: 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  s global variabl
0b20: 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20 69  e is positive, i
0b30: 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e 74  t gets decrement
0b40: 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a 2a  ed once before.*
0b50: 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74 69  * each instructi
0b60: 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e 20  on in the VDBE. 
0b70: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
0b80: 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73   zero, the u1.is
0b90: 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66  Interrupted.** f
0ba0: 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69  ield of the sqli
0bb0: 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73  te3 structure is
0bc0: 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f   set in order to
0bd0: 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74   simulate an int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  em;}../* Return 
1620: 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72 73  true if the curs
1630: 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  or was opened us
1640: 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e 53  ing the OP_OpenS
1650: 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a 2f  orter opcode. */
1660: 0a 23 20 64 65 66 69 6e 65 20 69 73 53 6f 72 74  .# define isSort
1670: 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53 6f 72  er(x) ((x)->pSor
1680: 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 41  ter!=0)../*.** A
1690: 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69  rgument pMem poi
16a0: 6e 74 73 20 61 74 20 61 20 72 65 67 69 73 74 65  nts at a registe
16b0: 72 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 70  r that will be p
16c0: 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73  assed to a.** us
16d0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
16e0: 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65 64 20  ion or returned 
16f0: 74 6f 20 74 68 65 20 75 73 65 72 20 61 73 20 74  to the user as t
1700: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20 71  he result of a q
1710: 75 65 72 79 2e 0a 2a 2a 20 54 68 69 73 20 72 6f  uery..** This ro
1720: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70  utine sets the p
1730: 4d 65 6d 2d 3e 74 79 70 65 20 76 61 72 69 61 62  Mem->type variab
1740: 6c 65 20 75 73 65 64 20 62 79 20 74 68 65 20 73  le used by the s
1750: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29  qlite3_value_*()
1760: 20 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 2e 0a 2a   .** routines..*
1770: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
1780: 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 4d  beMemStoreType(M
1790: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74  em *pMem){.  int
17a0: 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66   flags = pMem->f
17b0: 6c 61 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67  lags;.  if( flag
17c0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
17d0: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
17e0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20   SQLITE_NULL;.  
17f0: 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61  }.  else if( fla
1800: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
1810: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
1820: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b   SQLITE_INTEGER;
1830: 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
1840: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
1850: 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79   ){.    pMem->ty
1860: 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f 41  pe = SQLITE_FLOA
1870: 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66  T;.  }.  else if
1880: 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ( flags & MEM_St
1890: 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  r ){.    pMem->t
18a0: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54 45 58  ype = SQLITE_TEX
18b0: 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  T;.  }else{.    
18c0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18d0: 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a  ITE_BLOB;.  }.}.
18e0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  ./*.** Allocate 
18f0: 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62 65  VdbeCursor numbe
1900: 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e 20  r iCur.  Return 
1910: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e  a pointer to it.
1920: 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a    Return NULL.**
1930: 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20 6f   if we run out o
1940: 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61  f memory..*/.sta
1950: 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20 2a  tic VdbeCursor *
1960: 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 0a  allocateCursor(.
1970: 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20 20    Vdbe *p,      
1980: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
1990: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a  irtual machine *
19a0: 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20 20  /.  int iCur,   
19b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
19c0: 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56 64  ex of the new Vd
19d0: 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e  beCursor */.  in
19e0: 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20 20  t nField,       
19f0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a00: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 74   fields in the t
1a10: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f  able or index */
1a20: 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20 20  .  int iDb,     
1a30: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
1a40: 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20  base the cursor 
1a50: 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d  belongs to, or -
1a60: 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72  1 */.  int isBtr
1a70: 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20  eeCursor     /* 
1a80: 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65 2e  True for B-Tree.
1a90: 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65 75    False for pseu
1aa0: 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61 62  do-table or vtab
1ab0: 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64   */.){.  /* Find
1ac0: 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
1ad0: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73   that will be us
1ae0: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1af0: 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20  blob of memory. 
1b00: 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72   ** required for
1b10: 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72   this VdbeCursor
1b20: 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69   structure. It i
1b30: 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20  s convenient to 
1b40: 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65  use a .  ** vdbe
1b50: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20   memory cell to 
1b60: 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72  manage the memor
1b70: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
1b80: 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a  uired for a.  **
1b90: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1ba0: 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f  cture for the fo
1bb0: 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a  llowing reasons:
1bc0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53  .  **.  **   * S
1bd0: 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20  ometimes cursor 
1be0: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
1bf0: 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66   for a couple of
1c00: 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20   different.  ** 
1c10: 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20      purposes in 
1c20: 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20  a vdbe program. 
1c30: 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73  The different us
1c40: 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65  es might require
1c50: 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72  .  **     differ
1c60: 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61  ent sized alloca
1c70: 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65  tions. Memory ce
1c80: 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77  lls provide grow
1c90: 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c  able.  **     al
1ca0: 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  locations..  **.
1cb0: 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73    **   * When us
1cc0: 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ing ENABLE_MEMOR
1cd0: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65  Y_MANAGEMENT, me
1ce0: 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72  mory cell buffer
1cf0: 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62  s can.  **     b
1d00: 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76  e freed lazily v
1d10: 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72  ia the sqlite3_r
1d20: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20  elease_memory() 
1d30: 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20  API. This.  **  
1d40: 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65     minimizes the
1d50: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f   number of mallo
1d60: 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20  c calls made by 
1d70: 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a  the system..  **
1d80: 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c  .  ** Memory cel
1d90: 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61  ls for cursors a
1da0: 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20  re allocated at 
1db0: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61  the top of the a
1dc0: 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63  ddress.  ** spac
1dd0: 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  e. Memory cell (
1de0: 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70  p->nMem) corresp
1df0: 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30  onds to cursor 0
1e00: 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a  . Space for.  **
1e10: 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e   cursor 1 is man
1e20: 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63  aged by memory c
1e30: 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c  ell (p->nMem-1),
1e40: 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d   etc..  */.  Mem
1e50: 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65   *pMem = &p->aMe
1e60: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b  m[p->nMem-iCur];
1e70: 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20  ..  int nByte;. 
1e80: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1e90: 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20   = 0;.  nByte = 
1ea0: 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69  .      ROUND8(si
1eb0: 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29  zeof(VdbeCursor)
1ec0: 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74  ) + .      (isBt
1ed0: 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65  reeCursor?sqlite
1ee0: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1ef0: 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20 20 32  ():0) + .      2
1f00: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
1f10: 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  32);..  assert( 
1f20: 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  iCur<p->nCursor 
1f30: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  );.  if( p->apCs
1f40: 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20 20 73  r[iCur] ){.    s
1f50: 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
1f60: 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
1f70: 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e  [iCur]);.    p->
1f80: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b  apCsr[iCur] = 0;
1f90: 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c 49 54  .  }.  if( SQLIT
1fa0: 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62  E_OK==sqlite3Vdb
1fb0: 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e  eMemGrow(pMem, n
1fc0: 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20  Byte, 0) ){.    
1fd0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
1fe0: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
1ff0: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
2000: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
2010: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2020: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44  r));.    pCx->iD
2030: 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78  b = iDb;.    pCx
2040: 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c  ->nField = nFiel
2050: 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69 65 6c  d;.    if( nFiel
2060: 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  d ){.      pCx->
2070: 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a 29 26  aType = (u32 *)&
2080: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
2090: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
20a0: 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ))];.    }.    i
20b0: 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f 72  f( isBtreeCursor
20c0: 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 70   ){.      pCx->p
20d0: 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72 73  Cursor = (BtCurs
20e0: 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20 26  or*).          &
20f0: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
2100: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
2110: 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65  ))+2*nField*size
2120: 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20 20 20  of(u32)];.      
2130: 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
2140: 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43 75 72  orZero(pCx->pCur
2150: 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2160: 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a    return pCx;.}.
2170: 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f  ./*.** Try to co
2180: 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e  nvert a value in
2190: 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70  to a numeric rep
21a0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77  resentation if w
21b0: 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77  e can.** do so w
21c0: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
21d0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20  nformation.  In 
21e0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
21f0: 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f  the string.** lo
2200: 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65  oks like a numbe
2210: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e  r, convert it in
2220: 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66  to a number.  If
2230: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   it does not.** 
2240: 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62  look like a numb
2250: 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f  er, leave it alo
2260: 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ne..*/.static vo
2270: 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  id applyNumericA
2280: 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65  ffinity(Mem *pRe
2290: 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63 2d  c){.  if( (pRec-
22a0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52 65  >flags & (MEM_Re
22b0: 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20  al|MEM_Int))==0 
22c0: 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 56  ){.    double rV
22d0: 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20 69 56  alue;.    i64 iV
22e0: 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65 6e 63  alue;.    u8 enc
22f0: 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20   = pRec->enc;.  
2300: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2310: 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 29  gs&MEM_Str)==0 )
2320: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66 28   return;.    if(
2330: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52 65   sqlite3AtoF(pRe
2340: 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20 70  c->z, &rValue, p
2350: 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20  Rec->n, enc)==0 
2360: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66  ) return;.    if
2370: 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  ( 0==sqlite3Atoi
2380: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61  64(pRec->z, &iVa
2390: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e  lue, pRec->n, en
23a0: 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52 65 63  c) ){.      pRec
23b0: 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a  ->u.i = iValue;.
23c0: 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67        pRec->flag
23d0: 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  s |= MEM_Int;.  
23e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
23f0: 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75 65 3b  Rec->r = rValue;
2400: 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61  .      pRec->fla
2410: 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a  gs |= MEM_Real;.
2420: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a      }.  }.}../*.
2430: 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73  ** Processing is
2440: 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68   determine by th
2450: 65 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d  e affinity param
2460: 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  eter:.**.** SQLI
2470: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a  TE_AFF_INTEGER:.
2480: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ** SQLITE_AFF_RE
2490: 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  AL:.** SQLITE_AF
24a0: 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20  F_NUMERIC:.**   
24b0: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
24c0: 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67  pRec to an integ
24d0: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
24e0: 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c  n or a .**    fl
24f0: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70  oating-point rep
2500: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61  resentation if a
2510: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2520: 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69  entation.**    i
2530: 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20  s not possible. 
2540: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69   Note that the i
2550: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2560: 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61  ation is.**    a
2570: 6c 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c  lways preferred,
2580: 20 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66   even if the aff
2590: 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62  inity is REAL, b
25a0: 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20  ecause.**    an 
25b0: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
25c0: 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73  tation is more s
25d0: 70 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f  pace efficient o
25e0: 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51  n disk..**.** SQ
25f0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a  LITE_AFF_TEXT:.*
2600: 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65  *    Convert pRe
2610: 63 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72  c to a text repr
2620: 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  esentation..**.*
2630: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  * SQLITE_AFF_NON
2640: 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20  E:.**    No-op. 
2650: 20 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67   pRec is unchang
2660: 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ed..*/.static vo
2670: 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  id applyAffinity
2680: 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20  (.  Mem *pRec,  
2690: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
26a0: 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66  alue to apply af
26b0: 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63  finity to */.  c
26c0: 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20  har affinity,   
26d0: 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
26e0: 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
26f0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20   */.  u8 enc    
2700: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2710: 20 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64   this text encod
2720: 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20  ing */.){.  if( 
2730: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
2740: 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20  _AFF_TEXT ){.   
2750: 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74   /* Only attempt
2760: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2770: 74 6f 20 54 45 58 54 20 69 66 20 74 68 65 72 65  to TEXT if there
2780: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f   is an integer o
2790: 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65  r real.    ** re
27a0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c  presentation (bl
27b0: 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e  ob and NULL do n
27c0: 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64  ot get converted
27d0: 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a  ) but no string.
27e0: 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74      ** represent
27f0: 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20  ation..    */.  
2800: 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e    if( 0==(pRec->
2810: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26  flags&MEM_Str) &
2820: 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28  & (pRec->flags&(
2830: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74  MEM_Real|MEM_Int
2840: 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  )) ){.      sqli
2850: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
2860: 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29 3b 0a  ify(pRec, enc);.
2870: 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e      }.    pRec->
2880: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52  flags &= ~(MEM_R
2890: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  eal|MEM_Int);.  
28a0: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
28b0: 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ty!=SQLITE_AFF_N
28c0: 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ONE ){.    asser
28d0: 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  t( affinity==SQL
28e0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
28f0: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
2900: 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20  ITE_AFF_REAL.   
2910: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66            || aff
2920: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
2930: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20  F_NUMERIC );.   
2940: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
2950: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2960: 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
2970: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
2980: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2990: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
29a0: 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  pRec);.    }.  }
29b0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
29c0: 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79 70   convert the typ
29d0: 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  e of a function 
29e0: 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72 65  argument or a re
29f0: 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69  sult column.** i
2a00: 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65  nto a numeric re
2a10: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55  presentation.  U
2a20: 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47 45  se either INTEGE
2a30: 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68 65  R or REAL whiche
2a40: 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70  ver.** is approp
2a50: 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79  riate.  But only
2a60: 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69   do the conversi
2a70: 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73 73  on if it is poss
2a80: 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20  ible without.** 
2a90: 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
2aa0: 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20 74  ion and return t
2ab0: 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65 20  he revised type 
2ac0: 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2e  of the argument.
2ad0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
2ae0: 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79  value_numeric_ty
2af0: 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  pe(sqlite3_value
2b00: 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a   *pVal){.  Mem *
2b10: 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61  pMem = (Mem*)pVa
2b20: 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 74  l;.  if( pMem->t
2b30: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2b40: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d   ){.    applyNum
2b50: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2b60: 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  m);.    sqlite3V
2b70: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
2b80: 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74  pMem);.  }.  ret
2b90: 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a  urn pMem->type;.
2ba0: 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65  }../*.** Exporte
2bb0: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70  d version of app
2bc0: 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68  lyAffinity(). Th
2bd0: 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20  is one works on 
2be0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2bf0: 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65  .** not the inte
2c00: 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a  rnal Mem* type..
2c10: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2c20: 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
2c30: 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  y(.  sqlite3_val
2c40: 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20  ue *pVal, .  u8 
2c50: 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20  affinity, .  u8 
2c60: 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66  enc.){.  applyAf
2c70: 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56  finity((Mem *)pV
2c80: 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  al, affinity, en
2c90: 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  c);.}..#ifdef SQ
2ca0: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
2cb0: 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74   Write a nice st
2cc0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
2cd0: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  ion of the conte
2ce0: 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d  nts of cell pMem
2cf0: 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20  .** into buffer 
2d00: 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75  zBuf, length nBu
2d10: 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  f..*/.void sqlit
2d20: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
2d30: 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20  rint(Mem *pMem, 
2d40: 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63  char *zBuf){.  c
2d50: 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66  har *zCsr = zBuf
2d60: 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d  ;.  int f = pMem
2d70: 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74  ->flags;..  stat
2d80: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  ic const char *c
2d90: 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20  onst encnames[] 
2da0: 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c  = {"(X)", "(8)",
2db0: 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42   "(16LE)", "(16B
2dc0: 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d  E)"};..  if( f&M
2dd0: 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69  EM_Blob ){.    i
2de0: 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63  nt i;.    char c
2df0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
2e00: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63  M_Dyn ){.      c
2e10: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
2e20: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
2e30: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
2e40: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
2e50: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
2e60: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63  tatic ){.      c
2e70: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
2e80: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
2e90: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
2ea0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
2eb0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
2ec0: 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  m ){.      c = '
2ed0: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
2ee0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
2ef0: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
2f00: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
2f10: 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20      c = 's';.   
2f20: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
2f30: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
2f40: 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20  sr, "%c", c);.  
2f50: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2f60: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
2f70: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
2f80: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
2f90: 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29   "%d[", pMem->n)
2fa0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
2fb0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
2fc0: 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  sr);.    for(i=0
2fd0: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
2fe0: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
2ff0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3000: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30  f(100, zCsr, "%0
3010: 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d  2X", ((int)pMem-
3020: 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a  >z[i] & 0xFF));.
3030: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
3040: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3050: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66  sr);.    }.    f
3060: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
3070: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
3080: 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20  .      char z = 
3090: 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20  pMem->z[i];.    
30a0: 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e    if( z<32 || z>
30b0: 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20  126 ) *zCsr++ = 
30c0: 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20  '.';.      else 
30d0: 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20  *zCsr++ = z;.   
30e0: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
30f0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3100: 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61  sr, "]%s", encna
3110: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3120: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
3130: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3140: 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20  r);.    if( f & 
3150: 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
3160: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3170: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25  tf(100, zCsr,"+%
3180: 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72  dz",pMem->u.nZer
3190: 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b  o);.      zCsr +
31a0: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
31b0: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20  0(zCsr);.    }. 
31c0: 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b     *zCsr = '\0';
31d0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26  .  }else if( f &
31e0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
31f0: 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42  int j, k;.    zB
3200: 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20  uf[0] = ' ';.   
3210: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e   if( f & MEM_Dyn
3220: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
3230: 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  ] = 'z';.      a
3240: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3250: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
3260: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
3270: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3280: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
3290: 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20  zBuf[1] = 't';. 
32a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
32b0: 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45  & (MEM_Dyn|MEM_E
32c0: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
32d0: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
32e0: 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20  EM_Ephem ){.    
32f0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b    zBuf[1] = 'e';
3300: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3310: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3320: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
3330: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3340: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a   zBuf[1] = 's';.
3350: 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b      }.    k = 2;
3360: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3370: 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66  rintf(100, &zBuf
3380: 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d  [k], "%d", pMem-
3390: 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  >n);.    k += sq
33a0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
33b0: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
33c0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20  f[k++] = '[';.  
33d0: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20    for(j=0; j<15 
33e0: 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b  && j<pMem->n; j+
33f0: 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d  +){.      u8 c =
3400: 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20   pMem->z[j];.   
3410: 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26     if( c>=0x20 &
3420: 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20  & c<0x7f ){.    
3430: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3440: 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
3450: 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b          zBuf[k++
3460: 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d  ] = '.';.      }
3470: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b  .    }.    zBuf[
3480: 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20  k++] = ']';.    
3490: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
34a0: 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65  (100,&zBuf[k], e
34b0: 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e  ncnames[pMem->en
34c0: 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  c]);.    k += sq
34d0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
34e0: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
34f0: 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a  f[k++] = 0;.  }.
3500: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3510: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
3520: 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61  .** Print the va
3530: 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65  lue of a registe
3540: 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75  r for tracing pu
3550: 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69  rposes:.*/.stati
3560: 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50  c void memTraceP
3570: 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c 20  rint(FILE *out, 
3580: 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70  Mem *p){.  if( p
3590: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
35a0: 76 61 6c 69 64 20 29 7b 0a 20 20 20 20 66 70 72  valid ){.    fpr
35b0: 69 6e 74 66 28 6f 75 74 2c 20 22 20 75 6e 64 65  intf(out, " unde
35c0: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
35d0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
35e0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
35f0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e  fprintf(out, " N
3600: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3610: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3620: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3630: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3640: 53 74 72 29 20 29 7b 0a 20 20 20 20 66 70 72 69  Str) ){.    fpri
3650: 6e 74 66 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c  ntf(out, " si:%l
3660: 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20  ld", p->u.i);.  
3670: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
3680: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
3690: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
36a0: 20 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75   " i:%lld", p->u
36b0: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
36c0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
36d0: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
36e0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
36f0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 66  EM_Real ){.    f
3700: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a  printf(out, " r:
3710: 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64  %g", p->r);.#end
3720: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3730: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3740: 77 53 65 74 20 29 7b 0a 20 20 20 20 66 70 72 69  wSet ){.    fpri
3750: 6e 74 66 28 6f 75 74 2c 20 22 20 28 72 6f 77 73  ntf(out, " (rows
3760: 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  et)");.  }else{.
3770: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30      char zBuf[20
3780: 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0];.    sqlite3V
3790: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
37a0: 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  t(p, zBuf);.    
37b0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 22  fprintf(out, " "
37c0: 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  );.    fprintf(o
37d0: 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
37e0: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
37f0: 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65  id registerTrace
3800: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20  (FILE *out, int 
3810: 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  iReg, Mem *p){. 
3820: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 52   fprintf(out, "R
3830: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
3840: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
3850: 6e 74 28 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70  nt(out, p);.  fp
3860: 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29  rintf(out, "\n")
3870: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ;.}.#endif..#ifd
3880: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3890: 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54  #  define REGIST
38a0: 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66  ER_TRACE(R,M) if
38b0: 28 70 2d 3e 74 72 61 63 65 29 72 65 67 69 73 74  (p->trace)regist
38c0: 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
38d0: 2c 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64  ,R,M).#else.#  d
38e0: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
38f0: 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66  RACE(R,M).#endif
3900: 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  ...#ifdef VDBE_P
3910: 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68  ROFILE../* .** h
3920: 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73  wtime.h contains
3930: 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65   inline assemble
3940: 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65  r code for imple
3950: 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68  menting .** high
3960: 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d  -performance tim
3970: 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f  ing routines..*/
3980: 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d  .#include "hwtim
3990: 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e.h"..#endif../*
39a0: 0a 2a 2a 20 54 68 65 20 43 48 45 43 4b 5f 46 4f  .** The CHECK_FO
39b0: 52 5f 49 4e 54 45 52 52 55 50 54 20 6d 61 63 72  R_INTERRUPT macr
39c0: 6f 20 64 65 66 69 6e 65 64 20 68 65 72 65 20 6c  o defined here l
39d0: 6f 6f 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ooks to see if t
39e0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e  he.** sqlite3_in
39f0: 74 65 72 72 75 70 74 28 29 20 72 6f 75 74 69 6e  terrupt() routin
3a00: 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  e has been calle
3a10: 64 2e 20 20 49 66 20 69 74 20 68 61 73 20 62 65  d.  If it has be
3a20: 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63  en, then.** proc
3a30: 65 73 73 69 6e 67 20 6f 66 20 74 68 65 20 56 44  essing of the VD
3a40: 42 45 20 70 72 6f 67 72 61 6d 20 69 73 20 69 6e  BE program is in
3a50: 74 65 72 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a  terrupted..**.**
3a60: 20 54 68 69 73 20 6d 61 63 72 6f 20 61 64 64 65   This macro adde
3a70: 64 20 74 6f 20 65 76 65 72 79 20 69 6e 73 74 72  d to every instr
3a80: 75 63 74 69 6f 6e 20 74 68 61 74 20 64 6f 65 73  uction that does
3a90: 20 61 20 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72   a jump in order
3aa0: 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74   to.** implement
3ab0: 20 61 20 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74   a loop.  This t
3ac0: 65 73 74 20 75 73 65 64 20 74 6f 20 62 65 20 6f  est used to be o
3ad0: 6e 20 65 76 65 72 79 20 73 69 6e 67 6c 65 20 69  n every single i
3ae0: 6e 73 74 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62  nstruction,.** b
3af0: 75 74 20 74 68 61 74 20 6d 65 61 6e 74 20 77 65  ut that meant we
3b00: 20 6d 6f 72 65 20 74 65 73 74 69 6e 67 20 74 68   more testing th
3b10: 61 6e 20 77 65 20 6e 65 65 64 65 64 2e 20 20 42  an we needed.  B
3b20: 79 20 6f 6e 6c 79 20 74 65 73 74 69 6e 67 20 74  y only testing t
3b30: 68 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75  he.** flag on ju
3b40: 6d 70 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c  mp instructions,
3b50: 20 77 65 20 67 65 74 20 61 20 28 73 6d 61 6c 6c   we get a (small
3b60: 29 20 73 70 65 65 64 20 69 6d 70 72 6f 76 65 6d  ) speed improvem
3b70: 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ent..*/.#define 
3b80: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3b90: 55 50 54 20 5c 0a 20 20 20 69 66 28 20 64 62 2d  UPT \.   if( db-
3ba0: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
3bb0: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
3bc0: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
3bd0: 0a 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  ...#ifndef NDEBU
3be0: 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  G./*.** This fun
3bf0: 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61  ction is only ca
3c00: 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
3c10: 20 61 6e 20 61 73 73 65 72 74 28 29 20 65 78 70   an assert() exp
3c20: 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63  ression. It.** c
3c30: 68 65 63 6b 73 20 74 68 61 74 20 74 68 65 20 73  hecks that the s
3c40: 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74  qlite3.nTransact
3c50: 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20  ion variable is 
3c60: 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f  correctly set to
3c70: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
3c80: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
3c90: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72  n savepoints cur
3ca0: 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a  rently in the .*
3cb0: 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  * linked list st
3cc0: 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65  arting at sqlite
3cd0: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a  3.pSavepoint..**
3ce0: 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a   .** Usage:.**.*
3cf0: 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 63 68  *     assert( ch
3d00: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
3d10: 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74  t(db) );.*/.stat
3d20: 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65  ic int checkSave
3d30: 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74  pointCount(sqlit
3d40: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e  e3 *db){.  int n
3d50: 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e   = 0;.  Savepoin
3d60: 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62  t *p;.  for(p=db
3d70: 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b  ->pSavepoint; p;
3d80: 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b   p=p->pNext) n++
3d90: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28  ;.  assert( n==(
3da0: 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
3db0: 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
3dc0: 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a  onSavepoint) );.
3dd0: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65    return 1;.}.#e
3de0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e  ndif../*.** Tran
3df0: 73 66 65 72 20 65 72 72 6f 72 20 6d 65 73 73 61  sfer error messa
3e00: 67 65 20 74 65 78 74 20 66 72 6f 6d 20 61 6e 20  ge text from an 
3e10: 73 71 6c 69 74 65 33 5f 76 74 61 62 2e 7a 45 72  sqlite3_vtab.zEr
3e20: 72 4d 73 67 20 28 74 65 78 74 20 73 74 6f 72 65  rMsg (text store
3e30: 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72 79 20 6f  d.** in memory o
3e40: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
3e50: 69 74 65 33 5f 6d 61 6c 6c 6f 63 29 20 69 6e 74  ite3_malloc) int
3e60: 6f 20 61 20 56 64 62 65 2e 7a 45 72 72 4d 73 67  o a Vdbe.zErrMsg
3e70: 20 28 74 65 78 74 20 73 74 6f 72 65 64 0a 2a 2a   (text stored.**
3e80: 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   in memory obtai
3e90: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
3ea0: 44 62 4d 61 6c 6c 6f 63 29 2e 0a 2a 2f 0a 73 74  DbMalloc)..*/.st
3eb0: 61 74 69 63 20 76 6f 69 64 20 69 6d 70 6f 72 74  atic void import
3ec0: 56 74 61 62 45 72 72 4d 73 67 28 56 64 62 65 20  VtabErrMsg(Vdbe 
3ed0: 2a 70 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  *p, sqlite3_vtab
3ee0: 20 2a 70 56 74 61 62 29 7b 0a 20 20 73 71 6c 69   *pVtab){.  sqli
3ef0: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
3f00: 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
3f10: 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
3f20: 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d  ;.  p->zErrMsg =
3f30: 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70   sqlite3DbStrDup
3f40: 28 64 62 2c 20 70 56 74 61 62 2d 3e 7a 45 72 72  (db, pVtab->zErr
3f50: 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Msg);.  sqlite3_
3f60: 66 72 65 65 28 70 56 74 61 62 2d 3e 7a 45 72 72  free(pVtab->zErr
3f70: 4d 73 67 29 3b 0a 20 20 70 56 74 61 62 2d 3e 7a  Msg);.  pVtab->z
3f80: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 7d 0a 0a 0a  ErrMsg = 0;.}...
3f90: 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73  /*.** Execute as
3fa0: 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20   much of a VDBE 
3fb0: 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61  program as we ca
3fc0: 6e 20 74 68 65 6e 20 72 65 74 75 72 6e 2e 0a 2a  n then return..*
3fd0: 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65  *.** sqlite3Vdbe
3fe0: 4d 61 6b 65 52 65 61 64 79 28 29 20 6d 75 73 74  MakeReady() must
3ff0: 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66 6f 72   be called befor
4000: 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  e this routine i
4010: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 6c  n order to.** cl
4020: 6f 73 65 20 74 68 65 20 70 72 6f 67 72 61 6d 20  ose the program 
4030: 77 69 74 68 20 61 20 66 69 6e 61 6c 20 4f 50 5f  with a final OP_
4040: 48 61 6c 74 20 61 6e 64 20 74 6f 20 73 65 74 20  Halt and to set 
4050: 75 70 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 73  up the callbacks
4060: 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65 72 72 6f  .** and the erro
4070: 72 20 6d 65 73 73 61 67 65 20 70 6f 69 6e 74 65  r message pointe
4080: 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 65 76 65  r..**.** Wheneve
4090: 72 20 61 20 72 6f 77 20 6f 72 20 72 65 73 75 6c  r a row or resul
40a0: 74 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61  t data is availa
40b0: 62 6c 65 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  ble, this routin
40c0: 65 20 77 69 6c 6c 20 65 69 74 68 65 72 0a 2a 2a  e will either.**
40d0: 20 69 6e 76 6f 6b 65 20 74 68 65 20 72 65 73 75   invoke the resu
40e0: 6c 74 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20  lt callback (if 
40f0: 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72  there is one) or
4100: 20 72 65 74 75 72 6e 20 77 69 74 68 0a 2a 2a 20   return with.** 
4110: 53 51 4c 49 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a  SQLITE_ROW..**.*
4120: 2a 20 49 66 20 61 6e 20 61 74 74 65 6d 70 74 20  * If an attempt 
4130: 69 73 20 6d 61 64 65 20 74 6f 20 6f 70 65 6e 20  is made to open 
4140: 61 20 6c 6f 63 6b 65 64 20 64 61 74 61 62 61 73  a locked databas
4150: 65 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  e, then this rou
4160: 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c 20 65 69 74  tine.** will eit
4170: 68 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 62  her invoke the b
4180: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  usy callback (if
4190: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f   there is one) o
41a0: 72 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 72 65 74  r it will.** ret
41b0: 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 2e  urn SQLITE_BUSY.
41c0: 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72  .**.** If an err
41d0: 6f 72 20 6f 63 63 75 72 73 2c 20 61 6e 20 65 72  or occurs, an er
41e0: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 77  ror message is w
41f0: 72 69 74 74 65 6e 20 74 6f 20 6d 65 6d 6f 72 79  ritten to memory
4200: 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f   obtained.** fro
4210: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
4220: 28 29 20 61 6e 64 20 70 2d 3e 7a 45 72 72 4d 73  () and p->zErrMs
4230: 67 20 69 73 20 6d 61 64 65 20 74 6f 20 70 6f 69  g is made to poi
4240: 6e 74 20 74 6f 20 74 68 61 74 20 6d 65 6d 6f 72  nt to that memor
4250: 79 2e 0a 2a 2a 20 54 68 65 20 65 72 72 6f 72 20  y..** The error 
4260: 63 6f 64 65 20 69 73 20 73 74 6f 72 65 64 20 69  code is stored i
4270: 6e 20 70 2d 3e 72 63 20 61 6e 64 20 74 68 69 73  n p->rc and this
4280: 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
4290: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
42a0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 61 6c 6c  *.** If the call
42b0: 62 61 63 6b 20 65 76 65 72 20 72 65 74 75 72 6e  back ever return
42c0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
42d0: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 65 78 69   the program exi
42e0: 74 73 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ts.** immediatel
42f0: 79 2e 20 20 54 68 65 72 65 20 77 69 6c 6c 20 62  y.  There will b
4300: 65 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61  e no error messa
4310: 67 65 20 62 75 74 20 74 68 65 20 70 2d 3e 72 63  ge but the p->rc
4320: 20 66 69 65 6c 64 20 69 73 0a 2a 2a 20 73 65 74   field is.** set
4330: 20 74 6f 20 53 51 4c 49 54 45 5f 41 42 4f 52 54   to SQLITE_ABORT
4340: 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e   and this routin
4350: 65 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51  e will return SQ
4360: 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a  LITE_ERROR..**.*
4370: 2a 20 41 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  * A memory alloc
4380: 61 74 69 6f 6e 20 65 72 72 6f 72 20 63 61 75 73  ation error caus
4390: 65 73 20 70 2d 3e 72 63 20 74 6f 20 62 65 20 73  es p->rc to be s
43a0: 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d  et to SQLITE_NOM
43b0: 45 4d 20 61 6e 64 20 74 68 69 73 0a 2a 2a 20 72  EM and this.** r
43c0: 6f 75 74 69 6e 65 20 74 6f 20 72 65 74 75 72 6e  outine to return
43d0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
43e0: 2a 0a 2a 2a 20 4f 74 68 65 72 20 66 61 74 61 6c  *.** Other fatal
43f0: 20 65 72 72 6f 72 73 20 72 65 74 75 72 6e 20 53   errors return S
4400: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
4410: 2a 2a 20 41 66 74 65 72 20 74 68 69 73 20 72 6f  ** After this ro
4420: 75 74 69 6e 65 20 68 61 73 20 66 69 6e 69 73 68  utine has finish
4430: 65 64 2c 20 73 71 6c 69 74 65 33 56 64 62 65 46  ed, sqlite3VdbeF
4440: 69 6e 61 6c 69 7a 65 28 29 20 73 68 6f 75 6c 64  inalize() should
4450: 20 62 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63   be.** used to c
4460: 6c 65 61 6e 20 75 70 20 74 68 65 20 6d 65 73 73  lean up the mess
4470: 20 74 68 61 74 20 77 61 73 20 6c 65 66 74 20 62   that was left b
4480: 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ehind..*/.int sq
4490: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a 20  lite3VdbeExec(. 
44a0: 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20 20   Vdbe *p        
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
44c0: 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20  he VDBE */.){.  
44d0: 69 6e 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20  int pc=0;       
44e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
44f0: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
4500: 72 20 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d  r */.  Op *aOp =
4510: 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20   p->aOp;        
4520: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
4530: 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70  aOp */.  Op *pOp
4540: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4550: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f      /* Current o
4560: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  peration */.  in
4570: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
4580: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  ;        /* Valu
4590: 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20  e to return */. 
45a0: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
45b0: 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54  ->db;       /* T
45c0: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  he database */. 
45d0: 20 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f   u8 resetSchemaO
45e0: 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52  nFault = 0; /* R
45f0: 65 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65  eset schema afte
4600: 72 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f  r an error if po
4610: 73 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65  sitive */.  u8 e
4620: 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62  ncoding = ENC(db
4630: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61  );     /* The da
4640: 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20  tabase encoding 
4650: 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72  */.  int iCompar
4660: 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  e = 0;          
4670: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73  /* Result of las
4680: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65  t OP_Compare ope
4690: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  ration */.  unsi
46a0: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
46b0: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
46c0: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
46d0: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
46e0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
46f0: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4700: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4710: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30  rogressLimit = 0
4720: 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67  ;/* Invoke xProg
4730: 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53  ress() when nVmS
4740: 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73  tep reaches this
4750: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d   */.#endif.  Mem
4760: 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d   *aMem = p->aMem
4770: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20  ;       /* Copy 
4780: 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20  of p->aMem */.  
4790: 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20  Mem *pIn1 = 0;  
47a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
47b0: 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  t input operand 
47c0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d  */.  Mem *pIn2 =
47d0: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
47e0: 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65  /* 2nd input ope
47f0: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4800: 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In3 = 0;        
4810: 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75       /* 3rd inpu
4820: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4830: 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20  em *pOut = 0;   
4840: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74            /* Out
4850: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
4860: 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d   int *aPermute =
4870: 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50   0;         /* P
4880: 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f  ermutation of co
4890: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
48a0: 70 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61  pare */.  i64 la
48b0: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
48c0: 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76  stRowid;  /* Sav
48d0: 65 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ed value of the 
48e0: 6c 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49  last insert ROWI
48f0: 44 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45  D */.#ifdef VDBE
4900: 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73  _PROFILE.  u64 s
4910: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
4920: 20 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f        /* CPU clo
4930: 63 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72  ck count at star
4940: 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20  t of opcode */. 
4950: 20 69 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20   int origPc;    
4960: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
4970: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61  rogram counter a
4980: 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64  t start of opcod
4990: 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a  e */.#endif.  /*
49a0: 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20  ** INSERT STACK 
49b0: 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a  UNION HERE ***/.
49c0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61  .  assert( p->ma
49d0: 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f  gic==VDBE_MAGIC_
49e0: 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74  RUN );  /* sqlit
49f0: 65 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69  e3_step() verifi
4a00: 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c  es this */.  sql
4a10: 69 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29  ite3VdbeEnter(p)
4a20: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53  ;.  if( p->rc==S
4a30: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
4a40: 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
4a50: 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ns if a malloc()
4a60: 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74   inside a call t
4a70: 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  o sqlite3_column
4a80: 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a  _text() or.    *
4a90: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
4aa0: 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64  _text16() failed
4ab0: 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e  .  */.    goto n
4ac0: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73  o_mem;.  }.  ass
4ad0: 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  ert( p->rc==SQLI
4ae0: 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d  TE_OK || p->rc==
4af0: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20  SQLITE_BUSY );. 
4b00: 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
4b10: 65 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64  eader || p->read
4b20: 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e  Only!=0 );.  p->
4b30: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
4b40: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70    assert( p->exp
4b50: 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e  lain==0 );.  p->
4b60: 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a  pResultSet = 0;.
4b70: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
4b80: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 43  r.nBusy = 0;.  C
4b90: 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
4ba0: 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  PT;.  sqlite3Vdb
4bb0: 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a  eIOTraceSql(p);.
4bc0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4bd0: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
4be0: 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e  LBACK.  if( db->
4bf0: 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20  xProgress ){.   
4c00: 20 61 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d   assert( 0 < db-
4c10: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b  >nProgressOps );
4c20: 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69  .    nProgressLi
4c30: 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  mit = (unsigned)
4c40: 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
4c50: 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d  TE_STMTSTATUS_VM
4c60: 5f 53 54 45 50 2d 31 5d 3b 0a 20 20 20 20 69 66  _STEP-1];.    if
4c70: 28 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  ( nProgressLimit
4c80: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72  ==0 ){.      nPr
4c90: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4ca0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a  ->nProgressOps;.
4cb0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4cc0: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
4cd0: 25 3d 20 28 75 6e 73 69 67 6e 65 64 29 64 62 2d  %= (unsigned)db-
4ce0: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20  >nProgressOps;. 
4cf0: 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
4d00: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4d10: 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67  BUG.  sqlite3Beg
4d20: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
4d30: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30  ;.  if( p->pc==0
4d40: 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61    && (p->db->fla
4d50: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4d60: 4c 69 73 74 69 6e 67 29 21 3d 30 20 29 7b 0a 20  Listing)!=0 ){. 
4d70: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 72     int i;.    pr
4d80: 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67 72  intf("VDBE Progr
4d90: 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b  am Listing:\n");
4da0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4db0: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4dc0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
4dd0: 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Op; i++){.      
4de0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4df0: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61  Op(stdout, i, &a
4e00: 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  Op[i]);.    }.  
4e10: 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65  }.  sqlite3EndBe
4e20: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65  nignMalloc();.#e
4e30: 6e 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d  ndif.  for(pc=p-
4e40: 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f  >pc; rc==SQLITE_
4e50: 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61  OK; pc++){.    a
4e60: 73 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20  ssert( pc>=0 && 
4e70: 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20  pc<p->nOp );.   
4e80: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
4e90: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
4ea0: 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45  mem;.#ifdef VDBE
4eb0: 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 6f 72 69  _PROFILE.    ori
4ec0: 67 50 63 20 3d 20 70 63 3b 0a 20 20 20 20 73 74  gPc = pc;.    st
4ed0: 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74  art = sqlite3Hwt
4ee0: 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ime();.#endif.  
4ef0: 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20    nVmStep++;.   
4f00: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b   pOp = &aOp[pc];
4f10: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c  ..    /* Only al
4f20: 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53  low tracing if S
4f30: 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64  QLITE_DEBUG is d
4f40: 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
4f50: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4f60: 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72  UG.    if( p->tr
4f70: 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ace ){.      if(
4f80: 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   pc==0 ){.      
4f90: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 45    printf("VDBE E
4fa0: 78 65 63 75 74 69 6f 6e 20 54 72 61 63 65 3a 5c  xecution Trace:\
4fb0: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  n");.        sql
4fc0: 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c  ite3VdbePrintSql
4fd0: 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  (p);.      }.   
4fe0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4ff0: 69 6e 74 4f 70 28 70 2d 3e 74 72 61 63 65 2c 20  intOp(p->trace, 
5000: 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a  pc, pOp);.    }.
5010: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20  #endif.      .. 
5020: 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73     /* Check to s
5030: 65 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f  ee if we need to
5040: 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74   simulate an int
5050: 65 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e  errupt.  This on
5060: 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a  ly happens.    *
5070: 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73  * if we have a s
5080: 70 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c  pecial test buil
5090: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  d..    */.#ifdef
50a0: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
50b0: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
50c0: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29  errupt_count>0 )
50d0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
50e0: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d  interrupt_count-
50f0: 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  -;.      if( sql
5100: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
5110: 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ount==0 ){.     
5120: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
5130: 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20  rupt(db);.      
5140: 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  }.    }.#endif..
5150: 20 20 20 20 2f 2a 20 4f 6e 20 61 6e 79 20 6f 70      /* On any op
5160: 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 22 6f  code with the "o
5170: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 22 20  ut2-prerelease" 
5180: 74 61 67 2c 20 66 72 65 65 20 61 6e 79 0a 20 20  tag, free any.  
5190: 20 20 2a 2a 20 65 78 74 65 72 6e 61 6c 20 61 6c    ** external al
51a0: 6c 6f 63 61 74 69 6f 6e 73 20 6f 75 74 20 6f 66  locations out of
51b0: 20 6d 65 6d 5b 70 32 5d 20 61 6e 64 20 73 65 74   mem[p2] and set
51c0: 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 62 65 0a 20   mem[p2] to be. 
51d0: 20 20 20 2a 2a 20 61 6e 20 75 6e 64 65 66 69 6e     ** an undefin
51e0: 65 64 20 69 6e 74 65 67 65 72 2e 20 20 4f 70 63  ed integer.  Opc
51f0: 6f 64 65 73 20 77 69 6c 6c 20 65 69 74 68 65 72  odes will either
5200: 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 69 6e 74   fill in the int
5210: 65 67 65 72 0a 20 20 20 20 2a 2a 20 76 61 6c 75  eger.    ** valu
5220: 65 20 6f 72 20 63 6f 6e 76 65 72 74 20 6d 65 6d  e or convert mem
5230: 5b 70 32 5d 20 74 6f 20 61 20 64 69 66 66 65 72  [p2] to a differ
5240: 65 6e 74 20 74 79 70 65 2e 0a 20 20 20 20 2a 2f  ent type..    */
5250: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
5260: 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71 6c 69 74  ->opflags==sqlit
5270: 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
5280: 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 20 29 3b  [pOp->opcode] );
5290: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
52a0: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
52b0: 54 32 5f 50 52 45 52 45 4c 45 41 53 45 20 29 7b  T2_PRERELEASE ){
52c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
52d0: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
52e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
52f0: 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
5300: 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
5310: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
5320: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
5330: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
5340: 20 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65    VdbeMemRelease
5350: 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f  (pOut);.      pO
5360: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
5370: 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  Int;.    }..    
5380: 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69  /* Sanity checki
5390: 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72  ng on other oper
53a0: 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ands */.#ifdef S
53b0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
53c0: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
53d0: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d  s & OPFLG_IN1)!=
53e0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
53f0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
5400: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5410: 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
5420: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5430: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5440: 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20  [pOp->p1]) );.  
5450: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5460: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65  CE(pOp->p1, &aMe
5470: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20  m[pOp->p1]);.   
5480: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
5490: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
54a0: 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN2)!=0 ){.    
54b0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
54c0: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2>0 );.      ass
54d0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ert( pOp->p2<=p-
54e0: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61  >nMem );.      a
54f0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5500: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  d(&aMem[pOp->p2]
5510: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
5520: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5530: 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
5540: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5550: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5560: 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20  & OPFLG_IN3)!=0 
5570: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
5580: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
5590: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
55a0: 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
55b0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
55c0: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
55d0: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
55e0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
55f0: 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b  (pOp->p3, &aMem[
5600: 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d  pOp->p3]);.    }
5610: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5620: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
5630: 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  UT2)!=0 ){.     
5640: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5650: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5660: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
5670: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 6d 65  nMem );.      me
5680: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
5690: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
56a0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
56b0: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
56c0: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
56d0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
56e0: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
56f0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5700: 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
5710: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
5720: 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
5730: 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d  pOp->p3]);.    }
5740: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73  .#endif.  .    s
5750: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
5760: 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  de ){../********
5770: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5780: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5790: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57b0: 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f  *****.** What fo
57c0: 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69  llows is a massi
57d0: 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  ve switch statem
57e0: 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20 63  ent where each c
57f0: 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ase implements a
5800: 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73  .** separate ins
5810: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
5820: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
5830: 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74    If we follow t
5840: 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65  he usual.** inde
5850: 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69  ntation conventi
5860: 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20 73  ons, each case s
5870: 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65  hould be indente
5880: 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  d by 6 spaces.  
5890: 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61  But.** that is a
58a0: 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73   lot of wasted s
58b0: 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  pace on the left
58c0: 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65   margin.  So the
58d0: 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20   code within.** 
58e0: 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
58f0: 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20  ment will break 
5900: 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20  with convention 
5910: 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66  and be flush-lef
5920: 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69  t. Another.** bi
5930: 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c  g comment (simil
5940: 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20  ar to this one) 
5950: 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f  will mark the po
5960: 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20  int in the code 
5970: 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e  where.** we tran
5980: 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e  sition back to n
5990: 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f  ormal indentatio
59a0: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72  n..**.** The for
59b0: 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20  matting of each 
59c0: 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e  case is importan
59d0: 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65  t.  The makefile
59e0: 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67   for SQLite.** g
59f0: 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20 66  enerates two C f
5a00: 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22  iles "opcodes.h"
5a10: 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22   and "opcodes.c"
5a20: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
5a30: 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e  s.** file lookin
5a40: 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74  g for lines that
5a50: 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61 73   begin with "cas
5a60: 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63  e OP_".  The opc
5a70: 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20  odes.h files.** 
5a80: 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77  will be filled w
5a90: 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68 61  ith #defines tha
5aa0: 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e  t give unique in
5ab0: 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20  teger values to 
5ac0: 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61  each.** opcode a
5ad0: 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63  nd the opcodes.c
5ae0: 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20   file is filled 
5af0: 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66  with an array of
5b00: 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a   strings where.*
5b10: 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69 73  * each string is
5b20: 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61   the symbolic na
5b30: 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65  me for the corre
5b40: 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e  sponding opcode.
5b50: 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65    If the.** case
5b60: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f   statement is fo
5b70: 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d  llowed by a comm
5b80: 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ent of the form 
5b90: 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20  "/# same as ... 
5ba0: 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d  #/".** that comm
5bb0: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 64  ent is used to d
5bc0: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72  etermine the par
5bd0: 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66  ticular value of
5be0: 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a   the opcode..**.
5bf0: 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64  ** Other keyword
5c00: 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74  s in the comment
5c10: 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61   that follows ea
5c20: 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65 64  ch case are used
5c30: 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74   to.** construct
5c40: 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49   the OPFLG_INITI
5c50: 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61  ALIZER value tha
5c60: 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70  t initializes op
5c70: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a  codeProperty[]..
5c80: 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c  ** Keywords incl
5c90: 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69  ude: in1, in2, i
5ca0: 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72 65 6c 65  n3, out2_prerele
5cb0: 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e  ase, out2, out3.
5cc0: 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f    See.** the mko
5cd0: 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70  pcodeh.awk scrip
5ce0: 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  t for additional
5cf0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
5d00: 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f  .** Documentatio
5d10: 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63  n about VDBE opc
5d20: 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65  odes is generate
5d30: 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  d by scanning th
5d40: 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c  is file.** for l
5d50: 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e  ines of that con
5d60: 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20  tain "Opcode:". 
5d70: 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61   That line and a
5d80: 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a  ll subsequent.**
5d90: 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61   comment lines a
5da0: 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  re used in the g
5db0: 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
5dc0: 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63   opcode.html doc
5dd0: 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69  umentation.** fi
5de0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52  le..**.** SUMMAR
5df0: 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72  Y:.**.**     For
5e00: 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72  matting is impor
5e10: 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20  tant to scripts 
5e20: 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66  that scan this f
5e30: 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e  ile..**     Do n
5e40: 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20  ot deviate from 
5e50: 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73  the formatting s
5e60: 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69  tyle currently i
5e70: 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a  n use..**.******
5e80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ea0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5eb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ec0: 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63  *******/../* Opc
5ed0: 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20  ode:  Goto * P2 
5ee0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75  * * *.**.** An u
5ef0: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d  nconditional jum
5f00: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
5f10: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73  .** The next ins
5f20: 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65  truction execute
5f30: 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68  d will be .** th
5f40: 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50  e one at index P
5f50: 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  2 from the begin
5f60: 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70  ning of.** the p
5f70: 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20  rogram..*/.case 
5f80: 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20  OP_Goto: {      
5f90: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
5fa0: 2f 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  /.  pc = pOp->p2
5fb0: 20 2d 20 31 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f   - 1;..  /* Opco
5fc0: 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65  des that are use
5fd0: 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  d as the bottom 
5fe0: 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65  of a loop (OP_Ne
5ff0: 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a  xt, OP_Prev,.  *
6000: 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52  * OP_VNext, OP_R
6010: 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50  owSetNext, or OP
6020: 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c 6c  _SorterNext) all
6030: 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a   jump here upon.
6040: 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e    ** completion.
6050: 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69    Check to see i
6060: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
6070: 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20 63  upt() has been c
6080: 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66  alled.  ** or if
6090: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
60a0: 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f 20  llback needs to 
60b0: 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a  be invoked. .  *
60c0: 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64 65  *.  ** This code
60d0: 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75 72   uses unstructur
60e0: 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65 6d  ed "goto" statem
60f0: 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f  ents and does no
6100: 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20  t look clean..  
6110: 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20 6e  ** But that is n
6120: 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70 79  ot due to sloppy
6130: 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e 20   coding habits. 
6140: 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69 74  The code is writ
6150: 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77 61  ten this.  ** wa
6160: 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63  y for performanc
6170: 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76 69  e, to avoid havi
6180: 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69 6e  ng to run the in
6190: 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f 67  terrupt and prog
61a0: 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73  ress.  ** checks
61b0: 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64 65   on every opcode
61c0: 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73 71  .  This helps sq
61d0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f 20  lite3_step() to 
61e0: 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a 20  run about 1.5%. 
61f0: 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f 72   ** faster accor
6200: 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69 6e  ding to "valgrin
6210: 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72  d --tool=cachegr
6220: 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f  ind" */.check_fo
6230: 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 43  r_interrupt:.  C
6240: 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
6250: 50 54 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  PT;.#ifndef SQLI
6260: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
6270: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43  _CALLBACK.  /* C
6280: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
6290: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
62a0: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
62b0: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
62c0: 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44  umber.  ** of VD
62d0: 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e  BE ops have been
62e0: 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65   executed (eithe
62f0: 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76  r since this inv
6300: 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20  ocation of.  ** 
6310: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
6320: 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20  ) or since last 
6330: 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73  time the progres
6340: 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63  s callback was c
6350: 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20  alled)..  ** If 
6360: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
6370: 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f  lback returns no
6380: 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65  n-zero, exit the
6390: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
63a0: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74   with.  ** a ret
63b0: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
63c0: 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66  ABORT..  */.  if
63d0: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  ( db->xProgress!
63e0: 3d 30 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e  =0 && nVmStep>=n
63f0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b  ProgressLimit ){
6400: 0a 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20 20  .    int prc;.  
6410: 20 20 70 72 63 20 3d 20 64 62 2d 3e 78 50 72 6f    prc = db->xPro
6420: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
6430: 65 73 73 41 72 67 29 3b 0a 20 20 20 20 69 66 28  essArg);.    if(
6440: 20 70 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 20   prc!=0 ){.     
6450: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
6460: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f  ERRUPT;.      go
6470: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
6480: 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  lt;.    }.    if
6490: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  ( db->xProgress!
64a0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f  =0 ){.      nPro
64b0: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d  gressLimit = nVm
64c0: 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67  Step + db->nProg
64d0: 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74  ressOps - (nVmSt
64e0: 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  ep%db->nProgress
64f0: 4f 70 73 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Ops);.    }.  }.
6500: 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61  #endif.  .  brea
6510: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6520: 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20    Gosub P1 P2 * 
6530: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
6540: 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72  the current addr
6550: 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65  ess onto registe
6560: 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e  r P1.** and then
6570: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
6580: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
6590: 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20  Gosub: {        
65a0: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
65b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
65c0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
65d0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31  ->nMem );.  pIn1
65e0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
65f0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  ];.  assert( (pI
6600: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
6610: 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d  Dyn)==0 );.  mem
6620: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
6630: 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e   pIn1);.  pIn1->
6640: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6650: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70  .  pIn1->u.i = p
6660: 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  c;.  REGISTER_TR
6670: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
6680: 31 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e  1);.  pc = pOp->
6690: 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 - 1;.  break;
66a0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
66b0: 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20  Return P1 * * * 
66c0: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
66d0: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
66e0: 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61  tion after the a
66f0: 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74  ddress in regist
6700: 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P1..*/.case O
6710: 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20  P_Return: {     
6720: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
6730: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
6740: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
6750: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
6760: 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63   MEM_Int );.  pc
6770: 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e   = (int)pIn1->u.
6780: 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  i;.  break;.}../
6790: 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64  * Opcode:  Yield
67a0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
67b0: 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72  * Swap the progr
67c0: 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20  am counter with 
67d0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
67e0: 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ister P1..*/.cas
67f0: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
6800: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
6810: 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b  */.  int pcDest;
6820: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
6830: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6840: 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
6850: 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29   & MEM_Dyn)==0 )
6860: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
6870: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44  = MEM_Int;.  pcD
6880: 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d  est = (int)pIn1-
6890: 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  >u.i;.  pIn1->u.
68a0: 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54  i = pc;.  REGIST
68b0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
68c0: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20  , pIn1);.  pc = 
68d0: 70 63 44 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b  pcDest;.  break;
68e0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
68f0: 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50  HaltIfNull  P1 P
6900: 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
6910: 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20  Check the value 
6920: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
6930: 20 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74   If it is NULL t
6940: 68 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a  hen Halt using.*
6950: 2a 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20  * parameter P1, 
6960: 50 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66  P2, and P4 as if
6970: 20 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c   this were a Hal
6980: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  t instruction.  
6990: 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  If the.** value 
69a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
69b0: 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
69c0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   this routine is
69d0: 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
69e0: 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a  e OP_HaltIfNull:
69f0: 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a   {      /* in3 *
6a00: 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  /.  pIn3 = &aMem
6a10: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
6a20: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
6a30: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62  MEM_Null)==0 ) b
6a40: 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  reak;.  /* Fall 
6a50: 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
6a60: 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70  Halt */.}../* Op
6a70: 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50  code:  Halt P1 P
6a80: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45  2 * P4 *.**.** E
6a90: 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  xit immediately.
6aa0: 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f    All open curso
6ab0: 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73  rs, etc are clos
6ac0: 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61  ed.** automatica
6ad0: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  lly..**.** P1 is
6ae0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65   the result code
6af0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
6b00: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c  ite3_exec(), sql
6b10: 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a  ite3_reset(),.**
6b20: 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61   or sqlite3_fina
6b30: 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e  lize().  For a n
6b40: 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73  ormal halt, this
6b50: 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54   should be SQLIT
6b60: 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72  E_OK (0)..** For
6b70: 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20   errors, it can 
6b80: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61  be some other va
6b90: 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74  lue.  If P1!=0 t
6ba0: 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65  hen P2 will dete
6bb0: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
6bc0: 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62   or not to rollb
6bd0: 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  ack the current 
6be0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f  transaction.  Do
6bf0: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a   not rollback.**
6c00: 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e   if P2==OE_Fail.
6c10: 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   Do the rollback
6c20: 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62   if P2==OE_Rollb
6c30: 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f  ack.  If P2==OE_
6c40: 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62  Abort,.** then b
6c50: 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e  ack out all chan
6c60: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
6c70: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
6c80: 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  is execution of 
6c90: 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74  the.** VDBE, but
6ca0: 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   do not rollback
6cb0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
6cc0: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  . .**.** If P4 i
6cd0: 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20  s not null then 
6ce0: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d  it is an error m
6cf0: 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a  essage string..*
6d00: 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e  *.** There is an
6d10: 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30   implied "Halt 0
6d20: 20 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f   0 0" instructio
6d30: 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68  n inserted at th
6d40: 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a  e very end of.**
6d50: 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20   every program. 
6d60: 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20   So a jump past 
6d70: 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63  the last instruc
6d80: 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67  tion of the prog
6d90: 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61  ram.** is the sa
6da0: 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20  me as executing 
6db0: 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Halt..*/.case OP
6dc0: 5f 48 61 6c 74 3a 20 7b 0a 20 20 69 66 28 20 70  _Halt: {.  if( p
6dd0: 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f  Op->p1==SQLITE_O
6de0: 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29  K && p->pFrame )
6df0: 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68  {.    /* Halt th
6e00: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52  e sub-program. R
6e10: 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f  eturn control to
6e20: 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d   the parent fram
6e30: 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46 72  e. */.    VdbeFr
6e40: 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70 2d  ame *pFrame = p-
6e50: 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e  >pFrame;.    p->
6e60: 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d  pFrame = pFrame-
6e70: 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d  >pParent;.    p-
6e80: 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73  >nFrame--;.    s
6e90: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
6ea0: 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61  nges(db, p->nCha
6eb0: 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20 73  nge);.    pc = s
6ec0: 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52  qlite3VdbeFrameR
6ed0: 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a  estore(pFrame);.
6ee0: 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20      lastRowid = 
6ef0: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  db->lastRowid;. 
6f00: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
6f10: 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20  OE_Ignore ){.   
6f20: 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f     /* Instructio
6f30: 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f 50  n pc is the OP_P
6f40: 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f  rogram that invo
6f50: 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67  ked the sub-prog
6f60: 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75  ram .      ** cu
6f70: 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61  rrently being ha
6f80: 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20  lted. If the p2 
6f90: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
6fa0: 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20  his OP_Halt.    
6fb0: 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e    ** instruction
6fc0: 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67   is set to OE_Ig
6fd0: 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73  nore, then the s
6fe0: 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68  ub-program is th
6ff0: 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  rowing.      ** 
7000: 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74  an IGNORE except
7010: 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ion. In this cas
7020: 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64  e jump to the ad
7030: 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a  dress specified.
7040: 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20        ** as the 
7050: 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  p2 of the callin
7060: 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a  g OP_Program.  *
7070: 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d 3e  /.      pc = p->
7080: 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20 20  aOp[pc].p2-1;.  
7090: 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d    }.    aOp = p-
70a0: 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d  >aOp;.    aMem =
70b0: 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62 72   p->aMem;.    br
70c0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 72  eak;.  }..  p->r
70d0: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
70e0: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
70f0: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
7100: 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28  ->pc = pc;.  if(
7110: 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
7120: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 21    assert( p->rc!
7130: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
7140: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
7150: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
7160: 64 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70  db, "%s", pOp->p
7170: 34 2e 7a 29 3b 0a 20 20 20 20 74 65 73 74 63 61  4.z);.    testca
7180: 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  se( sqlite3Globa
7190: 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20  lConfig.xLog!=0 
71a0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c  );.    sqlite3_l
71b0: 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f  og(pOp->p1, "abo
71c0: 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d  rt at %d in [%s]
71d0: 3a 20 25 73 22 2c 20 70 63 2c 20 70 2d 3e 7a 53  : %s", pc, p->zS
71e0: 71 6c 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  ql, pOp->p4.z);.
71f0: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 72    }else if( p->r
7200: 63 20 29 7b 0a 20 20 20 20 74 65 73 74 63 61 73  c ){.    testcas
7210: 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  e( sqlite3Global
7220: 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29  Config.xLog!=0 )
7230: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f  ;.    sqlite3_lo
7240: 67 28 70 4f 70 2d 3e 70 31 2c 20 22 63 6f 6e 73  g(pOp->p1, "cons
7250: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 20 61 74  traint failed at
7260: 20 25 64 20 69 6e 20 5b 25 73 5d 22 2c 20 70 63   %d in [%s]", pc
7270: 2c 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 7d 0a  , p->zSql);.  }.
7280: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
7290: 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73  beHalt(p);.  ass
72a0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
72b0: 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  BUSY || rc==SQLI
72c0: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
72d0: 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69  ITE_ERROR );.  i
72e0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
72f0: 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20  SY ){.    p->rc 
7300: 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
7310: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
7320: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
7330: 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63  ITE_OK || (p->rc
7340: 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
7350: 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20  ONSTRAINT );.   
7360: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
7370: 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44  ITE_OK || db->nD
7380: 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c  eferredCons>0 ||
7390: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
73a0: 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72  mCons>0 );.    r
73b0: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
73c0: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
73d0: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
73e0: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
73f0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
7400: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
7410: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62  *.**.** The 32-b
7420: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
7430: 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69   P1 is written i
7440: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7450: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
7460: 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ger: {         /
7470: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7480: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  e */.  pOut->u.i
7490: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72   = pOp->p1;.  br
74a0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
74b0: 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20  e: Int64 * P2 * 
74c0: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
74d0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
74e0: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
74f0: 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74  alue..** Write t
7500: 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
7510: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
7520: 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20  ase OP_Int64: { 
7530: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7540: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7550: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7560: 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70  4.pI64!=0 );.  p
7570: 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d  Out->u.i = *pOp-
7580: 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61  >p4.pI64;.  brea
7590: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
75a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
75b0: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
75c0: 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20  de: Real * P2 * 
75d0: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
75e0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
75f0: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
7600: 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20  point value..** 
7610: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
7620: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7630: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  2..*/.case OP_Re
7640: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
7650: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46   /* same as TK_F
7660: 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65  LOAT, out2-prere
7670: 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
7680: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61  >flags = MEM_Rea
7690: 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71  l;.  assert( !sq
76a0: 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d  lite3IsNaN(*pOp-
76b0: 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20  >p4.pReal) );.  
76c0: 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e  pOut->r = *pOp->
76d0: 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61  p4.pReal;.  brea
76e0: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
76f0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20  Opcode: String8 
7700: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  * P2 * P4 *.**.*
7710: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
7720: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20   nul terminated 
7730: 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68  UTF-8 string. Th
7740: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61  is opcode is tra
7750: 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74  nsformed .** int
7760: 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62  o an OP_String b
7770: 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63  efore it is exec
7780: 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72  uted for the fir
7790: 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65  st time..*/.case
77a0: 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20   OP_String8: {  
77b0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
77c0: 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74  s TK_STRING, out
77d0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
77e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
77f0: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d  4.z!=0 );.  pOp-
7800: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
7810: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
7820: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
7830: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
7840: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7850: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
7860: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
7870: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
7880: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
7890: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
78a0: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
78b0: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
78c0: 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72  ATIC);.    if( r
78d0: 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  c==SQLITE_TOOBIG
78e0: 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b   ) goto too_big;
78f0: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
7900: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
7910: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
7920: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
7930: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
7940: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a   assert( pOut->z
7950: 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20  Malloc==pOut->z 
7960: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
7970: 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Out->flags & MEM
7980: 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74  _Dyn );.    pOut
7990: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  ->zMalloc = 0;. 
79a0: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c     pOut->flags |
79b0: 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20  = MEM_Static;.  
79c0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d    pOut->flags &=
79d0: 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69   ~MEM_Dyn;.    i
79e0: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
79f0: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
7a00: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
7a10: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
7a20: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
7a30: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
7a40: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
7a50: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
7a60: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
7a70: 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t->n;.  }.#endif
7a80: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64  .  if( pOp->p1>d
7a90: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
7aa0: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
7ab0: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
7ac0: 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c  ig;.  }.  /* Fal
7ad0: 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
7ae0: 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53   next case, OP_S
7af0: 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a  tring */.}.  ./*
7b00: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20   Opcode: String 
7b10: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
7b20: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61  ** The string va
7b30: 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68  lue P4 of length
7b40: 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73   P1 (bytes) is s
7b50: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
7b60: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7b70: 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20  _String: {      
7b80: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7b90: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
7ba0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
7bb0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
7bc0: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
7bd0: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
7be0: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
7bf0: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
7c00: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
7c10: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
7c20: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
7c30: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
7c40: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7c50: 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31   Opcode: Null P1
7c60: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
7c70: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
7c80: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
7c90: 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20    If P3 greater 
7ca0: 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c  than P2, then al
7cb0: 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c  so write.** NULL
7cc0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7cd0: 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69  3 and every regi
7ce0: 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20  ster in between 
7cf0: 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50  P2 and P3.  If P
7d00: 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61  3.** is less tha
7d10: 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20  n P2 (typically 
7d20: 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e  P3 is zero) then
7d30: 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50   only register P
7d40: 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e  2 is.** set to N
7d50: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ULL..**.** If th
7d60: 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P1 value is no
7d70: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73  n-zero, then als
7d80: 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c  o set the MEM_Cl
7d90: 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68  eared flag so th
7da0: 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65  at.** NULL value
7db0: 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61  s will not compa
7dc0: 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66  re equal even if
7dd0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
7de0: 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e  s set on.** OP_N
7df0: 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63  e or OP_Eq..*/.c
7e00: 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20  ase OP_Null: {  
7e10: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7e20: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7e30: 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20   int cnt;.  u16 
7e40: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20  nullFlag;.  cnt 
7e50: 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70  = pOp->p3-pOp->p
7e60: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
7e70: 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
7e80: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
7e90: 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d   nullFlag = pOp-
7ea0: 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c  >p1 ? (MEM_Null|
7eb0: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d  MEM_Cleared) : M
7ec0: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65  EM_Null;.  while
7ed0: 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70  ( cnt>0 ){.    p
7ee0: 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62  Out++;.    memAb
7ef0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
7f00: 4f 75 74 29 3b 0a 20 20 20 20 56 64 62 65 4d 65  Out);.    VdbeMe
7f10: 6d 52 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a  mRelease(pOut);.
7f20: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
7f30: 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20  = nullFlag;.    
7f40: 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65  cnt--;.  }.  bre
7f50: 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
7f60: 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20  e: Blob P1 P2 * 
7f70: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  P4.**.** P4 poin
7f80: 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20  ts to a blob of 
7f90: 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f  data P1 bytes lo
7fa0: 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a  ng.  Store this.
7fb0: 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  ** blob in regis
7fc0: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7fd0: 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  OP_Blob: {      
7fe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7ff0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
8000: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8010: 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f  1 <= SQLITE_MAX_
8020: 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69  LENGTH );.  sqli
8030: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
8040: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
8050: 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29  , pOp->p1, 0, 0)
8060: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
8070: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
8080: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
8090: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
80a0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  }../* Opcode: Va
80b0: 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50  riable P1 P2 * P
80c0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  4 *.**.** Transf
80d0: 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  er the values of
80e0: 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72   bound parameter
80f0: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
8100: 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  r P2.**.** If th
8110: 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  e parameter is n
8120: 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e  amed, then its n
8130: 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20 50  ame appears in P
8140: 34 20 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20  4 and P3==1..** 
8150: 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20  The P4 value is 
8160: 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
8170: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
8180: 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ame()..*/.case O
8190: 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20  P_Variable: {   
81a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
81b0: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
81c0: 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20   Mem *pVar;     
81d0: 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67    /* Value being
81e0: 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a   transferred */.
81f0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8200: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
8210: 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73  =p->nVar );.  as
8220: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d  sert( pOp->p4.z=
8230: 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d  =0 || pOp->p4.z=
8240: 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70  =p->azVar[pOp->p
8250: 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d  1-1] );.  pVar =
8260: 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70   &p->aVar[pOp->p
8270: 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71  1 - 1];.  if( sq
8280: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
8290: 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20  ig(pVar) ){.    
82a0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
82b0: 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  }.  sqlite3VdbeM
82c0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
82d0: 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74  ut, pVar, MEM_St
82e0: 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f  atic);.  UPDATE_
82f0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
8300: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
8310: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20  /* Opcode: Move 
8320: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
8330: 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75  ** Move the valu
8340: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
8350: 31 2e 2e 50 31 2b 50 33 20 6f 76 65 72 20 69 6e  1..P1+P3 over in
8360: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
8370: 50 32 2e 2e 50 32 2b 50 33 2e 20 20 52 65 67 69  P2..P2+P3.  Regi
8380: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20  sters P1..P1+P3 
8390: 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64  are.** left hold
83a0: 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20  ing a NULL.  It 
83b0: 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
83c0: 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a  register ranges.
83d0: 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 20 61 6e 64  ** P1..P1+P3 and
83e0: 20 50 32 2e 2e 50 32 2b 50 33 20 74 6f 20 6f 76   P2..P2+P3 to ov
83f0: 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erlap..*/.case O
8400: 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72  P_Move: {.  char
8410: 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20   *zMalloc;   /* 
8420: 48 6f 6c 64 69 6e 67 20 76 61 72 69 61 62 6c 65  Holding variable
8430: 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20 6d   for allocated m
8440: 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e  emory */.  int n
8450: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
8460: 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
8470: 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20  rs left to copy 
8480: 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20  */.  int p1;    
8490: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
84a0: 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a  r to copy from *
84b0: 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
84c0: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
84d0: 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a   to copy to */..
84e0: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 20 2b 20    n = pOp->p3 + 
84f0: 31 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  1;.  p1 = pOp->p
8500: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
8510: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  2;.  assert( n>0
8520: 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30   && p1>0 && p2>0
8530: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
8540: 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d  +n<=p2 || p2+n<=
8550: 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  p1 );..  pIn1 = 
8560: 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75  &aMem[p1];.  pOu
8570: 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  t = &aMem[p2];. 
8580: 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20   while( n-- ){. 
8590: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c     assert( pOut<
85a0: 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20  =&aMem[p->nMem] 
85b0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
85c0: 49 6e 31 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  In1<=&aMem[p->nM
85d0: 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em] );.    asser
85e0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
85f0: 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62  n1) );.    memAb
8600: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
8610: 4f 75 74 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f  Out);.    zMallo
8620: 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  c = pOut->zMallo
8630: 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  c;.    pOut->zMa
8640: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71  lloc = 0;.    sq
8650: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
8660: 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69  (pOut, pIn1);.#i
8670: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
8680: 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e  G.    if( pOut->
8690: 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65  pScopyFrom>=&aMe
86a0: 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70  m[p1] && pOut->p
86b0: 53 63 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b  ScopyFrom<&aMem[
86c0: 70 31 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20  p1+pOp->p3] ){. 
86d0: 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70       pOut->pScop
86e0: 79 46 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f  yFrom += p1 - pO
86f0: 70 2d 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e  p->p2;.    }.#en
8700: 64 69 66 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d  dif.    pIn1->zM
8710: 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b  alloc = zMalloc;
8720: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
8730: 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b  ACE(p2++, pOut);
8740: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20  .    pIn1++;.   
8750: 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pOut++;.  }.  b
8760: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8770: 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50  de: Copy P1 P2 P
8780: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  3 * *.**.** Make
8790: 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73   a copy of regis
87a0: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69  ters P1..P1+P3 i
87b0: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
87c0: 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54  ..P2+P3..**.** T
87d0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
87e0: 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70  makes a deep cop
87f0: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
8800: 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20   A duplicate.** 
8810: 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73  is made of any s
8820: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f  tring or blob co
8830: 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73  nstant.  See als
8840: 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63  o OP_SCopy..*/.c
8850: 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20  ase OP_Copy: {. 
8860: 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70   int n;..  n = p
8870: 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d  Op->p3;.  pIn1 =
8880: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
8890: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
88a0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
88b0: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
88c0: 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a  ;.  while( 1 ){.
88d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
88e0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
88f0: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
8900: 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65  hem);.    Deephe
8910: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
8920: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
8930: 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53  BUG.    pOut->pS
8940: 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65  copyFrom = 0;.#e
8950: 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45  ndif.    REGISTE
8960: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
8970: 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29  pOp->p3-n, pOut)
8980: 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d  ;.    if( (n--)=
8990: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
89a0: 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31  pOut++;.    pIn1
89b0: 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
89c0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
89d0: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
89e0: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
89f0: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
8a00: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
8a10: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
8a20: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
8a30: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
8a40: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
8a50: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
8a60: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
8a70: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
8a80: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
8a90: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
8aa0: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
8ab0: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
8ac0: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
8ad0: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
8ae0: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
8af0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
8b00: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
8b10: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
8b20: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
8b30: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
8b40: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
8b50: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
8b60: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
8b70: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
8b80: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
8b90: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
8ba0: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
8bb0: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
8bc0: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
8bd0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
8be0: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
8bf0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
8c00: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
8c10: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
8c20: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
8c30: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
8c40: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
8c50: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
8c60: 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  hem);.#ifdef SQL
8c70: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
8c80: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
8c90: 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f  ==0 ) pOut->pSco
8ca0: 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23  pyFrom = pIn1;.#
8cb0: 65 6e 64 69 66 0a 20 20 52 45 47 49 53 54 45 52  endif.  REGISTER
8cc0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
8cd0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
8ce0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
8cf0: 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20  sultRow P1 P2 * 
8d00: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  * *.**.** The re
8d10: 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75  gisters P1 throu
8d20: 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61  gh P1+P2-1 conta
8d30: 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  in a single row 
8d40: 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54  of.** results. T
8d50: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65  his opcode cause
8d60: 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  s the sqlite3_st
8d70: 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72  ep() call to ter
8d80: 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61  minate.** with a
8d90: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74  n SQLITE_ROW ret
8da0: 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20  urn code and it 
8db0: 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69  sets up the sqli
8dc0: 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75  te3_stmt.** stru
8dd0: 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65  cture to provide
8de0: 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 74   access to the t
8df0: 6f 70 20 50 31 20 76 61 6c 75 65 73 20 61 73 20  op P1 values as 
8e00: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f  the result.** ro
8e10: 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  w..*/.case OP_Re
8e20: 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d  sultRow: {.  Mem
8e30: 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b   *pMem;.  int i;
8e40: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52  .  assert( p->nR
8e50: 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70  esColumn==pOp->p
8e60: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
8e70: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
8e80: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f  sert( pOp->p1+pO
8e90: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  p->p2<=p->nMem+1
8ea0: 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69   );..  /* If thi
8eb0: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
8ec0: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
8ed0: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
8ee0: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
8ef0: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
8f00: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
8f10: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
8f20: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
8f30: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
8f40: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
8f50: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
8f60: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
8f70: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
8f80: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
8f90: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
8fa0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
8fb0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
8fc0: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
8fd0: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
8fe0: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
8ff0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
9000: 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54   /* If the SQLIT
9010: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67  E_CountRows flag
9020: 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74   is set in sqlit
9030: 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  e3.flags mask, t
9040: 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74  hen .  ** DML st
9050: 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20  atements invoke 
9060: 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72  this opcode to r
9070: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
9080: 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d   of rows .  ** m
9090: 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75  odified to the u
90a0: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65  ser. This is the
90b0: 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61   only way that a
90c0: 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70   VM that.  ** op
90d0: 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ens a statement 
90e0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
90f0: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
9100: 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  de..  **.  ** In
9110: 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75   case this is su
9120: 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20  ch a statement, 
9130: 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d  close any statem
9140: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
9150: 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74    ** opened by t
9160: 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65  his VM before re
9170: 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20  turning control 
9180: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
9190: 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73  s is to.  ** ens
91a0: 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65  ure that stateme
91b0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
91c0: 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65  are always neste
91d0: 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69  d, not overlappi
91e0: 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  ng..  ** If the 
91f0: 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74  open statement-t
9200: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
9210: 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74  t closed here, t
9220: 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a  hen the user.  *
9230: 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68  * may step anoth
9240: 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73  er VM that opens
9250: 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65   its own stateme
9260: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
9270: 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65  This.  ** may le
9280: 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e  ad to overlappin
9290: 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  g statement tran
92a0: 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  sactions..  **. 
92b0: 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e   ** The statemen
92c0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
92d0: 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76   never a top-lev
92e0: 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  el transaction. 
92f0: 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20   Hence.  ** the 
9300: 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c  RELEASE call bel
9310: 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  ow can never fai
9320: 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  l..  */.  assert
9330: 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
9340: 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26  =0 || db->flags&
9350: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
9360: 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
9370: 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65  e3VdbeCloseState
9380: 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e  ment(p, SAVEPOIN
9390: 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66  T_RELEASE);.  if
93a0: 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
93b0: 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72  TE_OK) ){.    br
93c0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
93d0: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
93e0: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
93f0: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
9400: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
9410: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
9420: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
9430: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
9440: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
9450: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
9460: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
9470: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
9480: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
9490: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
94a0: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
94b0: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
94c0: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
94d0: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
94e0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
94f0: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
9500: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
9510: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
9520: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
9530: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
9540: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
9550: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
9560: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
9570: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
9580: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
9590: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
95a0: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
95b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
95c0: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
95d0: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c  Mem[i]);.    sql
95e0: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
95f0: 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  Type(&pMem[i]);.
9600: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
9610: 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70  CE(pOp->p1+i, &p
9620: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69  Mem[i]);.  }.  i
9630: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
9640: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
9650: 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20  m;..  /* Return 
9660: 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a  SQLITE_ROW.  */.
9670: 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31    p->pc = pc + 1
9680: 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
9690: 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  ROW;.  goto vdbe
96a0: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
96b0: 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31  pcode: Concat P1
96c0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
96d0: 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e   Add the text in
96e0: 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74   register P1 ont
96f0: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
9700: 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69   text in.** regi
9710: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
9720: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
9730: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
9740: 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31  If either the P1
9750: 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20   or P2 text are 
9760: 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
9770: 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a  NULL in P3..**.*
9780: 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50  *   P3 = P2 || P
9790: 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  1.**.** It is il
97a0: 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64  legal for P1 and
97b0: 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61   P3 to be the sa
97c0: 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d  me register. Som
97d0: 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33  etimes,.** if P3
97e0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67   is the same reg
97f0: 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65  ister as P2, the
9800: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
9810: 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76  is able.** to av
9820: 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a  oid a memcpy()..
9830: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61  */.case OP_Conca
9840: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
9850: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e  * same as TK_CON
9860: 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  CAT, in1, in2, o
9870: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ut3 */.  i64 nBy
9880: 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  te;..  pIn1 = &a
9890: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
98a0: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
98b0: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
98c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
98d0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d    assert( pIn1!=
98e0: 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70  pOut );.  if( (p
98f0: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
9900: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
9910: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
9920: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
9930: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
9940: 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78  ak;.  }.  if( Ex
9950: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c  pandBlob(pIn1) |
9960: 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  | ExpandBlob(pIn
9970: 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  2) ) goto no_mem
9980: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
9990: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
99a0: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c   Stringify(pIn2,
99b0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42   encoding);.  nB
99c0: 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20  yte = pIn1->n + 
99d0: 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e  pIn2->n;.  if( n
99e0: 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
99f0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
9a00: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
9a10: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
9a20: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
9a30: 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20  Out, MEM_Str);. 
9a40: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
9a50: 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
9a60: 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74  nt)nByte+2, pOut
9a70: 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67  ==pIn2) ){.    g
9a80: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
9a90: 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32    if( pOut!=pIn2
9aa0: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
9ab0: 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c  Out->z, pIn2->z,
9ac0: 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20   pIn2->n);.  }. 
9ad0: 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a   memcpy(&pOut->z
9ae0: 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d  [pIn2->n], pIn1-
9af0: 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20  >z, pIn1->n);.  
9b00: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d  pOut->z[nByte] =
9b10: 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42   0;.  pOut->z[nB
9b20: 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f  yte+1] = 0;.  pO
9b30: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
9b40: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e  _Term;.  pOut->n
9b50: 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
9b60: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
9b70: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
9b80: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
9b90: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
9ba0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50  /* Opcode: Add P
9bb0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
9bc0: 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20  * Add the value 
9bd0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
9be0: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
9bf0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
9c00: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
9c10: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
9c20: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
9c30: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
9c40: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9c50: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9c60: 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20   Multiply P1 P2 
9c70: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20  P3 * *.**.**.** 
9c80: 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c  Multiply the val
9c90: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9ca0: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
9cb0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9cc0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9cd0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9ce0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
9cf0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
9d00: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
9d10: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
9d20: 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20  de: Subtract P1 
9d30: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
9d40: 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c  Subtract the val
9d50: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9d60: 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65  1 from the value
9d70: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
9d80: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
9d90: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
9da0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
9db0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
9dc0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
9dd0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
9de0: 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20  code: Divide P1 
9df0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
9e00: 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65  Divide the value
9e10: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
9e20: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
9e30: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
9e40: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9e50: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9e60: 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49  P3 (P3=P2/P1). I
9e70: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a  f the value in .
9e80: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69  ** register P1 i
9e90: 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  s zero, then the
9ea0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9eb0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
9ec0: 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
9ed0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9ee0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
9ef0: 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20  Remainder P1 P2 
9f00: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P3 * *.**.** Com
9f10: 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64  pute the remaind
9f20: 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72  er after integer
9f30: 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74 68 65   division of the
9f40: 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67   value in.** reg
9f50: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
9f60: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9f70: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
9f80: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50 33 2e  he result in P3.
9f90: 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75   .** If the valu
9fa0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9fb0: 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73   is zero the res
9fc0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20  ult is NULL..** 
9fd0: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
9fe0: 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  d is NULL, the r
9ff0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
a000: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20  /.case OP_Add:  
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a020: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50   /* same as TK_P
a030: 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  LUS, in1, in2, o
a040: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
a050: 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20 20  ubtract:        
a060: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
a070: 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20   TK_MINUS, in1, 
a080: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
a090: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
a0a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
a0b0: 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20  ame as TK_STAR, 
a0c0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
a0d0: 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65  /.case OP_Divide
a0e0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
a0f0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
a100: 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  LASH, in1, in2, 
a110: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
a120: 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20  Remainder: {    
a130: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
a140: 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69  s TK_REM, in1, i
a150: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68  n2, out3 */.  ch
a160: 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a  ar bIntint;   /*
a170: 20 53 74 61 72 74 65 64 20 6f 75 74 20 61 73 20   Started out as 
a180: 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72  two integer oper
a190: 61 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 66 6c  ands */.  int fl
a1a0: 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d  ags;      /* Com
a1b0: 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67  bined MEM_* flag
a1c0: 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75  s from both inpu
a1d0: 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20  ts */.  i64 iA; 
a1e0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
a1f0: 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  er value of left
a200: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
a210: 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iB;         /*
a220: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
a230: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
a240: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20  */.  double rA; 
a250: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
a260: 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  ue of left opera
a270: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
a280: 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  B;      /* Real 
a290: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
a2a0: 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e  perand */..  pIn
a2b0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a2c0: 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72  1];.  applyNumer
a2d0: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 29  icAffinity(pIn1)
a2e0: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
a2f0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 70  [pOp->p2];.  app
a300: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
a310: 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20  y(pIn2);.  pOut 
a320: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
a330: 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31  ;.  flags = pIn1
a340: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
a350: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
a360: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
a370: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
a380: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a390: 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  ull;.  if( (pIn1
a3a0: 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32 2d 3e  ->flags & pIn2->
a3b0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
a3c0: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  ==MEM_Int ){.   
a3d0: 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b   iA = pIn1->u.i;
a3e0: 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e  .    iB = pIn2->
a3f0: 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74  u.i;.    bIntint
a400: 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63 68   = 1;.    switch
a410: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
a420: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
a430: 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71  dd:       if( sq
a440: 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69  lite3AddInt64(&i
a450: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
a460: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
a470: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
a480: 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74  ract:  if( sqlit
a490: 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69  e3SubInt64(&iB,i
a4a0: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
a4b0: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
a4c0: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
a4d0: 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d  y:  if( sqlite3M
a4e0: 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ulInt64(&iB,iA) 
a4f0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
a500: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a510: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
a520: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
a530: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
a540: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
a550: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
a560: 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d  iA==-1 && iB==SM
a570: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67  ALLEST_INT64 ) g
a580: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20  oto fp_math;.   
a590: 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20       iB /= iA;. 
a5a0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a5b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
a5c0: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
a5d0: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
a5e0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a5f0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
a600: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
a610: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
a620: 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20  iB %= iA;.      
a630: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
a640: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
a650: 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d  >u.i = iB;.    M
a660: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a670: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
a680: 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69  }else{.    bInti
a690: 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a  nt = 0;.fp_math:
a6a0: 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65  .    rA = sqlite
a6b0: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
a6c0: 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73  In1);.    rB = s
a6d0: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
a6e0: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73  lue(pIn2);.    s
a6f0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
a700: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
a710: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
a720: 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20   rB += rA;      
a730: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a740: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
a750: 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20     rB -= rA;    
a760: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a770: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
a780: 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20  :    rB *= rA;  
a790: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a7a0: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
a7b0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28  : {.        /* (
a7c0: 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65  double)0 In case
a7d0: 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   of SQLITE_OMIT_
a7e0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e  FLOATING_POINT..
a7f0: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
a800: 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29   rA==(double)0 )
a810: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
a820: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
a830: 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72  .        rB /= r
a840: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
a850: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
a860: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
a870: 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b     iA = (i64)rA;
a880: 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69  .        iB = (i
a890: 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69  64)rB;.        i
a8a0: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
a8b0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a8c0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
a8d0: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
a8e0: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
a8f0: 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42  rB = (double)(iB
a900: 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20   % iA);.        
a910: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
a920: 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49     }.#ifdef SQLI
a930: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
a940: 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d  _POINT.    pOut-
a950: 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d  >u.i = rB;.    M
a960: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a970: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65  ut, MEM_Int);.#e
a980: 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69  lse.    if( sqli
a990: 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a  te3IsNaN(rB) ){.
a9a0: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
a9b0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
a9c0: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
a9d0: 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20  pOut->r = rB;.  
a9e0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
a9f0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29  (pOut, MEM_Real)
aa00: 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73  ;.    if( (flags
aa10: 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
aa20: 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20  && !bIntint ){. 
aa30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
aa40: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
aa50: 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  pOut);.    }.#en
aa60: 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
aa70: 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  ..arithmetic_res
aa80: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73  ult_is_null:.  s
aa90: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
aaa0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72  Null(pOut);.  br
aab0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
aac0: 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20  e: CollSeq P1 * 
aad0: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  * P4.**.** P4 is
aae0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
aaf0: 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20  CollSeq struct. 
ab00: 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c  If the next call
ab10: 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74   to a user funct
ab20: 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67  ion.** or aggreg
ab30: 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65  ate calls sqlite
ab40: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
ab50: 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f  ), this collatio
ab60: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a  n sequence will.
ab70: 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20  ** be returned. 
ab80: 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
ab90: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e  the built-in min
aba0: 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75  (), max() and nu
abb0: 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69  llif().** functi
abc0: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ons..**.** If P1
abd0: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
abe0: 65 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73  en it is a regis
abf0: 74 65 72 20 74 68 61 74 20 61 20 73 75 62 73 65  ter that a subse
ac00: 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a  quent min() or.*
ac10: 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  * max() aggregat
ac20: 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20  e will set to 1 
ac30: 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  if the current r
ac40: 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69  ow is not the mi
ac50: 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69  nimum or.** maxi
ac60: 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67  mum.  The P1 reg
ac70: 69 73 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c  ister is initial
ac80: 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68 69  ized to 0 by thi
ac90: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
aca0: 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
acb0: 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69  ce used by the i
acc0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
acd0: 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f   the aforementio
ace0: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ned functions.**
acf0: 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65   to retrieve the
ad00: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
ad10: 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20  nce set by this 
ad20: 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76  opcode is not av
ad30: 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69  ailable.** publi
ad40: 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65  cly, only to use
ad50: 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69  r functions defi
ad60: 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a  ned in func.c..*
ad70: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
ad80: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
ad90: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
ada0: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
adb0: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
adc0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
add0: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
ade0: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
adf0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
ae00: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31  ode: Function P1
ae10: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
ae20: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
ae30: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
ae40: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
ae50: 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75  Function structu
ae60: 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e  re that.** defin
ae70: 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29  es the function)
ae80: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
ae90: 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  ts taken from re
aea0: 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a  gister P2 and.**
aeb0: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
aec0: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
aed0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
aee0: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
aef0: 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  3..** Register P
af00: 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e  3 must not be on
af10: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
af20: 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20  n inputs..**.** 
af30: 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62  P1 is a 32-bit b
af40: 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e  itmask indicatin
af50: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
af60: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74   each argument t
af70: 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69  o the .** functi
af80: 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65  on was determine
af90: 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74  d to be constant
afa0: 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65   at compile time
afb0: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a  . If the first.*
afc0: 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63  * argument was c
afd0: 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74  onstant then bit
afe0: 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e   0 of P1 is set.
aff0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
b000: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
b010: 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20  ether meta data 
b020: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
b030: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
b040: 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74  argument using t
b050: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65  he.** sqlite3_se
b060: 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20  t_auxdata() API 
b070: 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65  may be safely re
b080: 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65  tained until the
b090: 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74   next.** invocat
b0a0: 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  ion of this opco
b0b0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
b0c0: 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20  so: AggStep and 
b0d0: 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65  AggFinal.*/.case
b0e0: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a   OP_Function: {.
b0f0: 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
b100: 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pArg;.  sqlite3_
b110: 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
b120: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
b130: 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  pVal;.  int n;..
b140: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
b150: 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
b160: 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
b170: 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
b180: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
b190: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
b1a0: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20  >nMem );.  pOut 
b1b0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
b1c0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
b1d0: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
b1e0: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
b1f0: 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
b200: 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d  pOp->p2+n<=p->nM
b210: 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  em+1) );.  asser
b220: 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
b230: 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
b240: 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41  Op->p2+n );.  pA
b250: 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rg = &aMem[pOp->
b260: 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p2];.  for(i=0; 
b270: 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b  i<n; i++, pArg++
b280: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
b290: 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67 29 20  emIsValid(pArg) 
b2a0: 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  );.    apVal[i] 
b2b0: 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70  = pArg;.    Deep
b2c0: 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29  hemeralize(pArg)
b2d0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
b2e0: 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 41  eMemStoreType(pA
b2f0: 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  rg);.    REGISTE
b300: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
b310: 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20  i, pArg);.  }.. 
b320: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
b330: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
b340: 20 29 3b 0a 20 20 63 74 78 2e 70 46 75 6e 63 20   );.  ctx.pFunc 
b350: 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
b360: 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d  .  ctx.s.flags =
b370: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78   MEM_Null;.  ctx
b380: 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74  .s.db = db;.  ct
b390: 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  x.s.xDel = 0;.  
b3a0: 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20  ctx.s.zMalloc = 
b3b0: 30 3b 0a 20 20 63 74 78 2e 69 4f 70 20 3d 20 70  0;.  ctx.iOp = p
b3c0: 63 3b 0a 20 20 63 74 78 2e 70 56 64 62 65 20 3d  c;.  ctx.pVdbe =
b3d0: 20 70 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75   p;..  /* The ou
b3e0: 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c  tput cell may al
b3f0: 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75 66  ready have a buf
b400: 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d  fer allocated. M
b410: 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69  ove.  ** the poi
b420: 6e 74 65 72 20 74 6f 20 63 74 78 2e 73 20 73 6f  nter to ctx.s so
b430: 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65   in case the use
b440: 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75  r-function can u
b450: 73 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72 65  se.  ** the alre
b460: 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75  ady allocated bu
b470: 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20  ffer instead of 
b480: 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65 77  allocating a new
b490: 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c   one..  */.  sql
b4a0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
b4b0: 26 63 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20  &ctx.s, pOut);. 
b4c0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
b4d0: 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c  &ctx.s, MEM_Null
b4e0: 29 3b 0a 0a 20 20 63 74 78 2e 69 73 45 72 72 6f  );..  ctx.isErro
b4f0: 72 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  r = 0;.  if( ctx
b500: 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20  .pFunc->flags & 
b510: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
b520: 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
b530: 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20  rt( pOp>aOp );. 
b540: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
b550: 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  1].p4type==P4_CO
b560: 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73  LLSEQ );.    ass
b570: 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
b580: 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
b590: 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c  );.    ctx.pColl
b5a0: 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43   = pOp[-1].p4.pC
b5b0: 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c  oll;.  }.  db->l
b5c0: 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
b5d0: 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46  owid;.  (*ctx.pF
b5e0: 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78  unc->xFunc)(&ctx
b5f0: 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20  , n, apVal); /* 
b600: 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
b610: 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69  30 */.  lastRowi
b620: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
b630: 64 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20  d;..  /* If any 
b640: 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 20 66  auxiliary data f
b650: 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 62 65  unctions have be
b660: 65 6e 20 63 61 6c 6c 65 64 20 62 79 20 74 68 69  en called by thi
b670: 73 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c  s user function,
b680: 0a 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  .  ** immediatel
b690: 79 20 63 61 6c 6c 20 74 68 65 20 64 65 73 74 72  y call the destr
b6a0: 75 63 74 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f  uctor for any no
b6b0: 6e 2d 73 74 61 74 69 63 20 76 61 6c 75 65 73 2e  n-static values.
b6c0: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
b6d0: 64 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61  dbeDeleteAuxData
b6e0: 28 70 2c 20 70 63 2c 20 70 4f 70 2d 3e 70 31 29  (p, pc, pOp->p1)
b6f0: 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  ;..  if( db->mal
b700: 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20  locFailed ){.   
b710: 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68 20   /* Even though 
b720: 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20 66  a malloc() has f
b730: 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c 65  ailed, the imple
b740: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
b750: 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75 6e  .    ** user fun
b760: 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63  ction may have c
b770: 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65 33  alled an sqlite3
b780: 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66 75  _result_XXX() fu
b790: 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f  nction.    ** to
b7a0: 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65 2e   return a value.
b7b0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
b7c0: 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e 79  all releases any
b7d0: 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20 2a   resources.    *
b7e0: 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  * associated wit
b7f0: 68 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e 0a  h such a value..
b800: 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
b810: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
b820: 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f  (&ctx.s);.    go
b830: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
b840: 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63    /* If the func
b850: 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e  tion returned an
b860: 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e   error, throw an
b870: 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
b880: 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20  if( ctx.isError 
b890: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
b8a0: 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
b8b0: 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
b8c0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
b8d0: 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20  t(&ctx.s));.    
b8e0: 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
b8f0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
b900: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
b910: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f  he function into
b920: 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a   register P3 */.
b930: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
b940: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 63 74 78  ngeEncoding(&ctx
b950: 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  .s, encoding);. 
b960: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
b970: 6f 76 65 28 70 4f 75 74 2c 20 26 63 74 78 2e 73  ove(pOut, &ctx.s
b980: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
b990: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4f  VdbeMemTooBig(pO
b9a0: 75 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ut) ){.    goto 
b9b0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 23 69  too_big;.  }..#i
b9c0: 66 20 30 0a 20 20 2f 2a 20 54 68 65 20 61 70 70  f 0.  /* The app
b9d0: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
b9e0: 6e 20 68 61 73 20 64 6f 6e 65 20 73 6f 6d 65 74  n has done somet
b9f0: 68 69 6e 67 20 74 68 61 74 20 61 73 20 63 61 75  hing that as cau
ba00: 73 65 64 20 74 68 69 73 0a 20 20 2a 2a 20 73 74  sed this.  ** st
ba10: 61 74 65 6d 65 6e 74 20 74 6f 20 65 78 70 69 72  atement to expir
ba20: 65 2e 20 20 28 50 65 72 68 61 70 73 20 74 68 65  e.  (Perhaps the
ba30: 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 65 64   function called
ba40: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a   sqlite3_exec().
ba50: 20 20 2a 2a 20 77 69 74 68 20 61 20 43 52 45 41    ** with a CREA
ba60: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
ba70: 6e 74 2e 29 0a 20 20 2a 2f 0a 20 20 69 66 28 20  nt.).  */.  if( 
ba80: 70 2d 3e 65 78 70 69 72 65 64 20 29 20 72 63 20  p->expired ) rc 
ba90: 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a  = SQLITE_ABORT;.
baa0: 23 65 6e 64 69 66 0a 0a 20 20 52 45 47 49 53 54  #endif..  REGIST
bab0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
bac0: 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
bad0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
bae0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
baf0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
bb00: 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
bb10: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
bb20: 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20  bit-wise AND of 
bb30: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
bb40: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
bb50: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
bb60: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
bb70: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
bb80: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
bb90: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
bba0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
bbb0: 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20  pcode: BitOr P1 
bbc0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
bbd0: 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73  Take the bit-wis
bbe0: 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75  e OR of the valu
bbf0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
bc00: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
bc10: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
bc20: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
bc30: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
bc40: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
bc50: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
bc60: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
bc70: 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50  hiftLeft P1 P2 P
bc80: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66  3 * *.**.** Shif
bc90: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
bca0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
bcb0: 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62  P2 to the left b
bcc0: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
bcd0: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
bce0: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
bcf0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
bd00: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
bd10: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
bd20: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
bd30: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
bd40: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
bd50: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
bd60: 65 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31  e: ShiftRight P1
bd70: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
bd80: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
bd90: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
bda0: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72  ster P2 to the r
bdb0: 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  ight by the.** n
bdc0: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
bdd0: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
bde0: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
bdf0: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
be00: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
be10: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
be20: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
be30: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
be40: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  t is NULL..*/.ca
be50: 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20  se OP_BitAnd:   
be60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
be70: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41   same as TK_BITA
be80: 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
be90: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  t3 */.case OP_Bi
bea0: 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20  tOr:            
beb0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
bec0: 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20   TK_BITOR, in1, 
bed0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
bee0: 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20  e OP_ShiftLeft: 
bef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bf00: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46  same as TK_LSHIF
bf10: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
bf20: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69  3 */.case OP_Shi
bf30: 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20  ftRight: {      
bf40: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
bf50: 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20  TK_RSHIFT, in1, 
bf60: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
bf70: 36 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b  64 iA;.  u64 uA;
bf80: 0a 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20  .  i64 iB;.  u8 
bf90: 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  op;..  pIn1 = &a
bfa0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
bfb0: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
bfc0: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
bfd0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
bfe0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
bff0: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
c000: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
c010: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c020: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
c030: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
c040: 20 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64    iA = sqlite3Vd
c050: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
c060: 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33  ;.  iB = sqlite3
c070: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
c080: 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e  1);.  op = pOp->
c090: 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70  opcode;.  if( op
c0a0: 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20  ==OP_BitAnd ){. 
c0b0: 20 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d     iA &= iB;.  }
c0c0: 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f  else if( op==OP_
c0d0: 42 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20  BitOr ){.    iA 
c0e0: 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  |= iB;.  }else i
c0f0: 66 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20  f( iB!=0 ){.    
c100: 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53  assert( op==OP_S
c110: 68 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d  hiftRight || op=
c120: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b  =OP_ShiftLeft );
c130: 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66  ..    /* If shif
c140: 74 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69  ting by a negati
c150: 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74  ve amount, shift
c160: 20 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69   in the other di
c170: 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  rection */.    i
c180: 66 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20  f( iB<0 ){.     
c190: 20 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66   assert( OP_Shif
c1a0: 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74  tRight==OP_Shift
c1b0: 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20  Left+1 );.      
c1c0: 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c  op = 2*OP_ShiftL
c1d0: 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20  eft + 1 - op;.  
c1e0: 20 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34      iB = iB>(-64
c1f0: 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20  ) ? -iB : 64;.  
c200: 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e    }..    if( iB>
c210: 3d 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20  =64 ){.      iA 
c220: 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d  = (iA>=0 || op==
c230: 4f 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20  OP_ShiftLeft) ? 
c240: 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73  0 : -1;.    }els
c250: 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28  e{.      memcpy(
c260: 26 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66  &uA, &iA, sizeof
c270: 28 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28  (uA));.      if(
c280: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
c290: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20  t ){.        uA 
c2a0: 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65  <<= iB;.      }e
c2b0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20  lse{.        uA 
c2c0: 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20  >>= iB;.        
c2d0: 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f  /* Sign-extend o
c2e0: 6e 20 61 20 72 69 67 68 74 20 73 68 69 66 74 20  n a right shift 
c2f0: 6f 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75  of a negative nu
c300: 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  mber */.        
c310: 69 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d  if( iA<0 ) uA |=
c320: 20 28 28 28 28 75 36 34 29 30 78 66 66 66 66 66   ((((u64)0xfffff
c330: 66 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66  fff)<<32)|0xffff
c340: 66 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29  ffff) << (64-iB)
c350: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
c360: 6d 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c  memcpy(&iA, &uA,
c370: 20 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20   sizeof(iA));.  
c380: 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e    }.  }.  pOut->
c390: 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53  u.i = iA;.  MemS
c3a0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
c3b0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
c3c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
c3d0: 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20  : AddImm  P1 P2 
c3e0: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64  * * *.** .** Add
c3f0: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
c400: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
c410: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
c420: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
c430: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
c440: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
c450: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
c460: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
c470: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
c480: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
c490: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
c4a0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
c4b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
c4c0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
c4d0: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71  e(p, pIn1);.  sq
c4e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
c4f0: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
c500: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
c510: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
c520: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
c530: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
c540: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
c550: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c560: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
c570: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
c580: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
c590: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
c5a0: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
c5b0: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
c5c0: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
c5d0: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
c5e0: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
c5f0: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
c600: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
c610: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
c620: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
c630: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
c640: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
c650: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
c660: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
c670: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
c680: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
c690: 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  n1, SQLITE_AFF_N
c6a0: 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67  UMERIC, encoding
c6b0: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
c6c0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
c6d0: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70  ==0 ){.    if( p
c6e0: 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20  Op->p2==0 ){.   
c6f0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d     rc = SQLITE_M
c700: 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 67  ISMATCH;.      g
c710: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
c720: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
c730: 65 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  e{.      pc = pO
c740: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d  p->p2 - 1;.    }
c750: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4d 65  .  }else{.    Me
c760: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e  mSetTypeFlag(pIn
c770: 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  1, MEM_Int);.  }
c780: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
c790: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
c7a0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
c7b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
c7c0: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
c7d0: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
c7e0: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
c7f0: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
c800: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
c810: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
c820: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
c830: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
c840: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
c850: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
c860: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
c870: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
c880: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
c890: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
c8a0: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
c8b0: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
c8c0: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
c8d0: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
c8e0: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
c8f0: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
c900: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
c910: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
c920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c930: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
c940: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
c950: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
c960: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
c970: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c980: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
c990: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
c9a0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
c9b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
c9c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65  ./* Opcode: ToTe
c9d0: 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  xt P1 * * * *.**
c9e0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
c9f0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ca00: 50 31 20 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a  P1 to be text..*
ca10: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
ca20: 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65  s numeric, conve
ca30: 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e  rt it to a strin
ca40: 67 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  g using the.** e
ca50: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 70 72 69  quivalent of pri
ca60: 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c  ntf().  Blob val
ca70: 75 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67 65  ues are unchange
ca80: 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74  d and.** are aft
ca90: 65 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20 69  erwards simply i
caa0: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 74 65  nterpreted as te
cab0: 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  xt..**.** A NULL
cac0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
cad0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
cae0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
caf0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
cb00: 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20   OP_ToText: {   
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cb20: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
cb30: 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  TEXT, in1 */.  p
cb40: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
cb50: 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p1];.  memAbout
cb60: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
cb70: 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  );.  if( pIn1->f
cb80: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
cb90: 29 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65 72  ) break;.  asser
cba0: 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d  t( MEM_Str==(MEM
cbb0: 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70  _Blob>>3) );.  p
cbc0: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70  In1->flags |= (p
cbd0: 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42  In1->flags&MEM_B
cbe0: 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79  lob)>>3;.  apply
cbf0: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
cc00: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
cc10: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20  encoding);.  rc 
cc20: 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
cc30: 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1);.  assert( pI
cc40: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
cc50: 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  Str || db->mallo
cc60: 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e  cFailed );.  pIn
cc70: 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  1->flags &= ~(ME
cc80: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
cc90: 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f  EM_Blob|MEM_Zero
cca0: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
ccb0: 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
ccc0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
ccd0: 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31  pcode: ToBlob P1
cce0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
ccf0: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
cd00: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
cd10: 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49   be a BLOB..** I
cd20: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e  f the value is n
cd30: 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20  umeric, convert 
cd40: 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 66  it to a string f
cd50: 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73  irst..** Strings
cd60: 20 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69 6e   are simply rein
cd70: 74 65 72 70 72 65 74 65 64 20 61 73 20 62 6c 6f  terpreted as blo
cd80: 62 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e 67  bs with no chang
cd90: 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64 65  e.** to the unde
cda0: 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a  rlying data..**.
cdb0: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
cdc0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
cdd0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
cde0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
cdf0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42  ..*/.case OP_ToB
ce00: 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  lob: {          
ce10: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ce20: 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69  as TK_TO_BLOB, i
ce30: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
ce40: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
ce50: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
ce60: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72   & MEM_Null ) br
ce70: 65 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  eak;.  if( (pIn1
ce80: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
ce90: 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70  ob)==0 ){.    ap
cea0: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
ceb0: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  , SQLITE_AFF_TEX
cec0: 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  T, encoding);.  
ced0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
cee0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
cef0: 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  || db->mallocFai
cf00: 6c 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53 65  led );.    MemSe
cf10: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
cf20: 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65 6c  MEM_Blob);.  }el
cf30: 73 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c  se{.    pIn1->fl
cf40: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79 70  ags &= ~(MEM_Typ
cf50: 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62 29  eMask&~MEM_Blob)
cf60: 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d  ;.  }.  UPDATE_M
cf70: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
cf80: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
cf90: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d 65  * Opcode: ToNume
cfa0: 72 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ric P1 * * * *.*
cfb0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
cfc0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
cfd0: 20 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72 69   P1 to be numeri
cfe0: 63 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20  c (either an.** 
cff0: 69 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c 6f  integer or a flo
d000: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62  ating-point numb
d010: 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20 76  er.).** If the v
d020: 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20  alue is text or 
d030: 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e  blob, try to con
d040: 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75 73  vert it to an us
d050: 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76  ing the.** equiv
d060: 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20  alent of atoi() 
d070: 6f 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73 74  or atof() and st
d080: 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68  ore 0 if no such
d090: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a 20   conversion .** 
d0a0: 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a  is possible..**.
d0b0: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
d0c0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
d0d0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
d0e0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
d0f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 4e  ..*/.case OP_ToN
d100: 75 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20 20  umeric: {       
d110: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d120: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45  me as TK_TO_NUME
d130: 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  RIC, in1 */.  pI
d140: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
d150: 70 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p1];.  sqlite3Vd
d160: 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70 49  beMemNumerify(pI
d170: 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n1);.  break;.}.
d180: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
d190: 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f  _OMIT_CAST */../
d1a0: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74 20  * Opcode: ToInt 
d1b0: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
d1c0: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
d1d0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
d1e0: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
d1f0: 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61 6c  .  If.** The val
d200: 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ue is currently 
d210: 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 64  a real number, d
d220: 72 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f 6e  rop its fraction
d230: 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20 74  al part..** If t
d240: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
d250: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
d260: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
d270: 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20  n integer using 
d280: 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  the.** equivalen
d290: 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20  t of atoi() and 
d2a0: 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75  store 0 if no su
d2b0: 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  ch conversion is
d2c0: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a   possible..**.**
d2d0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
d2e0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
d2f0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
d300: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
d310: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e 74  */.case OP_ToInt
d320: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
d330: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
d340: 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20 2a  TK_TO_INT, in1 *
d350: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
d360: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
d370: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
d380: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
d390: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
d3a0: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
d3b0: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
d3c0: 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
d3d0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53  (SQLITE_OMIT_CAS
d3e0: 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
d3f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
d400: 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20 4f 70  ING_POINT)./* Op
d410: 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20  code: ToReal P1 
d420: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
d430: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
d440: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
d450: 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  be a floating po
d460: 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49  int number..** I
d470: 66 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63  f The value is c
d480: 75 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65  urrently an inte
d490: 67 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e  ger, convert it.
d4a0: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
d4b0: 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62   is text or blob
d4c0: 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  , try to convert
d4d0: 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65   it to an intege
d4e0: 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  r using the.** e
d4f0: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
d500: 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e  i() and store 0.
d510: 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e  0 if no such con
d520: 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69  version is possi
d530: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ble..**.** A NUL
d540: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
d550: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
d560: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
d570: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
d580: 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20  e OP_ToReal: {  
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5a0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
d5b0: 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20  _REAL, in1 */.  
d5c0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d5d0: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
d5e0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
d5f0: 31 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1);.  if( (pIn1-
d600: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
d610: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  l)==0 ){.    sql
d620: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
d630: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
d640: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
d650: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
d660: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26  TE_OMIT_CAST) &&
d670: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
d680: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
d690: 4f 49 4e 54 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  OINT) */../* Opc
d6a0: 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33  ode: Lt P1 P2 P3
d6b0: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d   P4 P5.**.** Com
d6c0: 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20  pare the values 
d6d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
d6e0: 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50  nd P3.  If reg(P
d6f0: 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a  3)<reg(P1) then.
d700: 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  ** jump to addre
d710: 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49  ss P2.  .**.** I
d720: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
d730: 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50  PIFNULL bit of P
d740: 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74  5 is set and eit
d750: 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a  her reg(P1) or.*
d760: 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c  * reg(P3) is NUL
d770: 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
d780: 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51  jump.  If the SQ
d790: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
d7a0: 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72  .** bit is clear
d7b0: 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
d7c0: 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  gh if either ope
d7d0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  rand is NULL..**
d7e0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
d7f0: 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20  FF_MASK portion 
d800: 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e  of P5 must be an
d810: 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63   affinity charac
d820: 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f  ter -.** SQLITE_
d830: 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45  AFF_TEXT, SQLITE
d840: 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e  _AFF_INTEGER, an
d850: 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61  d so forth. An a
d860: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a  ttempt is made .
d870: 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74  ** to coerce bot
d880: 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69  h inputs accordi
d890: 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e  ng to this affin
d8a0: 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a  ity before the.*
d8b0: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  * comparison is 
d8c0: 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c  made. If the SQL
d8d0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20  ITE_AFF_MASK is 
d8e0: 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72  0x00, then numer
d8f0: 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69  ic.** affinity i
d900: 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61  s used. Note tha
d910: 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63  t the affinity c
d920: 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73  onversions are s
d930: 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e  tored.** back in
d940: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
d950: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
d960: 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64  .  So this opcod
d970: 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70  e can cause.** p
d980: 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65  ersistent change
d990: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  s to registers P
d9a0: 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  1 and P3..**.** 
d9b0: 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73  Once any convers
d9c0: 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20  ions have taken 
d9d0: 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68  place, and neith
d9e0: 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  er value is NULL
d9f0: 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  , .** the values
da00: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49   are compared. I
da10: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
da20: 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d  e blobs then mem
da30: 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64  cmp() is.** used
da40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
da50: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
da60: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
da70: 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20   both values.** 
da80: 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74  are text, then t
da90: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63  he appropriate c
daa0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
dab0: 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a  n specified in.*
dac0: 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f  * P4 is  used to
dad0: 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   do the comparis
dae0: 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f  on.  If P4 is no
daf0: 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  t specified then
db00: 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20  .** memcmp() is 
db10: 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
db20: 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66  text string.  If
db30: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
db40: 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65  .** numeric, the
db50: 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70  n a numeric comp
db60: 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20  arison is used. 
db70: 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65  If the two value
db80: 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66  s.** are of diff
db90: 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65  erent types, the
dba0: 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f  n numbers are co
dbb0: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
dbc0: 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e  an.** strings an
dbd0: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f  d strings are co
dbe0: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
dbf0: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20  an blobs..**.** 
dc00: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54  If the SQLITE_ST
dc10: 4f 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20  OREP2 bit of P5 
dc20: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20  is set, then do 
dc30: 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65  not jump.  Inste
dc40: 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62  ad,.** store a b
dc50: 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65  oolean result (e
dc60: 69 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f  ither 0, or 1, o
dc70: 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73  r NULL) in regis
dc80: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
dc90: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
dca0: 45 51 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  EQ bit is set in
dcb0: 20 50 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76   P5, then NULL v
dcc0: 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64  alues are consid
dcd0: 65 72 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f  ered.** equal to
dce0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70 72   one another, pr
dcf0: 6f 76 69 64 65 64 20 74 68 61 74 20 74 68 65 79  ovided that they
dd00: 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 68 65   do not have the
dd10: 69 72 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a  ir MEM_Cleared.*
dd20: 2a 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a  * bit set..*/./*
dd30: 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50   Opcode: Ne P1 P
dd40: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
dd50: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
dd60: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
dd70: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
dd80: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
dd90: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72  n if.** the oper
dda0: 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72  ands in register
ddb0: 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20  s P1 and P3 are 
ddc0: 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20  not equal.  See 
ddd0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
dde0: 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20  r.** additional 
ddf0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
de00: 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  ** If SQLITE_NUL
de10: 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35  LEQ is set in P5
de20: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
de30: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
de40: 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a  s always either.
de50: 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  ** true or false
de60: 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55   and is never NU
de70: 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65  LL.  If both ope
de80: 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74  rands are NULL t
de90: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a  hen the result.*
dea0: 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  * of comparison 
deb0: 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69  is false.  If ei
dec0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
ded0: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
dee0: 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a  sult is true..**
def0: 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72   If neither oper
df00: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20  and is NULL the 
df10: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
df20: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
df30: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
df40: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
df50: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
df60: 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P5..*/./* Opcod
df70: 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50  e: Eq P1 P2 P3 P
df80: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
df90: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
dfa0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
dfb0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
dfc0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
dfd0: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
dfe0: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
dff0: 6e 64 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e  nd P3 are equal.
e000: 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f  .** See the Lt o
e010: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
e020: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
e030: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ..**.** If SQLIT
e040: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
e050: 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72  in P5 then the r
e060: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
e070: 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69  son is always ei
e080: 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20  ther.** true or 
e090: 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76  false and is nev
e0a0: 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74  er NULL.  If bot
e0b0: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
e0c0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
e0d0: 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72  ult.** of compar
e0e0: 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49  ison is true.  I
e0f0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
e100: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
e110: 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
e120: 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72  e..** If neither
e130: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e140: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
e150: 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f  he same as it wo
e160: 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65  uld be if.** the
e170: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66   SQLITE_NULLEQ f
e180: 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64  lag were omitted
e190: 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20   from P5..*/./* 
e1a0: 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32  Opcode: Le P1 P2
e1b0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
e1c0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
e1d0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
e1e0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
e1f0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
e200: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
e210: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
e220: 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  3 is less than o
e230: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
e240: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
e250: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
e260: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e270: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e280: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
e290: 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20  pcode: Gt P1 P2 
e2a0: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
e2b0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e2c0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
e2d0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e2e0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e2f0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
e300: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
e310: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
e320: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
e330: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
e340: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
e350: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
e360: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e370: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
e380: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e390: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
e3a0: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
e3b0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
e3c0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
e3d0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
e3e0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
e3f0: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
e400: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
e410: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
e420: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
e430: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
e440: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
e450: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e460: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20  .*/.case OP_Eq: 
e470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e480: 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20   same as TK_EQ, 
e490: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
e4a0: 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20  /.case OP_Ne:   
e4b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e4c0: 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75  ame as TK_NE, ju
e4d0: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
e4e0: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20  case OP_Lt:     
e4f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e500: 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70  e as TK_LT, jump
e510: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
e520: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20  se OP_Le:       
e530: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
e540: 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20  as TK_LE, jump, 
e550: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
e560: 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20   OP_Gt:         
e570: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
e580: 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GT, jump, in
e590: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
e5a0: 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Ge: {         
e5b0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e5c0: 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GE, jump, in1,
e5d0: 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
e5e0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
e5f0: 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63   Result of the c
e600: 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e  omparison of pIn
e610: 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a  1 against pIn3 *
e620: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
e630: 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  y;      /* Affin
e640: 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63  ity to use for c
e650: 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75  omparison */.  u
e660: 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20  16 flags1;      
e670: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e     /* Copy of in
e680: 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70  itial value of p
e690: 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20  In1->flags */.  
e6a0: 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20  u16 flags3;     
e6b0: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
e6c0: 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
e6d0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a  pIn3->flags */..
e6e0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
e6f0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
e700: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
e710: 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e  ;.  flags1 = pIn
e720: 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67  1->flags;.  flag
e730: 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
e740: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31 20  ;.  if( (flags1 
e750: 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75  | flags3)&MEM_Nu
e760: 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65  ll ){.    /* One
e770: 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   or both operand
e780: 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s are NULL */.  
e790: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
e7a0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b  SQLITE_NULLEQ ){
e7b0: 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c  .      /* If SQL
e7c0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
e7d0: 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e  t (which will on
e7e0: 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65  ly happen if the
e7f0: 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20   operator is.   
e800: 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f     ** OP_Eq or O
e810: 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20  P_Ne) then take 
e820: 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20  the jump or not 
e830: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
e840: 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72  ther.      ** or
e850: 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e   not both operan
e860: 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20  ds are null..   
e870: 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
e880: 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
e890: 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f  =OP_Eq || pOp->o
e8a0: 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
e8b0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
e8c0: 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61  lags1 & MEM_Clea
e8d0: 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  red)==0 );.     
e8e0: 20 69 66 28 20 28 66 6c 61 67 73 31 26 4d 45 4d   if( (flags1&MEM
e8f0: 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20  _Null)!=0.      
e900: 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f   && (flags3&MEM_
e910: 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20  Null)!=0.       
e920: 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43  && (flags3&MEM_C
e930: 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20  leared)==0.     
e940: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20   ){.        res 
e950: 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73  = 0;  /* Results
e960: 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20   are equal */.  
e970: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e980: 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20     res = 1;  /* 
e990: 52 65 73 75 6c 74 73 20 61 72 65 20 6e 6f 74 20  Results are not 
e9a0: 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d  equal */.      }
e9b0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
e9c0: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c    /* SQLITE_NULL
e9d0: 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20  EQ is clear and 
e9e0: 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65  at least one ope
e9f0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20  rand is NULL,.  
ea00: 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20      ** then the 
ea10: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
ea20: 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20   NULL..      ** 
ea30: 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  The jump is take
ea40: 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f  n if the SQLITE_
ea50: 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69  JUMPIFNULL bit i
ea60: 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a  s set..      */.
ea70: 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
ea80: 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
ea90: 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f  P2 ){.        pO
eaa0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
eab0: 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d  p2];.        Mem
eac0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
ead0: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20  , MEM_Null);.   
eae0: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
eaf0: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
eb00: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  t);.      }else 
eb10: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
eb20: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
eb30: 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20  ){.        pc = 
eb40: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20  pOp->p2-1;.     
eb50: 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a   }.      break;.
eb60: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
eb70: 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70     /* Neither op
eb80: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20  erand is NULL.  
eb90: 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  Do a comparison.
eba0: 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79   */.    affinity
ebb0: 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c   = pOp->p5 & SQL
ebc0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20  ITE_AFF_MASK;.  
ebd0: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 20 29    if( affinity )
ebe0: 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  {.      applyAff
ebf0: 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66 66 69  inity(pIn1, affi
ec00: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
ec10: 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
ec20: 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69 6e  nity(pIn3, affin
ec30: 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ity, encoding);.
ec40: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61        if( db->ma
ec50: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
ec60: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a  o no_mem;.    }.
ec70: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
ec80: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
ec90: 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  LSEQ || pOp->p4.
eca0: 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20  pColl==0 );.    
ecb0: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
ecc0: 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  ;.    ExpandBlob
ecd0: 28 70 49 6e 33 29 3b 0a 20 20 20 20 72 65 73 20  (pIn3);.    res 
ece0: 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
ecf0: 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20  are(pIn3, pIn1, 
ed00: 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a  pOp->p4.pColl);.
ed10: 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f    }.  switch( pO
ed20: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
ed30: 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20   case OP_Eq:    
ed40: 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20  res = res==0;   
ed50: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
ed60: 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20  e OP_Ne:    res 
ed70: 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72  = res!=0;     br
ed80: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
ed90: 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Lt:    res = re
eda0: 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s<0;      break;
edb0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a  .    case OP_Le:
edc0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30      res = res<=0
edd0: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
ede0: 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20   case OP_Gt:    
edf0: 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20  res = res>0;    
ee00: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
ee10: 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20  ault:       res 
ee20: 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72  = res>=0;     br
ee30: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
ee40: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
ee50: 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
ee60: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
ee70: 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62  ->p2];.    memAb
ee80: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
ee90: 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  Out);.    MemSet
eea0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
eeb0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
eec0: 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20  t->u.i = res;.  
eed0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
eee0: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
eef0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65 73  .  }else if( res
ef00: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
ef10: 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 0a 20 20 2f  ->p2-1;.  }..  /
ef20: 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67  * Undo any chang
ef30: 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79  es made by apply
ef40: 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68  Affinity() to th
ef50: 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
ef60: 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c  s. */.  pIn1->fl
ef70: 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  ags = (pIn1->fla
ef80: 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  gs&~MEM_TypeMask
ef90: 29 20 7c 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f  ) | (flags1&MEM_
efa0: 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 70 49 6e  TypeMask);.  pIn
efb0: 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 33  3->flags = (pIn3
efc0: 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70  ->flags&~MEM_Typ
efd0: 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 33  eMask) | (flags3
efe0: 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a  &MEM_TypeMask);.
eff0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
f000: 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69  pcode: Permutati
f010: 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  on * * * P4 *.**
f020: 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d  .** Set the perm
f030: 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  utation used by 
f040: 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f  the OP_Compare o
f050: 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68  perator to be th
f060: 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e  e array.** of in
f070: 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a  tegers in P4..**
f080: 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74  .** The permutat
f090: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ion is only vali
f0a0: 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
f0b0: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74   OP_Compare that
f0c0: 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c   has.** the OPFL
f0d0: 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73  AG_PERMUTE bit s
f0e0: 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61  et in P5. Typica
f0f0: 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75  lly the OP_Permu
f100: 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a  tation should .*
f110: 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74  * occur immediat
f120: 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65  ely prior to the
f130: 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a   OP_Compare..*/.
f140: 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74  case OP_Permutat
f150: 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ion: {.  assert(
f160: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
f170: 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61  _INTARRAY );.  a
f180: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61  ssert( pOp->p4.a
f190: 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20  i );.  aPermute 
f1a0: 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20  = pOp->p4.ai;.  
f1b0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
f1c0: 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20  ode: Compare P1 
f1d0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
f1e0: 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65  * Compare two ve
f1f0: 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65  ctors of registe
f200: 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72  rs in reg(P1)..r
f210: 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c  eg(P1+P3-1) (cal
f220: 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72  l this.** vector
f230: 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67   "A") and in reg
f240: 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d  (P2)..reg(P2+P3-
f250: 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65 20  1) ("B").  Save 
f260: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a  the result of.**
f270: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
f280: 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6e  for use by the n
f290: 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74  ext OP_Jump inst
f2a0: 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ruct..**.** If P
f2b0: 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
f2c0: 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74  _PERMUTE bit set
f2d0: 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72  , then the order
f2e0: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
f2f0: 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20  s.** determined 
f300: 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  by the most rece
f310: 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  nt OP_Permutatio
f320: 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66 20  n operator.  If 
f330: 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45  the.** OPFLAG_PE
f340: 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c 65  RMUTE bit is cle
f350: 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74 65  ar, then registe
f360: 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69  r are compared i
f370: 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20  n sequential.** 
f380: 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  order..**.** P4 
f390: 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  is a KeyInfo str
f3a0: 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69  ucture that defi
f3b0: 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  nes collating se
f3c0: 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74  quences and sort
f3d0: 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74  .** orders for t
f3e0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
f3f0: 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
f400: 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73  applies to regis
f410: 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ters.** only.  T
f420: 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65  he KeyInfo eleme
f430: 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71  nts are used seq
f440: 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  uentially..**.**
f450: 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   The comparison 
f460: 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72  is a sort compar
f470: 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63  ison, so NULLs c
f480: 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a  ompare equal,.**
f490: 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20   NULLs are less 
f4a0: 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75  than numbers, nu
f4b0: 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74  mbers are less t
f4c0: 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20  han strings,.** 
f4d0: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
f4e0: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
f4f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70  .*/.case OP_Comp
f500: 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  are: {.  int n;.
f510: 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70    int i;.  int p
f520: 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63  1;.  int p2;.  c
f530: 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  onst KeyInfo *pK
f540: 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64  eyInfo;.  int id
f550: 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  x;.  CollSeq *pC
f560: 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  oll;    /* Colla
f570: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f  ting sequence to
f580: 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72   use on this ter
f590: 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b  m */.  int bRev;
f5a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
f5b0: 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47  e for DESCENDING
f5c0: 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a   sort order */..
f5d0: 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26    if( (pOp->p5 &
f5e0: 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29   OPFLAG_PERMUTE)
f5f0: 3d 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20 3d  ==0 ) aPermute =
f600: 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70   0;.  n = pOp->p
f610: 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  3;.  pKeyInfo = 
f620: 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
f630: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
f640: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65  );.  assert( pKe
f650: 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31  yInfo!=0 );.  p1
f660: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
f670: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20   = pOp->p2;.#if 
f680: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
f690: 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20  f( aPermute ){. 
f6a0: 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30     int k, mx = 0
f6b0: 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b  ;.    for(k=0; k
f6c0: 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65  <n; k++) if( aPe
f6d0: 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78  rmute[k]>mx ) mx
f6e0: 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a   = aPermute[k];.
f6f0: 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
f700: 20 26 26 20 70 31 2b 6d 78 3c 3d 70 2d 3e 6e 4d   && p1+mx<=p->nM
f710: 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  em+1 );.    asse
f720: 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d  rt( p2>0 && p2+m
f730: 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  x<=p->nMem+1 );.
f740: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
f750: 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b  ert( p1>0 && p1+
f760: 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  n<=p->nMem+1 );.
f770: 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
f780: 20 26 26 20 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65   && p2+n<=p->nMe
f790: 6d 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  m+1 );.  }.#endi
f7a0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
f7b0: 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20  G */.  for(i=0; 
f7c0: 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<n; i++){.    i
f7d0: 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20  dx = aPermute ? 
f7e0: 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b  aPermute[i] : i;
f7f0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
f800: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31  IsValid(&aMem[p1
f810: 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73  +idx]) );.    as
f820: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
f830: 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20  (&aMem[p2+idx]) 
f840: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
f850: 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61  TRACE(p1+idx, &a
f860: 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p1+idx]);.  
f870: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
f880: 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p2+idx, &aMem[p
f890: 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73  2+idx]);.    ass
f8a0: 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d  ert( i<pKeyInfo-
f8b0: 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70  >nField );.    p
f8c0: 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  Coll = pKeyInfo-
f8d0: 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62  >aColl[i];.    b
f8e0: 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  Rev = pKeyInfo->
f8f0: 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20  aSortOrder[i];. 
f900: 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71     iCompare = sq
f910: 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
f920: 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26  &aMem[p1+idx], &
f930: 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43  aMem[p2+idx], pC
f940: 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43  oll);.    if( iC
f950: 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20  ompare ){.      
f960: 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70  if( bRev ) iComp
f970: 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b  are = -iCompare;
f980: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
f990: 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75    }.  }.  aPermu
f9a0: 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  te = 0;.  break;
f9b0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  .}../* Opcode: J
f9c0: 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ump P1 P2 P3 * *
f9d0: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
f9e0: 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  he instruction a
f9f0: 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32  t address P1, P2
fa00: 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e  , or P3 dependin
fa10: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
fa20: 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  in the most rece
fa30: 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e  nt OP_Compare in
fa40: 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31  struction the P1
fa50: 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73   vector was less
fa60: 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74   than.** equal t
fa70: 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  o, or greater th
fa80: 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72  an the P2 vector
fa90: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a  , respectively..
faa0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a  */.case OP_Jump:
fab0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
fac0: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
fad0: 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20  iCompare<0 ){.  
fae0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d    pc = pOp->p1 -
faf0: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
fb00: 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20  iCompare==0 ){. 
fb10: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
fb20: 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
fb30: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d    pc = pOp->p3 -
fb40: 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
fb50: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
fb60: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
fb70: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
fb80: 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
fb90: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
fba0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
fbb0: 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
fbc0: 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
fbd0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
fbe0: 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
fbf0: 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
fc00: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
fc10: 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
fc20: 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
fc30: 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
fc40: 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
fc50: 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
fc60: 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
fc70: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
fc80: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
fc90: 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
fca0: 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  al OR of the val
fcb0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
fcc0: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
fcd0: 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65   store the answe
fce0: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  r in register P3
fcf0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
fd00: 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f  r P1 or P2 is no
fd10: 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65  nzero (true) the
fd20: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
fd30: 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e  1 (true).** even
fd40: 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e   if the other in
fd50: 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
fd60: 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f  NULL and false o
fd70: 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67  r two NULLs.** g
fd80: 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  ive a NULL outpu
fd90: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e  t..*/.case OP_An
fda0: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
fdb0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e  /* same as TK_AN
fdc0: 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
fdd0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a  3 */.case OP_Or:
fde0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
fdf0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c  * same as TK_OR,
fe00: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
fe10: 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20  */.  int v1;    
fe20: 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a  /* Left operand:
fe30: 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54    0==FALSE, 1==T
fe40: 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
fe50: 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
fe60: 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74   v2;    /* Right
fe70: 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c   operand: 0==FAL
fe80: 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
fe90: 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
fea0: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
feb0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
fec0: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
fed0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
fee0: 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65   v1 = 2;.  }else
fef0: 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74  {.    v1 = sqlit
ff00: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
ff10: 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70  In1)!=0;.  }.  p
ff20: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
ff30: 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32  >p2];.  if( pIn2
ff40: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
ff50: 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32  ll ){.    v2 = 2
ff60: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
ff70: 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  2 = sqlite3VdbeI
ff80: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30  ntValue(pIn2)!=0
ff90: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
ffa0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20  >opcode==OP_And 
ffb0: 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
ffc0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
ffd0: 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20  r and_logic[] = 
ffe0: 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  { 0, 0, 0, 0, 1,
fff0: 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20   2, 0, 2, 2 };. 
10000 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69     v1 = and_logi
10010 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65  c[v1*3+v2];.  }e
10020 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
10030 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
10040 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d  har or_logic[] =
10050 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31   { 0, 1, 2, 1, 1
10060 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a  , 1, 2, 1, 2 };.
10070 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69      v1 = or_logi
10080 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a  c[v1*3+v2];.  }.
10090 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
100a0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76  Op->p3];.  if( v
100b0 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53  1==2 ){.    MemS
100c0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
100d0 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65   MEM_Null);.  }e
100e0 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  lse{.    pOut->u
100f0 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d  .i = v1;.    Mem
10100 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
10110 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a  , MEM_Int);.  }.
10120 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
10130 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32  pcode: Not P1 P2
10140 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74   * * *.**.** Int
10150 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65  erpret the value
10160 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
10170 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  as a boolean val
10180 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a  ue.  Store the.*
10190 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65  * boolean comple
101a0 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72  ment in register
101b0 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c   P2.  If the val
101c0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
101d0 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  1 is .** NULL, t
101e0 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74  hen a NULL is st
101f0 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  ored in P2..*/.c
10200 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20  ase OP_Not: {   
10210 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10220 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20  same as TK_NOT, 
10230 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  in1, out2 */.  p
10240 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
10250 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
10260 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
10270 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
10280 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
10290 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
102a0 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
102b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
102c0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
102d0 74 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69 74  t64(pOut, !sqlit
102e0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
102f0 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65  In1));.  }.  bre
10300 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
10310 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a  : BitNot P1 P2 *
10320 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72   * *.**.** Inter
10330 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  pret the content
10340 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
10350 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  as an integer.  
10360 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65  Store the.** one
10370 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20  s-complement of 
10380 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74  the P1 value int
10390 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  o register P2.  
103a0 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61  If P1 holds.** a
103b0 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
103c0 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a   a NULL in P2..*
103d0 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74  /.case OP_BitNot
103e0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
103f0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
10400 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  TNOT, in1, out2 
10410 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
10420 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
10430 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
10440 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p2];.  if( pIn1-
10450 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
10460 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
10470 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
10480 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Out);.  }else{. 
10490 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
104a0 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20  mSetInt64(pOut, 
104b0 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  ~sqlite3VdbeIntV
104c0 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d  alue(pIn1));.  }
104d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
104e0 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20  Opcode: Once P1 
104f0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  P2 * * *.**.** C
10500 68 65 63 6b 20 69 66 20 4f 50 5f 4f 6e 63 65 20  heck if OP_Once 
10510 66 6c 61 67 20 50 31 20 69 73 20 73 65 74 2e 20  flag P1 is set. 
10520 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69  If so, jump to i
10530 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f  nstruction P2. O
10540 74 68 65 72 77 69 73 65 2c 0a 2a 2a 20 73 65 74  therwise,.** set
10550 20 74 68 65 20 66 6c 61 67 20 61 6e 64 20 66 61   the flag and fa
10560 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
10570 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
10580 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  on..*/.case OP_O
10590 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nce: {          
105a0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
105b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
105c0 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 29 3b 0a  p->nOnceFlag );.
105d0 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63 65 46 6c    if( p->aOnceFl
105e0 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a 20  ag[pOp->p1] ){. 
105f0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d     pc = pOp->p2-
10600 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
10610 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70  p->aOnceFlag[pOp
10620 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20  ->p1] = 1;.  }. 
10630 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10640 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50  code: If P1 P2 P
10650 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
10660 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
10670 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
10680 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65  P1 is true.  The
10690 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
106a0 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
106b0 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  it is numeric an
106c0 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  d non-zero.  If 
106d0 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
106e0 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
106f0 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
10700 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e   P3 is non-zero.
10710 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
10720 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20  fNot P1 P2 P3 * 
10730 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
10740 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
10750 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
10760 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61  s False.  The va
10770 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64  lue.** is consid
10780 65 72 65 64 20 66 61 6c 73 65 20 69 66 20 69 74  ered false if it
10790 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76   has a numeric v
107a0 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49  alue of zero.  I
107b0 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
107c0 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
107d0 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
107e0 69 66 20 50 33 20 69 73 20 7a 65 72 6f 2e 0a 2a  if P3 is zero..*
107f0 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20  /.case OP_If:   
10800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10810 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61   jump, in1 */.ca
10820 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20  se OP_IfNot: {  
10830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
10840 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  p, in1 */.  int 
10850 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  c;.  pIn1 = &aMe
10860 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
10870 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
10880 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
10890 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  c = pOp->p3;.  }
108a0 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c  else{.#ifdef SQL
108b0 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
108c0 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20  G_POINT.    c = 
108d0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
108e0 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65  lue(pIn1)!=0;.#e
108f0 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  lse.    c = sqli
10900 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
10910 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e  (pIn1)!=0.0;.#en
10920 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  dif.    if( pOp-
10930 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f  >opcode==OP_IfNo
10940 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a  t ) c = !c;.  }.
10950 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70    if( c ){.    p
10960 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
10970 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10980 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c  * Opcode: IsNull
10990 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
109a0 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
109b0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
109c0 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c  gister P1 is NUL
109d0 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73  L..*/.case OP_Is
109e0 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
109f0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
10a00 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  _ISNULL, jump, i
10a10 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
10a20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
10a30 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
10a40 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
10a50 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
10a60 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
10a70 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10a80 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20  ode: NotNull P1 
10a90 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  P2 * * *.**.** J
10aa0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
10ab0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
10ac0 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c  er P1 is not NUL
10ad0 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  L.  .*/.case OP_
10ae0 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  NotNull: {      
10af0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
10b00 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d   TK_NOTNULL, jum
10b10 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
10b20 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
10b30 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
10b40 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10b50 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  )==0 ){.    pc =
10b60 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
10b70 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
10b80 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20   Opcode: Column 
10b90 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
10ba0 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
10bb0 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72  he data that cur
10bc0 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
10bd0 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20   as a structure 
10be0 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74  built using.** t
10bf0 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  he MakeRecord in
10c00 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65  struction.  (See
10c10 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
10c20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
10c30 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ional.** informa
10c40 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66  tion about the f
10c50 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74  ormat of the dat
10c60 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65  a.)  Extract the
10c70 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a   P2-th column.**
10c80 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72   from this recor
10c90 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  d.  If there are
10ca0 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31   less that (P2+1
10cb0 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20  ) .** values in 
10cc0 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72  the record, extr
10cd0 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  act a NULL..**.*
10ce0 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72  * The value extr
10cf0 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20  acted is stored 
10d00 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
10d10 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c  **.** If the col
10d20 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77  umn contains few
10d30 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64  er than P2 field
10d40 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20  s, then extract 
10d50 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20  a NULL.  Or,.** 
10d60 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  if the P4 argume
10d70 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75  nt is a P4_MEM u
10d80 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  se the value of 
10d90 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
10da0 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
10db0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
10dc0 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
10dd0 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50   bit is set on P
10de0 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73  5 and P1 is a ps
10df0 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
10e00 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
10e10 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73  ache of the curs
10e20 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f  or is reset prio
10e30 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20  r to extracting 
10e40 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54  the column..** T
10e50 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75  he first OP_Colu
10e60 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65  mn against a pse
10e70 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20  udo-table after 
10e80 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
10e90 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69   content.** regi
10ea0 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64  ster has changed
10eb0 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69   should have thi
10ec0 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  s bit set..**.**
10ed0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
10ee0 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
10ef0 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69  LAG_TYPEOFARG bi
10f00 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35  ts are set on P5
10f10 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73   when.** the res
10f20 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65  ult is guarantee
10f30 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65  d to only be use
10f40 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
10f50 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a  t of a length().
10f60 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66  ** or typeof() f
10f70 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74  unction, respect
10f80 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64  ively.  The load
10f90 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f  ing of large blo
10fa0 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69  bs can be.** ski
10fb0 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  pped for length(
10fc0 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e  ) and all conten
10fd0 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65  t loading can be
10fe0 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70   skipped for typ
10ff0 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eof()..*/.case O
11000 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75 33  P_Column: {.  u3
11010 32 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20 20  2 payloadSize;  
11020 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
11030 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
11040 64 20 2a 2f 0a 20 20 69 36 34 20 70 61 79 6c 6f  d */.  i64 paylo
11050 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d  adSize64; /* Num
11060 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
11070 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
11080 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
11090 20 20 20 2f 2a 20 50 31 20 76 61 6c 75 65 20 6f     /* P1 value o
110a0 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f 0a  f the opcode */.
110b0 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
110c0 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e       /* column n
110d0 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76  umber to retriev
110e0 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
110f0 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65  r *pC;    /* The
11100 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a   VDBE cursor */.
11110 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20 20 20    char *zRec;   
11120 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
11130 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f  to complete reco
11140 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74 43  rd-data */.  BtC
11150 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
11160 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
11170 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54  sor */.  u32 *aT
11180 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 61  ype;        /* a
11190 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68  Type[i] holds th
111a0 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  e numeric type o
111b0 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d  f the i-th colum
111c0 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  n */.  u32 *aOff
111d0 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
111e0 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
111f0 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
11200 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
11210 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  mn */.  int nFie
11220 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e 75  ld;        /* nu
11230 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
11240 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
11250 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20    int len;      
11260 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67       /* The leng
11270 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c  th of the serial
11280 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68  ized data for th
11290 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  e column */.  in
112a0 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
112b0 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
112c0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61 74   */.  char *zDat
112d0 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74  a;       /* Part
112e0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 62   of the record b
112f0 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
11300 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20    Mem *pDest;   
11310 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f       /* Where to
11320 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61   write the extra
11330 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20  cted value */.  
11340 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
11350 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
11360 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
11370 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
11380 75 38 20 2a 7a 49 64 78 3b 20 20 20 20 20 20 20  u8 *zIdx;       
11390 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f     /* Index into
113a0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 38 20   header */.  u8 
113b0 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20 20 20 20  *zEndHdr;       
113c0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69  /* Pointer to fi
113d0 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20 74  rst byte after t
113e0 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75  he header */.  u
113f0 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20  32 offset;      
11400 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f    /* Offset into
11410 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75   the data */.  u
11420 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20 20 20  32 szField;     
11430 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
11440 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6e 74  ytes in the cont
11450 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  ent of a field *
11460 2f 0a 20 20 69 6e 74 20 73 7a 48 64 72 3b 20 20  /.  int szHdr;  
11470 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
11480 66 20 74 68 65 20 68 65 61 64 65 72 20 73 69 7a  f the header siz
11490 65 20 66 69 65 6c 64 20 61 74 20 73 74 61 72 74  e field at start
114a0 20 6f 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20   of record */.  
114b0 69 6e 74 20 61 76 61 69 6c 3b 20 20 20 20 20 20  int avail;      
114c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
114d0 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62  bytes of availab
114e0 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32  le data */.  u32
114f0 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   t;             
11500 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66  /* A type code f
11510 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68  rom the record h
11520 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eader */.  Mem *
11530 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
11540 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70   PseudoTable inp
11550 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a  ut register */..
11560 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
11570 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
11580 0a 20 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65 6d  .  pC = 0;.  mem
11590 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
115a0 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 61  zeof(sMem));.  a
115b0 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75  ssert( p1<p->nCu
115c0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
115d0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
115e0 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
115f0 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d  );.  pDest = &aM
11600 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
11610 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
11620 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 7a 52 65  p, pDest);.  zRe
11630 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 69  c = 0;..  /* Thi
11640 73 20 62 6c 6f 63 6b 20 73 65 74 73 20 74 68 65  s block sets the
11650 20 76 61 72 69 61 62 6c 65 20 70 61 79 6c 6f 61   variable payloa
11660 64 53 69 7a 65 20 74 6f 20 62 65 20 74 68 65 20  dSize to be the 
11670 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 0a  total number of.
11680 20 20 2a 2a 20 62 79 74 65 73 20 69 6e 20 74 68    ** bytes in th
11690 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20  e record..  **. 
116a0 20 2a 2a 20 7a 52 65 63 20 69 73 20 73 65 74 20   ** zRec is set 
116b0 74 6f 20 62 65 20 74 68 65 20 63 6f 6d 70 6c 65  to be the comple
116c0 74 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 72  te text of the r
116d0 65 63 6f 72 64 20 69 66 20 69 74 20 69 73 20 61  ecord if it is a
116e0 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20 54  vailable..  ** T
116f0 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f  he complete reco
11700 72 64 20 74 65 78 74 20 69 73 20 61 6c 77 61 79  rd text is alway
11710 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  s available for 
11720 70 73 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20 20  pseudo-tables.  
11730 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  ** If the record
11740 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
11750 63 75 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d 70  cursor, the comp
11760 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74  lete record text
11770 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20 61  .  ** might be a
11780 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20  vailable in the 
11790 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e   pC->aRow cache.
117a0 20 20 4f 72 20 69 74 20 6d 69 67 68 74 20 6e 6f    Or it might no
117b0 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74 68  t be..  ** If th
117c0 65 20 64 61 74 61 20 69 73 20 75 6e 61 76 61 69  e data is unavai
117d0 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20 69 73 20  lable,  zRec is 
117e0 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a  set to NULL..  *
117f0 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20 63  *.  ** We also c
11800 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65  ompute the numbe
11810 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
11820 74 68 65 20 72 65 63 6f 72 64 2e 20 20 46 6f 72  the record.  For
11830 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20 74   cursors,.  ** t
11840 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
11850 75 6d 6e 73 20 69 73 20 73 74 6f 72 65 64 20 69  umns is stored i
11860 6e 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72  n the VdbeCursor
11870 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74 2e  .nField element.
11880 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d 3e  .  */.  pC = p->
11890 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73 73  apCsr[p1];.  ass
118a0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
118b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
118c0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
118d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74   assert( pC->pVt
118e0 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a 23  abCursor==0 );.#
118f0 65 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d 20  endif.  pCrsr = 
11900 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
11910 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20  f( pCrsr!=0 ){. 
11920 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64     /* The record
11930 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
11940 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20 72 63  B-Tree */.    rc
11950 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
11960 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
11970 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
11980 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
11990 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43  rror;.    if( pC
119a0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
119b0 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
119c0 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   0;.    }else if
119d0 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75  ( pC->cacheStatu
119e0 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29  s==p->cacheCtr )
119f0 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53  {.      payloadS
11a00 69 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61  ize = pC->payloa
11a10 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52 65  dSize;.      zRe
11a20 63 20 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e 61  c = (char*)pC->a
11a30 52 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  Row;.    }else i
11a40 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
11a50 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
11a60 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
11a70 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
11a80 20 29 3b 0a 20 20 20 20 20 20 56 56 41 5f 4f 4e   );.      VVA_ON
11a90 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
11aa0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
11ab0 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
11ac0 36 34 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  64);.      asser
11ad0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
11ae0 20 29 3b 20 20 20 2f 2a 20 54 72 75 65 20 62 65   );   /* True be
11af0 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
11b00 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f  oveto() call abo
11b10 76 65 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 73  ve */.      /* s
11b20 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65  qlite3BtreeParse
11b30 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67  CellPtr() uses g
11b40 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20  etVarint32() to 
11b50 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20  extract the.    
11b60 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a    ** payload siz
11b70 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f  e, so it is impo
11b80 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f  ssible for paylo
11b90 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20  adSize64 to be. 
11ba0 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74       ** larger t
11bb0 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a  han 32 bits. */.
11bc0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
11bd0 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53  ayloadSize64 & S
11be0 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d  QLITE_MAX_U32)==
11bf0 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u64)payloadSize
11c00 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61 79 6c  64 );.      payl
11c10 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70  oadSize = (u32)p
11c20 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20  ayloadSize64;.  
11c30 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
11c40 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
11c50 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
11c60 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20  (pCrsr) );.     
11c70 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
11c80 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
11c90 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79  Size(pCrsr, &pay
11ca0 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20  loadSize);.     
11cb0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
11cc0 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44  ITE_OK );   /* D
11cd0 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74  ataSize() cannot
11ce0 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 7d 0a 20   fail */.    }. 
11cf0 20 7d 65 6c 73 65 20 69 66 28 20 41 4c 57 41 59   }else if( ALWAY
11d00 53 28 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  S(pC->pseudoTabl
11d10 65 52 65 67 3e 30 29 20 29 7b 0a 20 20 20 20 70  eReg>0) ){.    p
11d20 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e  Reg = &aMem[pC->
11d30 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b  pseudoTableReg];
11d40 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6d 75 6c  .    if( pC->mul
11d50 74 69 50 73 65 75 64 6f 20 29 7b 0a 20 20 20 20  tiPseudo ){.    
11d60 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
11d70 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73  ShallowCopy(pDes
11d80 74 2c 20 70 52 65 67 2b 70 32 2c 20 4d 45 4d 5f  t, pReg+p2, MEM_
11d90 45 70 68 65 6d 29 3b 0a 20 20 20 20 20 20 44 65  Ephem);.      De
11da0 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 44 65  ephemeralize(pDe
11db0 73 74 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  st);.      goto 
11dc0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
11dd0 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
11de0 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d   pReg->flags & M
11df0 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 61  EM_Blob );.    a
11e00 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
11e10 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20 70  d(pReg) );.    p
11e20 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 52 65  ayloadSize = pRe
11e30 67 2d 3e 6e 3b 0a 20 20 20 20 7a 52 65 63 20 3d  g->n;.    zRec =
11e40 20 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 70 43   pReg->z;.    pC
11e50 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
11e60 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47 5f  (pOp->p5&OPFLAG_
11e70 43 4c 45 41 52 43 41 43 48 45 29 20 3f 20 43 41  CLEARCACHE) ? CA
11e80 43 48 45 5f 53 54 41 4c 45 20 3a 20 70 2d 3e 63  CHE_STALE : p->c
11e90 61 63 68 65 43 74 72 3b 0a 20 20 20 20 61 73 73  acheCtr;.    ass
11ea0 65 72 74 28 20 70 61 79 6c 6f 61 64 53 69 7a 65  ert( payloadSize
11eb0 3d 3d 30 20 7c 7c 20 7a 52 65 63 21 3d 30 20 29  ==0 || zRec!=0 )
11ec0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
11ed0 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 65 20 72  * Consider the r
11ee0 6f 77 20 74 6f 20 62 65 20 4e 55 4c 4c 20 2a 2f  ow to be NULL */
11ef0 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65  .    payloadSize
11f00 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20   = 0;.  }..  /* 
11f10 49 66 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 69  If payloadSize i
11f20 73 20 30 2c 20 74 68 65 6e 20 6a 75 73 74 20 73  s 0, then just s
11f30 74 6f 72 65 20 61 20 4e 55 4c 4c 2e 20 20 54 68  tore a NULL.  Th
11f40 69 73 20 63 61 6e 20 68 61 70 70 65 6e 20 62 65  is can happen be
11f50 63 61 75 73 65 20 6f 66 0a 20 20 2a 2a 20 6e 75  cause of.  ** nu
11f60 6c 6c 52 6f 77 20 6f 72 20 62 65 63 61 75 73 65  llRow or because
11f70 20 6f 66 20 61 20 63 6f 72 72 75 70 74 20 64 61   of a corrupt da
11f80 74 61 62 61 73 65 2e 20 2a 2f 0a 20 20 69 66 28  tabase. */.  if(
11f90 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20   payloadSize==0 
11fa0 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ){.    MemSetTyp
11fb0 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d  eFlag(pDest, MEM
11fc0 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 67 6f 74 6f  _Null);.    goto
11fd0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
11fe0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64 62    }.  assert( db
11ff0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
12000 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30  LIMIT_LENGTH]>=0
12010 20 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f 61   );.  if( payloa
12020 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d  dSize > (u32)db-
12030 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
12040 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
12050 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
12060 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
12070 3d 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20  = pC->nField;.  
12080 61 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65 6c  assert( p2<nFiel
12090 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20  d );..  /* Read 
120a0 61 6e 64 20 70 61 72 73 65 20 74 68 65 20 74 61  and parse the ta
120b0 62 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74 6f  ble header.  Sto
120c0 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  re the results o
120d0 66 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a 2a  f the parse.  **
120e0 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
120f0 20 68 65 61 64 65 72 20 63 61 63 68 65 20 66 69   header cache fi
12100 65 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72 73  elds of the curs
12110 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65  or..  */.  aType
12120 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20   = pC->aType;.  
12130 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61  if( pC->cacheSta
12140 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72  tus==p->cacheCtr
12150 20 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74 20   ){.    aOffset 
12160 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20  = pC->aOffset;. 
12170 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
12180 72 74 28 61 54 79 70 65 29 3b 0a 20 20 20 20 61  rt(aType);.    a
12190 76 61 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70 43  vail = 0;.    pC
121a0 2d 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f 66 66  ->aOffset = aOff
121b0 73 65 74 20 3d 20 26 61 54 79 70 65 5b 6e 46 69  set = &aType[nFi
121c0 65 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61  eld];.    pC->pa
121d0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c  yloadSize = payl
121e0 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d  oadSize;.    pC-
121f0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70  >cacheStatus = p
12200 2d 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20 20 20  ->cacheCtr;..   
12210 20 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20 68   /* Figure out h
12220 6f 77 20 6d 61 6e 79 20 62 79 74 65 73 20 61 72  ow many bytes ar
12230 65 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20  e in the header 
12240 2a 2f 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20  */.    if( zRec 
12250 29 7b 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d  ){.      zData =
12260 20 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65   zRec;.    }else
12270 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  {.      if( pC->
12280 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20  isIndex ){.     
12290 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72     zData = (char
122a0 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  *)sqlite3BtreeKe
122b0 79 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61  yFetch(pCrsr, &a
122c0 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c  vail);.      }el
122d0 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74  se{.        zDat
122e0 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74  a = (char*)sqlit
122f0 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68  e3BtreeDataFetch
12300 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
12310 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f  .      }.      /
12320 2a 20 49 66 20 4b 65 79 46 65 74 63 68 28 29 2f  * If KeyFetch()/
12330 44 61 74 61 46 65 74 63 68 28 29 20 6d 61 6e 61  DataFetch() mana
12340 67 65 64 20 74 6f 20 67 65 74 20 74 68 65 20 65  ged to get the e
12350 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20  ntire payload,. 
12360 20 20 20 20 20 2a 2a 20 73 61 76 65 20 74 68 65       ** save the
12370 20 70 61 79 6c 6f 61 64 20 69 6e 20 74 68 65 20   payload in the 
12380 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20  pC->aRow cache. 
12390 20 54 68 61 74 20 77 69 6c 6c 20 73 61 76 65 20   That will save 
123a0 75 73 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a  us from.      **
123b0 20 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20   having to make 
123c0 61 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73  additional calls
123d0 20 74 6f 20 66 65 74 63 68 20 74 68 65 20 63 6f   to fetch the co
123e0 6e 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66  ntent portion of
123f0 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65  .      ** the re
12400 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  cord..      */. 
12410 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61       assert( ava
12420 69 6c 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  il>=0 );.      i
12430 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c  f( payloadSize <
12440 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a  = (u32)avail ){.
12450 20 20 20 20 20 20 20 20 7a 52 65 63 20 3d 20 7a          zRec = z
12460 44 61 74 61 3b 0a 20 20 20 20 20 20 20 20 70 43  Data;.        pC
12470 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44  ->aRow = (u8*)zD
12480 61 74 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ata;.      }else
12490 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  {.        pC->aR
124a0 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ow = 0;.      }.
124b0 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65      }.    /* The
124c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72   following asser
124d0 74 20 69 73 20 74 72 75 65 20 69 6e 20 61 6c 6c  t is true in all
124e0 20 63 61 73 65 73 20 65 78 63 65 70 74 20 77 68   cases except wh
124f0 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61  en.    ** the da
12500 74 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20  tabase file has 
12510 62 65 65 6e 20 63 6f 72 72 75 70 74 65 64 20 65  been corrupted e
12520 78 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a  xternally..    *
12530 2a 20 20 20 20 61 73 73 65 72 74 28 20 7a 52 65  *    assert( zRe
12540 63 21 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70  c!=0 || avail>=p
12550 61 79 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76  ayloadSize || av
12560 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20  ail>=9 ); */.   
12570 20 73 7a 48 64 72 20 3d 20 67 65 74 56 61 72 69   szHdr = getVari
12580 6e 74 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c  nt32((u8*)zData,
12590 20 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f   offset);..    /
125a0 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f  * Make sure a co
125b0 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68  rrupt database h
125c0 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20  as not given us 
125d0 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64  an oversize head
125e0 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68  er..    ** Do th
125f0 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20  is now to avoid 
12600 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f  an oversize memo
12610 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20  ry allocation.. 
12620 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70     **.    ** Typ
12630 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65  e entries can be
12640 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35   between 1 and 5
12650 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75   bytes each.  Bu
12660 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20  t 4 and 5 byte. 
12670 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20     ** types use 
12680 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61  so much data spa
12690 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61  ce that there ca
126a0 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61  n only be 4096 a
126b0 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20  nd 32 of.    ** 
126c0 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65  them, respective
126d0 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69  ly.  So the maxi
126e0 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74  mum header lengt
126f0 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61  h results from a
12700 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74  .    ** 3-byte t
12710 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20  ype for each of 
12720 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33  the maximum of 3
12730 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75  2768 columns plu
12740 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65  s three.    ** e
12750 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74  xtra bytes for t
12760 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  he header length
12770 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a   itself.  32768*
12780 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20  3 + 3 = 98307.. 
12790 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66     */.    if( of
127a0 66 73 65 74 20 3e 20 39 38 33 30 37 20 29 7b 0a  fset > 98307 ){.
127b0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
127c0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
127d0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
127e0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
127f0 0a 20 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65 20  .    /* Compute 
12800 69 6e 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62 65  in len the numbe
12810 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
12820 74 61 20 77 65 20 6e 65 65 64 20 74 6f 20 72 65  ta we need to re
12830 61 64 20 69 6e 20 6f 72 64 65 72 0a 20 20 20 20  ad in order.    
12840 2a 2a 20 74 6f 20 67 65 74 20 6e 46 69 65 6c 64  ** to get nField
12850 20 74 79 70 65 20 76 61 6c 75 65 73 2e 20 20 6f   type values.  o
12860 66 66 73 65 74 20 69 73 20 61 6e 20 75 70 70 65  ffset is an uppe
12870 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73 2e  r bound on this.
12880 20 20 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46 69    But.    ** nFi
12890 65 6c 64 20 6d 69 67 68 74 20 62 65 20 73 69 67  eld might be sig
128a0 6e 69 66 69 63 61 6e 74 6c 79 20 6c 65 73 73 20  nificantly less 
128b0 74 68 61 6e 20 74 68 65 20 74 72 75 65 20 6e 75  than the true nu
128c0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a  mber of columns.
128d0 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 74 61      ** in the ta
128e0 62 6c 65 2c 20 61 6e 64 20 69 6e 20 74 68 61 74  ble, and in that
128f0 20 63 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64 2b   case, 5*nField+
12900 33 20 6d 69 67 68 74 20 62 65 20 73 6d 61 6c 6c  3 might be small
12910 65 72 20 74 68 61 6e 20 6f 66 66 73 65 74 2e 0a  er than offset..
12920 20 20 20 20 2a 2a 20 57 65 20 77 61 6e 74 20 74      ** We want t
12930 6f 20 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20 69  o minimize len i
12940 6e 20 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69 74  n order to limit
12950 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
12960 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 61   memory.    ** a
12970 6c 6c 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65 63  llocation, espec
12980 69 61 6c 6c 79 20 69 66 20 61 20 63 6f 72 72 75  ially if a corru
12990 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  pt database file
129a0 20 68 61 73 20 63 61 75 73 65 64 20 6f 66 66 73   has caused offs
129b0 65 74 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20  et.    ** to be 
129c0 6f 76 65 72 73 69 7a 65 64 2e 20 4f 66 66 73 65  oversized. Offse
129d0 74 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20  t is limited to 
129e0 39 38 33 30 37 20 61 62 6f 76 65 2e 20 20 42 75  98307 above.  Bu
129f0 74 20 39 38 33 30 37 20 6d 69 67 68 74 0a 20 20  t 98307 might.  
12a00 20 20 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65 65    ** still excee
12a10 64 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20  d Robson memory 
12a20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74  allocation limit
12a30 73 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69 67  s on some config
12a40 75 72 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a  urations..    **
12a50 20 4f 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74   On systems that
12a60 20 63 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74 65   cannot tolerate
12a70 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c   large memory al
12a80 6c 6f 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65 6c  locations, nFiel
12a90 64 2a 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69 6c  d*5+3.    ** wil
12aa0 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63 68  l likely be much
12ab0 20 73 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20 6e   smaller since n
12ac0 46 69 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65 6c  Field will likel
12ad0 79 20 62 65 20 6c 65 73 73 20 74 68 61 6e 0a 20  y be less than. 
12ae0 20 20 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e 20     ** 20 or so. 
12af0 20 54 68 69 73 20 69 6e 73 75 72 65 73 20 74 68   This insures th
12b00 61 74 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79  at Robson memory
12b10 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69   allocation limi
12b20 74 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e 6f  ts are.    ** no
12b30 74 20 65 78 63 65 65 64 65 64 20 65 76 65 6e 20  t exceeded even 
12b40 66 6f 72 20 63 6f 72 72 75 70 74 20 64 61 74 61  for corrupt data
12b50 62 61 73 65 20 66 69 6c 65 73 2e 0a 20 20 20 20  base files..    
12b60 2a 2f 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46 69  */.    len = nFi
12b70 65 6c 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20 69  eld*5 + 3;.    i
12b80 66 28 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f 66  f( len > (int)of
12b90 66 73 65 74 20 29 20 6c 65 6e 20 3d 20 28 69 6e  fset ) len = (in
12ba0 74 29 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f  t)offset;..    /
12bb0 2a 20 54 68 65 20 4b 65 79 46 65 74 63 68 28 29  * The KeyFetch()
12bc0 20 6f 72 20 44 61 74 61 46 65 74 63 68 28 29 20   or DataFetch() 
12bd0 61 62 6f 76 65 20 61 72 65 20 66 61 73 74 20 61  above are fast a
12be0 6e 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20  nd will get the 
12bf0 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65  entire.    ** re
12c00 63 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d  cord header in m
12c10 6f 73 74 20 63 61 73 65 73 2e 20 20 42 75 74 20  ost cases.  But 
12c20 74 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74  they will fail t
12c30 6f 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65  o get the comple
12c40 74 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  te.    ** record
12c50 20 68 65 61 64 65 72 20 69 66 20 74 68 65 20 72   header if the r
12c60 65 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65  ecord header doe
12c70 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73  s not fit on a s
12c80 69 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a  ingle page.    *
12c90 2a 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e  * in the B-Tree.
12ca0 20 20 57 68 65 6e 20 74 68 61 74 20 68 61 70 70    When that happ
12cb0 65 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33  ens, use sqlite3
12cc0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
12cd0 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71  () to.    ** acq
12ce0 75 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74  uire the complet
12cf0 65 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20  e header text.. 
12d00 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a     */.    if( !z
12d10 52 65 63 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e  Rec && avail<len
12d20 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66   ){.      sMem.f
12d30 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  lags = 0;.      
12d40 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20  sMem.db = 0;.   
12d50 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
12d60 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
12d70 70 43 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70  pCrsr, 0, len, p
12d80 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65  C->isIndex, &sMe
12d90 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  m);.      if( rc
12da0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
12db0 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
12dc0 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20  olumn_out;.     
12dd0 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d   }.      zData =
12de0 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20   sMem.z;.    }. 
12df0 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38     zEndHdr = (u8
12e00 20 2a 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a   *)&zData[len];.
12e10 20 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a      zIdx = (u8 *
12e20 29 26 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a  )&zData[szHdr];.
12e30 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65  .    /* Scan the
12e40 20 68 65 61 64 65 72 20 61 6e 64 20 75 73 65 20   header and use 
12e50 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68  it to fill in th
12e60 65 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f  e aType[] and aO
12e70 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61  ffset[].    ** a
12e80 72 72 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d  rrays.  aType[i]
12e90 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68   will contain th
12ea0 65 20 74 79 70 65 20 69 6e 74 65 67 65 72 20 66  e type integer f
12eb0 6f 72 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20  or the i-th.    
12ec0 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f  ** column and aO
12ed0 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f  ffset[i] will co
12ee0 6e 74 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74  ntain the offset
12ef0 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
12f00 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ing.    ** of th
12f10 65 20 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20  e record to the 
12f20 73 74 61 72 74 20 6f 66 20 74 68 65 20 64 61 74  start of the dat
12f30 61 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63  a for the i-th c
12f40 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20  olumn.    */.   
12f50 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69 65   for(i=0; i<nFie
12f60 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ld; i++){.      
12f70 69 66 28 20 7a 49 64 78 3c 7a 45 6e 64 48 64 72  if( zIdx<zEndHdr
12f80 20 29 7b 0a 20 20 20 20 20 20 20 20 61 4f 66 66   ){.        aOff
12f90 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b  set[i] = offset;
12fa0 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 49 64  .        if( zId
12fb0 78 5b 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20 20  x[0]<0x80 ){.   
12fc0 20 20 20 20 20 20 20 74 20 3d 20 7a 49 64 78 5b         t = zIdx[
12fd0 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 49  0];.          zI
12fe0 64 78 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65  dx++;.        }e
12ff0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a  lse{.          z
13000 49 64 78 20 2b 3d 20 73 71 6c 69 74 65 33 47 65  Idx += sqlite3Ge
13010 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c 20  tVarint32(zIdx, 
13020 26 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  &t);.        }. 
13030 20 20 20 20 20 20 20 61 54 79 70 65 5b 69 5d 20         aType[i] 
13040 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 73 7a 46  = t;.        szF
13050 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64  ield = sqlite3Vd
13060 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
13070 74 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73  t);.        offs
13080 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20  et += szField;. 
13090 20 20 20 20 20 20 20 69 66 28 20 6f 66 66 73 65         if( offse
130a0 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a  t<szField ){  /*
130b0 20 54 72 75 65 20 69 66 20 6f 66 66 73 65 74 20   True if offset 
130c0 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20  overflows */.   
130d0 20 20 20 20 20 20 20 7a 49 64 78 20 3d 20 26 7a         zIdx = &z
130e0 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46  EndHdr[1];  /* F
130f0 6f 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52  orces SQLITE_COR
13100 52 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f  RUPT return belo
13110 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62  w */.          b
13120 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
13130 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
13140 20 20 20 20 20 2f 2a 20 49 66 20 69 20 69 73 20       /* If i is 
13150 6c 65 73 73 20 74 68 61 74 20 6e 46 69 65 6c 64  less that nField
13160 2c 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65  , then there are
13170 20 66 65 77 65 72 20 66 69 65 6c 64 73 20 69 6e   fewer fields in
13180 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a   this.        **
13190 20 72 65 63 6f 72 64 20 74 68 61 6e 20 53 65 74   record than Set
131a0 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64 69 63  NumColumns indic
131b0 61 74 65 64 20 74 68 65 72 65 20 61 72 65 20 63  ated there are c
131c0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20  olumns in the.  
131d0 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 2e 20        ** table. 
131e0 53 65 74 20 74 68 65 20 6f 66 66 73 65 74 20 66  Set the offset f
131f0 6f 72 20 61 6e 79 20 65 78 74 72 61 20 63 6f 6c  or any extra col
13200 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  umns not present
13210 20 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 74   in.        ** t
13220 68 65 20 72 65 63 6f 72 64 20 74 6f 20 30 2e 20  he record to 0. 
13230 54 68 69 73 20 74 65 6c 6c 73 20 63 6f 64 65 20  This tells code 
13240 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65 20 74  below to store t
13250 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
13260 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72 20  .        ** for 
13270 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 73 74 65  the column inste
13280 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c 69 7a  ad of deserializ
13290 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72 6f 6d  ing a value from
132a0 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20   the record..   
132b0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
132c0 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b 0a  aOffset[i] = 0;.
132d0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
132e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
132f0 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
13300 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d      sMem.flags =
13310 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20 20   MEM_Null;..    
13320 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72 65  /* If we have re
13330 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20 64  ad more header d
13340 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f 6e  ata than was con
13350 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68 65  tained in the he
13360 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72 20  ader,.    ** or 
13370 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  if the end of th
13380 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70  e last field app
13390 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74 20  ears to be past 
133a0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 20  the end of the. 
133b0 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72     ** record, or
133c0 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
133d0 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
133e0 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66 6f  pears to be befo
133f0 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20 2a  re the end.    *
13400 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
13410 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64 73  (when all fields
13420 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e 20   present), then 
13430 77 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c 69  we must be deali
13440 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74 68 20  ng .    ** with 
13450 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
13460 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  se..    */.    i
13470 66 28 20 28 7a 49 64 78 20 3e 20 7a 45 6e 64 48  f( (zIdx > zEndH
13480 64 72 29 20 7c 7c 20 28 6f 66 66 73 65 74 20 3e  dr) || (offset >
13490 20 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20   payloadSize).  
134a0 20 20 20 20 20 20 20 7c 7c 20 28 7a 49 64 78 3d         || (zIdx=
134b0 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66 73  =zEndHdr && offs
134c0 65 74 21 3d 70 61 79 6c 6f 61 64 53 69 7a 65 29  et!=payloadSize)
134d0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
134e0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
134f0 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f  PT;.      goto o
13500 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
13510 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47 65    }.  }..  /* Ge
13520 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 66  t the column inf
13530 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20 61 4f 66  ormation. If aOf
13540 66 73 65 74 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d  fset[p2] is non-
13550 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20 20 2a 2a  zero, then .  **
13560 20 64 65 73 65 72 69 61 6c 69 7a 65 20 74 68 65   deserialize the
13570 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
13580 72 65 63 6f 72 64 2e 20 49 66 20 61 4f 66 66 73  record. If aOffs
13590 65 74 5b 70 32 5d 20 69 73 20 7a 65 72 6f 2c 0a  et[p2] is zero,.
135a0 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 72 65 20    ** then there 
135b0 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20 66  are not enough f
135c0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
135d0 6f 72 64 20 74 6f 20 73 61 74 69 73 66 79 20 74  ord to satisfy t
135e0 68 65 0a 20 20 2a 2a 20 72 65 71 75 65 73 74 2e  he.  ** request.
135f0 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
13600 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 4e 55  set the value NU
13610 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69 66 20 50  LL or to P4 if P
13620 34 20 69 73 0a 20 20 2a 2a 20 61 20 70 6f 69 6e  4 is.  ** a poin
13630 74 65 72 20 74 6f 20 61 20 4d 65 6d 20 6f 62 6a  ter to a Mem obj
13640 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ect..  */.  if( 
13650 61 4f 66 66 73 65 74 5b 70 32 5d 20 29 7b 0a 20  aOffset[p2] ){. 
13660 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
13670 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20  QLITE_OK );.    
13680 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20  if( zRec ){.    
13690 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
136a0 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65   common case whe
136b0 72 65 20 74 68 65 20 77 68 6f 6c 65 20 72 6f 77  re the whole row
136c0 20 66 69 74 73 20 6f 6e 20 61 20 73 69 6e 67 6c   fits on a singl
136d0 65 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 20 20  e page */.      
136e0 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
136f0 44 65 73 74 29 3b 0a 20 20 20 20 20 20 73 71 6c  Dest);.      sql
13700 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
13710 74 28 28 75 38 20 2a 29 26 7a 52 65 63 5b 61 4f  t((u8 *)&zRec[aO
13720 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61 54 79 70  ffset[p2]], aTyp
13730 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20  e[p2], pDest);. 
13740 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13750 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 68  /* This branch h
13760 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e  appens only when
13770 20 74 68 65 20 72 6f 77 20 6f 76 65 72 66 6c 6f   the row overflo
13780 77 73 20 6f 6e 74 6f 20 6d 75 6c 74 69 70 6c 65  ws onto multiple
13790 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 20 20   pages */.      
137a0 74 20 3d 20 61 54 79 70 65 5b 70 32 5d 3b 0a 20  t = aType[p2];. 
137b0 20 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70       if( (pOp->p
137c0 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47  5 & (OPFLAG_LENG
137d0 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50  THARG|OPFLAG_TYP
137e0 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20  EOFARG))!=0.    
137f0 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26     && ((t>=12 &&
13800 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70   (t&1)==0) || (p
13810 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
13820 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29 0a 20  TYPEOFARG)!=0). 
13830 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
13840 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72  /* Content is ir
13850 72 65 6c 65 76 61 6e 74 20 66 6f 72 20 74 68 65  relevant for the
13860 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
13870 6f 6e 20 61 6e 64 20 66 6f 72 0a 20 20 20 20 20  on and for.     
13880 20 20 20 2a 2a 20 74 68 65 20 6c 65 6e 67 74 68     ** the length
13890 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20  (X) function if 
138a0 58 20 69 73 20 61 20 62 6c 6f 62 2e 20 20 53 6f  X is a blob.  So
138b0 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c   we might as wel
138c0 6c 20 75 73 65 0a 20 20 20 20 20 20 20 20 2a 2a  l use.        **
138d0 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72   bogus content r
138e0 61 74 68 65 72 20 74 68 61 6e 20 72 65 61 64 69  ather than readi
138f0 6e 67 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20  ng content from 
13900 64 69 73 6b 2e 20 20 4e 55 4c 4c 20 77 6f 72 6b  disk.  NULL work
13910 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72  s.        ** for
13920 20 74 65 78 74 20 61 6e 64 20 62 6c 6f 62 20 61   text and blob a
13930 6e 64 20 77 68 61 74 65 76 65 72 20 69 73 20 69  nd whatever is i
13940 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53 69 7a  n the payloadSiz
13950 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20 20 20  e64 variable.   
13960 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72       ** will wor
13970 6b 20 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67  k for everything
13980 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 20 20 20 20   else. */.      
13990 20 20 7a 44 61 74 61 20 3d 20 74 3c 31 32 20 3f    zData = t<12 ?
139a0 20 28 63 68 61 72 2a 29 26 70 61 79 6c 6f 61 64   (char*)&payload
139b0 53 69 7a 65 36 34 20 3a 20 30 3b 0a 20 20 20 20  Size64 : 0;.    
139c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
139d0 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64   len = sqlite3Vd
139e0 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
139f0 74 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  t);.        sqli
13a00 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26  te3VdbeMemMove(&
13a10 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20  sMem, pDest);.  
13a20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
13a30 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
13a40 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65  ee(pCrsr, aOffse
13a50 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 20 70 43 2d  t[p2], len,  pC-
13a60 3e 69 73 49 6e 64 65 78 2c 0a 20 20 20 20 20 20  >isIndex,.      
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26                 &
13a90 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
13aa0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
13ab0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
13ac0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
13ad0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
13ae0 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d      zData = sMem
13af0 2e 7a 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  .z;.      }.    
13b00 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
13b10 69 61 6c 47 65 74 28 28 75 38 2a 29 7a 44 61 74  ialGet((u8*)zDat
13b20 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20  a, t, pDest);.  
13b30 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e 65    }.    pDest->e
13b40 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
13b50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
13b60 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
13b70 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  MEM ){.      sql
13b80 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
13b90 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
13ba0 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
13bb0 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c  Static);.    }el
13bc0 73 65 7b 0a 20 20 20 20 20 20 4d 65 6d 53 65 74  se{.      MemSet
13bd0 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20  TypeFlag(pDest, 
13be0 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 7d  MEM_Null);.    }
13bf0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65  .  }..  /* If we
13c00 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
13c10 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f 20  ocated space to 
13c20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28 69  hold the data (i
13c30 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74  n the.  ** sqlit
13c40 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
13c50 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 29  ee() call above)
13c60 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72 20 63   then transfer c
13c70 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20  ontrol of that. 
13c80 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   ** dynamically 
13c90 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
13ca0 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44 65 73  over to the pDes
13cb0 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20 2a  t structure..  *
13cc0 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20  * This prevents 
13cd0 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20  a memory copy.. 
13ce0 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a   */.  if( sMem.z
13cf0 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73  Malloc ){.    as
13d00 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d  sert( sMem.z==sM
13d10 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20  em.zMalloc );.  
13d20 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73    assert( !(pDes
13d30 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  t->flags & MEM_D
13d40 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  yn) );.    asser
13d50 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67  t( !(pDest->flag
13d60 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
13d70 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74  M_Str)) || pDest
13d80 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20  ->z==sMem.z );. 
13d90 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
13da0 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d  &= ~(MEM_Ephem|M
13db0 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
13dc0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20  pDest->flags |= 
13dd0 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44  MEM_Term;.    pD
13de0 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b  est->z = sMem.z;
13df0 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c  .    pDest->zMal
13e00 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c  loc = sMem.zMall
13e10 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20  oc;.  }..  rc = 
13e20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61  sqlite3VdbeMemMa
13e30 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44 65 73  keWriteable(pDes
13e40 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  t);..op_column_o
13e50 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ut:.  UPDATE_MAX
13e60 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
13e70 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
13e80 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73  CE(pOp->p3, pDes
13e90 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
13ea0 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e  /* Opcode: Affin
13eb0 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ity P1 P2 * P4 *
13ec0 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66  .**.** Apply aff
13ed0 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e  inities to a ran
13ee0 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65  ge of P2 registe
13ef0 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  rs starting with
13f00 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73   P1..**.** P4 is
13f10 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
13f20 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
13f30 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68  long. The nth ch
13f40 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
13f50 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
13f60 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
13f70 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
13f80 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
13f90 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79  he nth.** memory
13fa0 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e   cell in the ran
13fb0 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ge..*/.case OP_A
13fc0 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e  ffinity: {.  con
13fd0 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  st char *zAffini
13fe0 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66  ty;   /* The aff
13ff0 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
14000 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41  ied */.  char cA
14010 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ff;             
14020 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68    /* A single ch
14030 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e  aracter of affin
14040 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e  ity */..  zAffin
14050 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
14060 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
14070 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73  nity!=0 );.  ass
14080 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70  ert( zAffinity[p
14090 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20  Op->p2]==0 );.  
140a0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
140b0 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20  ->p1];.  while( 
140c0 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e  (cAff = *(zAffin
140d0 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20  ity++))!=0 ){.  
140e0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c    assert( pIn1 <
140f0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d  = &p->aMem[p->nM
14100 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em] );.    asser
14110 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
14120 6e 31 29 20 29 3b 0a 20 20 20 20 45 78 70 61 6e  n1) );.    Expan
14130 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20  dBlob(pIn1);.   
14140 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
14150 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64  In1, cAff, encod
14160 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ing);.    pIn1++
14170 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
14180 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b  ../* Opcode: Mak
14190 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33  eRecord P1 P2 P3
141a0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76   P4 *.**.** Conv
141b0 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73  ert P2 registers
141c0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
141d0 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63  P1 into the [rec
141e0 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75  ord format].** u
141f0 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
14200 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
14210 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
14220 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
14230 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  ex.  The OP_Colu
14240 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
14250 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
14260 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  later..**.** P4 
14270 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
14280 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
14290 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
142a0 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
142b0 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
142c0 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
142d0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
142e0 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
142f0 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
14300 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e   field of the in
14310 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  dex key..**.** T
14320 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
14330 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
14340 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
14350 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
14360 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
14370 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
14380 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  .h..**.** If P4 
14390 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
143a0 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
143b0 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
143c0 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NONE..*/.case OP
143d0 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20  _MakeRecord: {. 
143e0 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b   u8 *zNewRecord;
143f0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66          /* A buf
14400 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  fer to hold the 
14410 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77  data for the new
14420 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
14430 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
14440 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
14450 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e  ecord */.  u64 n
14460 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
14470 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
14480 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
14490 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72  ce */.  int nHdr
144a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
144b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
144c0 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
144d0 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  e */.  i64 nByte
144e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
144f0 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
14500 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
14510 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a  cord */.  int nZ
14520 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20  ero;            
14530 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
14540 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
14550 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
14560 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69  d */.  int nVari
14570 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
14580 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
14590 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a   in a varint */.
145a0 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70    u32 serial_typ
145b0 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65  e;       /* Type
145c0 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20   field */.  Mem 
145d0 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20  *pData0;        
145e0 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c     /* First fiel
145f0 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64  d to be combined
14600 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
14610 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
14620 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14630 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68  Last field of th
14640 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
14650 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
14660 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14670 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
14680 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72  record */.  char
14690 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20   *zAffinity;    
146a0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
146b0 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
146c0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
146d0 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  t file_format;  
146e0 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72       /* File for
146f0 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65  mat to use for e
14700 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
14710 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
14720 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
14730 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
14740 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  ] */.  int len; 
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14760 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
14770 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
14780 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
14790 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
147a0 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
147b0 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
147c0 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
147d0 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
147e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
147f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14800 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14810 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
14820 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
14830 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
14840 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
14850 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
14860 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
14870 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
14880 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14890 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
148a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
148b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
148c0 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
148d0 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
148e0 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
148f0 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
14900 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
14910 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a  nd so froth..  *
14920 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
14930 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
14940 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
14950 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
14960 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
14970 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
14980 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
14990 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
149a0 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
149b0 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
149c0 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
149d0 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
149e0 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
149f0 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
14a00 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
14a10 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
14a20 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
14a30 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
14a40 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
14a50 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
14a60 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14a70 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
14a80 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
14a90 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
14aa0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
14ab0 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
14ac0 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
14ad0 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
14ae0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
14af0 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
14b00 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
14b10 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
14b20 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
14b30 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  ield<=p->nMem+1 
14b40 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61  );.  pData0 = &a
14b50 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e  Mem[nField];.  n
14b60 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b  Field = pOp->p2;
14b70 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
14b80 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20  a0[nField-1];.  
14b90 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d  file_format = p-
14ba0 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
14bb0 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74  mat;..  /* Ident
14bc0 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72  ify the output r
14bd0 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73  egister */.  ass
14be0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
14bf0 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p1 || pOp->p3>
14c00 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32  =pOp->p1+pOp->p2
14c10 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
14c20 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
14c30 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
14c40 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20  p, pOut);..  /* 
14c50 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65  Loop through the
14c60 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77   elements that w
14c70 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ill make up the 
14c80 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65  record to figure
14c90 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75  .  ** out how mu
14ca0 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75  ch space is requ
14cb0 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77  ired for the new
14cc0 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20   record..  */.  
14cd0 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
14ce0 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
14cf0 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  ec++){.    asser
14d00 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
14d10 65 63 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  ec) );.    if( z
14d20 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
14d30 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
14d40 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b  pRec, zAffinity[
14d50 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e  pRec-pData0], en
14d60 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20  coding);.    }. 
14d70 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
14d80 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70  gs&MEM_Zero && p
14d90 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20  Rec->n>0 ){.    
14da0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
14db0 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
14dc0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72 69  ;.    }.    seri
14dd0 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
14de0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
14df0 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
14e00 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71  t);.    len = sq
14e10 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14e20 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  ypeLen(serial_ty
14e30 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b  pe);.    nData +
14e40 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20  = len;.    nHdr 
14e50 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  += sqlite3Varint
14e60 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
14e70 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
14e80 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
14e90 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c   ){.      /* Onl
14ea0 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c  y pure zero-fill
14eb0 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65 20  ed BLOBs can be 
14ec0 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f 70  input to this Op
14ed0 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57  code..      ** W
14ee0 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62  e do not allow b
14ef0 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65 66  lobs with a pref
14f00 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69  ix and a zero-fi
14f10 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20  lled tail. */.  
14f20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
14f30 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
14f40 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29 7b  }else if( len ){
14f50 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  .      nZero = 0
14f60 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
14f70 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61  * Add the initia
14f80 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20  l header varint 
14f90 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69  and total the si
14fa0 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20  ze */.  nHdr += 
14fb0 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
14fc0 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
14fd0 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c  ;.  if( nVarint<
14fe0 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
14ff0 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e 48  (nHdr) ){.    nH
15000 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  dr++;.  }.  nByt
15010 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e  e = nHdr+nData-n
15020 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74  Zero;.  if( nByt
15030 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
15040 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
15050 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
15060 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
15070 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
15080 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
15090 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
150a0 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
150b0 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
150c0 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
150d0 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
150e0 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
150f0 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
15100 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
15110 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
15120 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
15130 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
15140 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
15150 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  w() could clobbe
15160 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
15170 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
15180 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
15190 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f  e3VdbeMemGrow(pO
151a0 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20  ut, (int)nByte, 
151b0 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  0) ){.    goto n
151c0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65  o_mem;.  }.  zNe
151d0 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29  wRecord = (u8 *)
151e0 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57  pOut->z;..  /* W
151f0 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  rite the record 
15200 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69  */.  i = putVari
15210 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c  nt32(zNewRecord,
15220 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52   nHdr);.  for(pR
15230 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
15240 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
15250 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
15260 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
15270 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66  rialType(pRec, f
15280 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20  ile_format);.   
15290 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33   i += putVarint3
152a0 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d  2(&zNewRecord[i]
152b0 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
152c0 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74       /* serial t
152d0 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72  ype */.  }.  for
152e0 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
152f0 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
15300 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20 64  +){  /* serial d
15310 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20  ata */.    i += 
15320 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15330 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64  lPut(&zNewRecord
15340 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74 65  [i], (int)(nByte
15350 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66  -i), pRec,file_f
15360 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73  ormat);.  }.  as
15370 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29  sert( i==nByte )
15380 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
15390 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
153a0 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
153b0 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
153c0 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  Byte;.  pOut->fl
153d0 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c  ags = MEM_Blob |
153e0 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74   MEM_Dyn;.  pOut
153f0 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66  ->xDel = 0;.  if
15400 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70  ( nZero ){.    p
15410 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e  Out->u.nZero = n
15420 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Zero;.    pOut->
15430 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72  flags |= MEM_Zer
15440 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  o;.  }.  pOut->e
15450 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
15460 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
15470 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
15480 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74  onverted to text
15490 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54   */.  REGISTER_T
154a0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
154b0 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
154c0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
154d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
154e0 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50   Opcode: Count P
154f0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
15500 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
15510 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
15520 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
15530 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
15540 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
15550 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
15560 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
15570 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
15580 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
15590 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
155a0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
155b0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
155c0 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74  i64 nEntry;.  Bt
155d0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a  Cursor *pCrsr;..
155e0 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43    pCrsr = p->apC
155f0 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75  sr[pOp->p1]->pCu
15600 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41  rsor;.  if( ALWA
15610 59 53 28 70 43 72 73 72 29 20 29 7b 0a 20 20 20  YS(pCrsr) ){.   
15620 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
15630 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26  eeCount(pCrsr, &
15640 6e 45 6e 74 72 79 29 3b 0a 20 20 7d 65 6c 73 65  nEntry);.  }else
15650 7b 0a 20 20 20 20 6e 45 6e 74 72 79 20 3d 20 30  {.    nEntry = 0
15660 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
15670 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72  i = nEntry;.  br
15680 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
15690 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f  * Opcode: Savepo
156a0 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  int P1 * * P4 *.
156b0 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65  **.** Open, rele
156c0 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20  ase or rollback 
156d0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61  the savepoint na
156e0 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72  med by parameter
156f0 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a   P4, depending.*
15700 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  * on the value o
15710 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20  f P1. To open a 
15720 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  new savepoint, P
15730 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65  1==0. To release
15740 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20   (commit) an.** 
15750 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
15760 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f  nt, P1==1, or to
15770 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69   rollback an exi
15780 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20  sting savepoint 
15790 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  P1==2..*/.case O
157a0 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20  P_Savepoint: {. 
157b0 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
157c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157d0 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20   /* Value of P1 
157e0 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61  operand */.  cha
157f0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15810 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e  Name of savepoin
15820 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65  t */.  int nName
15830 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
15840 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  New;.  Savepoint
15850 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20   *pSavepoint;.  
15860 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b  Savepoint *pTmp;
15870 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
15880 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20  t;.  int ii;..  
15890 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
158a0 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  zName = pOp->p4.
158b0 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20  z;..  /* Assert 
158c0 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61  that the p1 para
158d0 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20  meter is valid. 
158e0 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  Also that if the
158f0 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20  re is no open.  
15900 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
15910 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f  then there canno
15920 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69  t be any savepoi
15930 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73  nts. .  */.  ass
15940 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
15950 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75  int==0 || db->au
15960 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
15970 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56   assert( p1==SAV
15980 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31  EPOINT_BEGIN||p1
15990 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
159a0 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  ASE||p1==SAVEPOI
159b0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20  NT_ROLLBACK );. 
159c0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
159d0 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69  vepoint || db->i
159e0 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
159f0 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  point==0 );.  as
15a00 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70  sert( checkSavep
15a10 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b  ointCount(db) );
15a20 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
15a30 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66  sReader );..  if
15a40 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
15a50 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28  BEGIN ){.    if(
15a60 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
15a70 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20  0 ){.      /* A 
15a80 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61  new savepoint ca
15a90 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20  nnot be created 
15aa0 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74  if there are act
15ab0 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20  ive write .     
15ac0 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28   ** statements (
15ad0 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77  i.e. open read/w
15ae0 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c  rite incremental
15af0 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a   blob handles)..
15b00 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
15b10 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
15b20 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
15b30 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61   "cannot open sa
15b40 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20  vepoint - ".    
15b50 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
15b60 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
15b70 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
15b80 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
15b90 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d  else{.      nNam
15ba0 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  e = sqlite3Strle
15bb0 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66  n30(zName);..#if
15bc0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
15bd0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
15be0 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c      /* This call
15bf0 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74   is Ok even if t
15c00 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73  his savepoint is
15c10 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e   actually a tran
15c20 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a  saction.      **
15c30 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20   savepoint (and 
15c40 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64  therefore should
15c50 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76   not prompt xSav
15c60 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61  epoint()) callba
15c70 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66  cks..      ** If
15c80 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
15c90 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
15ca0 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69   being opened, i
15cb0 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a  t is guaranteed.
15cc0 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68        ** that th
15cd0 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20  e db->aVTrans[] 
15ce0 61 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20  array is empty. 
15cf0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
15d00 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
15d10 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61  ==0 || db->nVTra
15d20 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72  ns==0 );.      r
15d30 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
15d40 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56  avepoint(db, SAV
15d50 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20  EPOINT_BEGIN,.  
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62                db
15d80 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d  ->nStatement+db-
15d90 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20  >nSavepoint);.  
15da0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
15db0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
15dc0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
15dd0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f  .#endif..      /
15de0 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73  * Create a new s
15df0 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75  avepoint structu
15e00 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65  re. */.      pNe
15e10 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  w = sqlite3DbMal
15e20 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f  locRaw(db, sizeo
15e30 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61  f(Savepoint)+nNa
15e40 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28  me+1);.      if(
15e50 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20   pNew ){.       
15e60 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28   pNew->zName = (
15e70 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b  char *)&pNew[1];
15e80 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28  .        memcpy(
15e90 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  pNew->zName, zNa
15ea0 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  me, nName+1);.  
15eb0 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66    .        /* If
15ec0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
15ed0 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  n transaction, t
15ee0 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73  hen mark this as
15ef0 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20   a special.     
15f00 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69     ** "transacti
15f10 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a  on savepoint". *
15f20 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62  /.        if( db
15f30 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
15f40 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
15f50 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
15f60 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
15f70 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
15f80 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt = 1;.        
15f90 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
15fa0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b   db->nSavepoint+
15fb0 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  +;.        }.   
15fc0 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e   .        /* Lin
15fd0 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f  k the new savepo
15fe0 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  int into the dat
15ff0 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c  abase handle's l
16000 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ist. */.        
16010 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62  pNew->pNext = db
16020 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
16030 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
16040 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20  oint = pNew;.   
16050 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
16060 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  rredCons = db->n
16070 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
16080 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66        pNew->nDef
16090 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64  erredImmCons = d
160a0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
160b0 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ons;.      }.   
160c0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
160d0 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  iSavepoint = 0;.
160e0 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  .    /* Find the
160f0 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74   named savepoint
16100 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  . If there is no
16110 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c   such savepoint,
16120 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20   then an.    ** 
16130 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  an error is retu
16140 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  rned to the user
16150 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20  .  */.    for(. 
16160 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
16170 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
16180 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  ; .      pSavepo
16190 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74  int && sqlite3St
161a0 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74  rICmp(pSavepoint
161b0 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b  ->zName, zName);
161c0 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
161d0 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  t = pSavepoint->
161e0 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20  pNext.    ){.   
161f0 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b     iSavepoint++;
16200 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21  .    }.    if( !
16210 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20  pSavepoint ){.  
16220 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
16230 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
16240 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73  , db, "no such s
16250 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a  avepoint: %s", z
16260 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20  Name);.      rc 
16270 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
16280 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62      }else if( db
16290 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26  ->nVdbeWrite>0 &
162a0 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
162b0 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
162c0 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f   /* It is not po
162d0 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73  ssible to releas
162e0 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76  e (commit) a sav
162f0 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20  epoint if there 
16300 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63  are .      ** ac
16310 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65  tive write state
16320 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a  ments..      */.
16330 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
16340 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
16350 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20  sg, db, .       
16360 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65   "cannot release
16370 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c   savepoint - SQL
16380 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
16390 72 6f 67 72 65 73 73 22 0a 20 20 20 20 20 20 29  rogress".      )
163a0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
163b0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
163c0 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  lse{..      /* D
163d0 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
163e0 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20   or not this is 
163f0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
16400 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a  vepoint. If so,.
16410 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69        ** and thi
16420 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63  s is a RELEASE c
16430 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65  ommand, then the
16440 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
16450 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69  tion .      ** i
16460 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20  s committed. .  
16470 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74      */.      int
16480 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d   isTransaction =
16490 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
164a0 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54  xt==0 && db->isT
164b0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
164c0 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69  int;.      if( i
164d0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20  sTransaction && 
164e0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
164f0 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
16500 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
16510 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
16520 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
16530 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
16540 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
16550 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
16560 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
16570 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
16580 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
16590 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
165a0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   ){.          p-
165b0 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
165c0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
165d0 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  it = 0;.        
165e0 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
165f0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
16600 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
16610 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
16620 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73  }.        db->is
16630 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
16640 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  oint = 0;.      
16650 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20    rc = p->rc;.  
16660 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
16670 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20     iSavepoint = 
16680 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d  db->nSavepoint -
16690 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b   iSavepoint - 1;
166a0 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d  .        if( p1=
166b0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
166c0 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ACK ){.         
166d0 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
166e0 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
166f0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
16700 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72  3BtreeTripAllCur
16710 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d  sors(db->aDb[ii]
16720 2e 70 42 74 2c 20 53 51 4c 49 54 45 5f 41 42 4f  .pBt, SQLITE_ABO
16730 52 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  RT);.          }
16740 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
16750 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
16760 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
16770 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
16780 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70  qlite3BtreeSavep
16790 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d  oint(db->aDb[ii]
167a0 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70  .pBt, p1, iSavep
167b0 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  oint);.         
167c0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
167d0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
167e0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
167f0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
16800 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
16810 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d  .        if( p1=
16820 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
16830 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67  ACK && (db->flag
16840 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  s&SQLITE_InternC
16850 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20  hanges)!=0 ){.  
16860 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
16870 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
16880 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
16890 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65         sqlite3Re
168a0 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
168b0 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20  onnection(db);. 
168c0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61           db->fla
168d0 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20  gs = (db->flags 
168e0 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  | SQLITE_InternC
168f0 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20  hanges);.       
16900 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20   }.      }.  .  
16910 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73      /* Regardles
16920 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69  s of whether thi
16930 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f  s is a RELEASE o
16940 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74  r ROLLBACK, dest
16950 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a  roy all .      *
16960 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73  * savepoints nes
16970 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68  ted inside of th
16980 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
16990 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a  g operated on. *
169a0 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64  /.      while( d
169b0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70  b->pSavepoint!=p
169c0 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
169d0 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e       pTmp = db->
169e0 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
169f0 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
16a00 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74  nt = pTmp->pNext
16a10 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
16a20 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70  3DbFree(db, pTmp
16a30 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
16a40 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
16a50 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
16a60 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53  f it is a RELEAS
16a70 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20  E, then destroy 
16a80 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
16a90 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20  ing operated on 
16aa0 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49  .      ** too. I
16ab0 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41  f it is a ROLLBA
16ac0 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20  CK TO, then set 
16ad0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65  the number of de
16ae0 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a  ferred .      **
16af0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
16b00 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69  ations present i
16b10 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
16b20 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  o the value stor
16b30 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e  ed.      ** when
16b40 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77   the savepoint w
16b50 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a  as created.  */.
16b60 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
16b70 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
16b80 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
16b90 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64  t( pSavepoint==d
16ba0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b  b->pSavepoint );
16bb0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
16bc0 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
16bd0 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  oint->pNext;.   
16be0 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
16bf0 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e  ee(db, pSavepoin
16c00 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
16c10 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29  !isTransaction )
16c20 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
16c30 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
16c40 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
16c50 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  lse{.        db-
16c60 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
16c70 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
16c80 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
16c90 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
16ca0 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65  dImmCons = pSave
16cb0 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64  point->nDeferred
16cc0 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  ImmCons;.      }
16cd0 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54  ..      if( !isT
16ce0 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ransaction ){.  
16cf0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
16d00 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
16d10 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  db, p1, iSavepoi
16d20 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
16d30 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
16d40 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
16d50 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
16d60 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62  }.    }.  }..  b
16d70 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
16d80 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50  de: AutoCommit P
16d90 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
16da0 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73   Set the databas
16db0 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
16dc0 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30  ag to P1 (1 or 0
16dd0 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65  ). If P2 is true
16de0 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61  , roll.** back a
16df0 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74  ny currently act
16e00 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61  ive btree transa
16e10 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65  ctions. If there
16e20 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a   are any active.
16e30 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72  ** VMs (apart fr
16e40 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68  om this one), th
16e50 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61  en a ROLLBACK fa
16e60 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66  ils.  A COMMIT f
16e70 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65  ails if.** there
16e80 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
16e90 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76  ing VMs or activ
16ea0 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73  e VMs that use s
16eb0 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a  hared cache..**.
16ec0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
16ed0 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56  ion causes the V
16ee0 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61  M to halt..*/.ca
16ef0 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74  se OP_AutoCommit
16f00 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65  : {.  int desire
16f10 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69  dAutoCommit;.  i
16f20 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20  nt iRollback;.  
16f30 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20  int turnOnAC;.. 
16f40 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
16f50 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  it = pOp->p1;.  
16f60 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d  iRollback = pOp-
16f70 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20  >p2;.  turnOnAC 
16f80 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  = desiredAutoCom
16f90 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f  mit && !db->auto
16fa0 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74  Commit;.  assert
16fb0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
16fc0 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65  mit==1 || desire
16fd0 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  dAutoCommit==0 )
16fe0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
16ff0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
17000 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30   || iRollback==0
17010 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
17020 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20  ->nVdbeActive>0 
17030 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20  );  /* At least 
17040 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61  this one VM is a
17050 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72  ctive */.  asser
17060 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
17070 29 3b 0a 0a 23 69 66 20 30 0a 20 20 69 66 28 20  );..#if 0.  if( 
17080 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c  turnOnAC && iRol
17090 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64  lback && db->nVd
170a0 62 65 41 63 74 69 76 65 3e 31 20 29 7b 0a 20 20  beActive>1 ){.  
170b0 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
170c0 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
170d0 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61  nts a ROLLBACK a
170e0 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  nd other VMs are
170f0 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75  .    ** still ru
17100 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61  nning, and a tra
17110 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
17120 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72  ve, return an er
17130 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20  ror indicating. 
17140 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f     ** that the o
17150 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
17160 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
17170 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
17180 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
17190 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
171a0 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61  not rollback tra
171b0 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
171c0 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
171d0 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
171e0 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  ");.    rc = SQL
171f0 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
17200 65 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 74  e.#endif.  if( t
17210 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c  urnOnAC && !iRol
17220 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64  lback && db->nVd
17230 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20  beWrite>0 ){.   
17240 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
17250 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
17260 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20  ts a COMMIT and 
17270 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72  other VMs are wr
17280 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74  iting.    ** ret
17290 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64  urn an error ind
172a0 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65  icating that the
172b0 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
172c0 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
172d0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
172e0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
172f0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
17300 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61  annot commit tra
17310 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
17320 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
17330 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
17340 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  ");.    rc = SQL
17350 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
17360 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74  e if( desiredAut
17370 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74  oCommit!=db->aut
17380 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69  oCommit ){.    i
17390 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a  f( iRollback ){.
173a0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65        assert( de
173b0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
173c0 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =1 );.      sqli
173d0 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64  te3RollbackAll(d
173e0 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f  b, SQLITE_ABORT_
173f0 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20  ROLLBACK);.     
17400 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
17410 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 1;.    }else i
17420 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  f( (rc = sqlite3
17430 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31  VdbeCheckFk(p, 1
17440 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  ))!=SQLITE_OK ){
17450 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
17460 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c  _return;.    }el
17470 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  se{.      db->au
17480 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64  toCommit = (u8)d
17490 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
174a0 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
174b0 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
174c0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
174d0 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70         p->pc = p
174e0 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61  c;.        db->a
174f0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
17500 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f  (1-desiredAutoCo
17510 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70  mmit);.        p
17520 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
17530 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20  TE_BUSY;.       
17540 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
17550 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  n;.      }.    }
17560 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
17570 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29  >nStatement==0 )
17580 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f  ;.    sqlite3Clo
17590 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29  seSavepoints(db)
175a0 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d  ;.    if( p->rc=
175b0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
175c0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
175d0 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  DONE;.    }else{
175e0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
175f0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  TE_ERROR;.    }.
17600 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
17610 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  turn;.  }else{. 
17620 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
17630 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
17640 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64   db,.        (!d
17650 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17660 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20  )?"cannot start 
17670 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69  a transaction wi
17680 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
17690 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69  on":(.        (i
176a0 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f  Rollback)?"canno
176b0 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20  t rollback - no 
176c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
176d0 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20  ctive":.        
176e0 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e             "cann
176f0 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74  ot commit - no t
17700 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
17710 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20  tive"));.       
17720 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49    .    rc = SQLI
17730 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
17740 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
17750 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e  ode: Transaction
17760 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
17770 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73  ** Begin a trans
17780 61 63 74 69 6f 6e 2e 20 20 54 68 65 20 74 72 61  action.  The tra
17790 6e 73 61 63 74 69 6f 6e 20 65 6e 64 73 20 77 68  nsaction ends wh
177a0 65 6e 20 61 20 43 6f 6d 6d 69 74 20 6f 72 20 52  en a Commit or R
177b0 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64  ollback.** opcod
177c0 65 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  e is encountered
177d0 2e 20 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20  .  Depending on 
177e0 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
177f0 73 65 74 74 69 6e 67 2c 20 74 68 65 0a 2a 2a 20  setting, the.** 
17800 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68  transaction migh
17810 74 20 61 6c 73 6f 20 62 65 20 72 6f 6c 6c 65 64  t also be rolled
17820 20 62 61 63 6b 20 69 66 20 61 6e 20 65 72 72 6f   back if an erro
17830 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
17840 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
17850 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
17860 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20  atabase file on 
17870 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61  which the transa
17880 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72  ction is.** star
17890 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73  ted.  Index 0 is
178a0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
178b0 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65  se file and inde
178c0 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69  x 1 is the.** fi
178d0 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  le used for temp
178e0 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49  orary tables.  I
178f0 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d  ndices of 2 or m
17900 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72  ore are used for
17910 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74  .** attached dat
17920 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  abases..**.** If
17930 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P2 is non-zero,
17940 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72   then a write-tr
17950 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
17960 72 74 65 64 2e 20 20 41 20 52 45 53 45 52 56 45  rted.  A RESERVE
17970 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62 74  D lock is.** obt
17980 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74  ained on the dat
17990 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20  abase file when 
179a0 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
179b0 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20  ion is started. 
179c0 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20 70 72 6f   No.** other pro
179d0 63 65 73 73 20 63 61 6e 20 73 74 61 72 74 20 61  cess can start a
179e0 6e 6f 74 68 65 72 20 77 72 69 74 65 20 74 72 61  nother write tra
179f0 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c 65 20 74  nsaction while t
17a00 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  his transaction 
17a10 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61 79 2e 20  is.** underway. 
17a20 20 53 74 61 72 74 69 6e 67 20 61 20 77 72 69 74   Starting a writ
17a30 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  e transaction al
17a40 73 6f 20 63 72 65 61 74 65 73 20 61 20 72 6f 6c  so creates a rol
17a50 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41  lback journal. A
17a60 0a 2a 2a 20 77 72 69 74 65 20 74 72 61 6e 73 61  .** write transa
17a70 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74  ction must be st
17a80 61 72 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79  arted before any
17a90 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20   changes can be 
17aa0 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a 2a 20 64  made to the.** d
17ab0 61 74 61 62 61 73 65 2e 20 20 49 66 20 50 32 20  atabase.  If P2 
17ac0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
17ad0 6f 72 20 65 71 75 61 6c 20 74 6f 20 32 20 74 68  or equal to 2 th
17ae0 65 6e 20 61 6e 20 45 58 43 4c 55 53 49 56 45 20  en an EXCLUSIVE 
17af0 6c 6f 63 6b 20 69 73 0a 2a 2a 20 61 6c 73 6f 20  lock is.** also 
17b00 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20  obtained on the 
17b10 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  file..**.** If a
17b20 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
17b30 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e  on is started an
17b40 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53  d the Vdbe.usesS
17b50 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20  tmtJournal flag 
17b60 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73  is.** true (this
17b70 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20   flag is set if 
17b80 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64  the Vdbe may mod
17b90 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ify more than on
17ba0 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a  e row and may.**
17bb0 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
17bc0 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74  exception), a st
17bd0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
17be0 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ion may also be 
17bf0 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20  opened..** More 
17c00 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20  specifically, a 
17c10 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
17c20 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20  ction is opened 
17c30 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65  iff the database
17c40 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  .** connection i
17c50 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20  s currently not 
17c60 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f  in autocommit mo
17c70 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20  de, or if there 
17c80 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74  are other.** act
17c90 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  ive statements. 
17ca0 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  A statement tran
17cb0 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74  saction allows t
17cc0 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  he changes made 
17cd0 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20  by this.** VDBE 
17ce0 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
17cf0 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
17d00 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20   without having 
17d10 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65  to roll back the
17d20 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73  .** entire trans
17d30 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72  action. If no er
17d40 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
17d50 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ed, the statemen
17d60 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
17d70 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
17d80 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20  lly commit when 
17d90 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a  the VDBE halts..
17da0 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a  **.** If P2 is z
17db0 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64  ero, then a read
17dc0 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65  -lock is obtaine
17dd0 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  d on the databas
17de0 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  e file..*/.case 
17df0 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20  OP_Transaction: 
17e00 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  {.  Btree *pBt;.
17e10 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
17e20 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73  sReader );.  ass
17e30 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
17e40 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d  ==0 || pOp->p2==
17e50 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
17e60 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
17e70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
17e80 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
17e90 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
17ea0 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31  Mask)1)<<pOp->p1
17eb0 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  ))!=0 );.  if( p
17ec0 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66  Op->p2 && (db->f
17ed0 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75  lags & SQLITE_Qu
17ee0 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20  eryOnly)!=0 ){. 
17ef0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52     rc = SQLITE_R
17f00 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74  EADONLY;.    got
17f10 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
17f20 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20  rror;.  }.  pBt 
17f30 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
17f40 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70  1].pBt;..  if( p
17f50 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  Bt ){.    rc = s
17f60 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
17f70 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e  Trans(pBt, pOp->
17f80 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  p2);.    if( rc=
17f90 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
17fa0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
17fb0 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
17fc0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17fd0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
17fe0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
17ff0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
18000 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
18010 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
18020 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20  _error;.    }.. 
18030 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26     if( pOp->p2 &
18040 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  & p->usesStmtJou
18050 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64  rnal .     && (d
18060 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
18070 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61   || db->nVdbeRea
18080 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20  d>1) .    ){.   
18090 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
180a0 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
180b0 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69  (pBt) );.      i
180c0 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  f( p->iStatement
180d0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ==0 ){.        a
180e0 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
180f0 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e  ement>=0 && db->
18100 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b  nSavepoint>=0 );
18110 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74  .        db->nSt
18120 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20  atement++; .    
18130 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e      p->iStatemen
18140 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
18150 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d  nt + db->nStatem
18160 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ent;.      }..  
18170 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
18180 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
18190 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  , SAVEPOINT_BEGI
181a0 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  N, p->iStatement
181b0 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  -1);.      if( r
181c0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
181d0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
181e0 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74  ite3BtreeBeginSt
181f0 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74  mt(pBt, p->iStat
18200 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a  ement);.      }.
18210 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20  .      /* Store 
18220 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
18230 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
18240 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72  e handles deferr
18250 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20  ed constraint.  
18260 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20      ** counter. 
18270 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
18280 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65   transaction nee
18290 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
182a0 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74  back,.      ** t
182b0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  he value of this
182c0 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74   counter needs t
182d0 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f  o be restored to
182e0 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e  o.  */.      p->
182f0 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64  nStmtDefCons = d
18300 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
18310 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74  ;.      p->nStmt
18320 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d  DefImmCons = db-
18330 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
18340 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  s;.    }.  }.  b
18350 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
18360 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50  de: ReadCookie P
18370 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
18380 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75  * Read cookie nu
18390 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74  mber P3 from dat
183a0 61 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69  abase P1 and wri
183b0 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73  te it into regis
183c0 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31  ter P2..** P3==1
183d0 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76   is the schema v
183e0 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69  ersion.  P3==2 i
183f0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
18400 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20  ormat..** P3==3 
18410 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
18420 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73  ed pager cache s
18430 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ize, and so fort
18440 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20  h.  P1==0 is.** 
18450 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
18460 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
18470 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
18480 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
18490 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  ore.** temporary
184a0 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   tables..**.** T
184b0 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72  here must be a r
184c0 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead-lock on the 
184d0 64 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72  database (either
184e0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a   a transaction.*
184f0 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  * must be starte
18500 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20  d or there must 
18510 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f  be an open curso
18520 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65  r) before.** exe
18530 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74  cuting this inst
18540 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
18550 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20   OP_ReadCookie: 
18560 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
18570 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
18580 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74  se */.  int iMet
18590 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  a;.  int iDb;.  
185a0 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20  int iCookie;..  
185b0 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
185c0 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20  ader );.  iDb = 
185d0 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b  pOp->p1;.  iCook
185e0 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
185f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
18600 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
18610 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
18620 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
18630 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
18640 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
18650 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
18660 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
18670 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
18680 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  1)<<iDb))!=0 );.
18690 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47  .  sqlite3BtreeG
186a0 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
186b0 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65  Db].pBt, iCookie
186c0 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
186d0 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
186e0 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a  iMeta;.  break;.
186f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
18700 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
18710 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
18720 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
18730 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74  register P3 (int
18740 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
18750 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20  nteger).** into 
18760 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
18770 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
18780 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73    P2==1 is the s
18790 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
187a0 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65  .** P2==2 is the
187b0 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
187c0 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72  . P2==3 is the r
187d0 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
187e0 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c   cache .** size,
187f0 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
18800 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69  P1==0 is the mai
18810 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
18820 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
18830 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69   .** database fi
18840 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
18850 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
18860 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73  s..**.** A trans
18870 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
18880 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78  tarted before ex
18890 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63  ecuting this opc
188a0 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
188b0 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  SetCookie: {    
188c0 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44     /* in3 */.  D
188d0 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74  b *pDb;.  assert
188e0 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45  ( pOp->p2<SQLITE
188f0 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
18900 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
18910 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
18920 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
18930 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
18940 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
18950 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d  )1)<<pOp->p1))!=
18960 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
18970 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
18980 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
18990 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
189a0 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
189b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
189c0 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
189d0 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70  xHeld(db, pOp->p
189e0 31 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33 20  1, 0) );.  pIn3 
189f0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
18a00 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
18a10 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
18a20 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74  3);.  /* See not
18a30 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68  e about index sh
18a40 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61  ifting on OP_Rea
18a50 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20  dCookie */.  rc 
18a60 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70  = sqlite3BtreeUp
18a70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42  dateMeta(pDb->pB
18a80 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74  t, pOp->p2, (int
18a90 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69  )pIn3->u.i);.  i
18aa0 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
18ab0 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
18ac0 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20   ){.    /* When 
18ad0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
18ae0 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72  e changes, recor
18af0 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65  d the new cookie
18b00 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20   internally */. 
18b10 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
18b20 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d  >schema_cookie =
18b30 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b   (int)pIn3->u.i;
18b40 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  .    db->flags |
18b50 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  = SQLITE_InternC
18b60 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20  hanges;.  }else 
18b70 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
18b80 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29  EE_FILE_FORMAT )
18b90 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20  {.    /* Record 
18ba0 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66  changes in the f
18bb0 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20  ile format */.  
18bc0 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
18bd0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75  file_format = (u
18be0 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d  8)pIn3->u.i;.  }
18bf0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
18c00 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61  1 ){.    /* Inva
18c10 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61  lidate all prepa
18c20 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
18c30 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50  henever the TEMP
18c40 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a   database.    **
18c50 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67   schema is chang
18c60 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34  ed.  Ticket #164
18c70 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  4 */.    sqlite3
18c80 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
18c90 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
18ca0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
18cb0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
18cc0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72  ../* Opcode: Ver
18cd0 69 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  ifyCookie P1 P2 
18ce0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  P3 * *.**.** Che
18cf0 63 6b 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ck the value of 
18d00 67 6c 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20  global database 
18d10 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
18d20 20 30 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d   0 (the.** schem
18d30 61 20 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d  a version) and m
18d40 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 65  ake sure it is e
18d50 71 75 61 6c 20 74 6f 20 50 32 20 61 6e 64 20 74  qual to P2 and t
18d60 68 61 74 20 74 68 65 0a 2a 2a 20 67 65 6e 65 72  hat the.** gener
18d70 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 6f 6e  ation counter on
18d80 20 74 68 65 20 6c 6f 63 61 6c 20 73 63 68 65 6d   the local schem
18d90 61 20 70 61 72 73 65 20 65 71 75 61 6c 73 20 50  a parse equals P
18da0 33 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  3..**.** P1 is t
18db0 68 65 20 64 61 74 61 62 61 73 65 20 6e 75 6d 62  he database numb
18dc0 65 72 20 77 68 69 63 68 20 69 73 20 30 20 66 6f  er which is 0 fo
18dd0 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
18de0 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20  ase file.** and 
18df0 31 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 68  1 for the file h
18e00 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61 72 79  olding temporary
18e10 20 74 61 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65   tables and some
18e20 20 68 69 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a   higher number.*
18e30 2a 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20  * for auxiliary 
18e40 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a  databases..**.**
18e50 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e   The cookie chan
18e60 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68  ges its value wh
18e70 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
18e80 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
18e90 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  es..** This oper
18ea0 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ation is used to
18eb0 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61   detect when tha
18ec0 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73  t the cookie has
18ed0 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20   changed.** and 
18ee0 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74  that the current
18ef0 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74   process needs t
18f00 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68  o reread the sch
18f10 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65  ema..**.** Eithe
18f20 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  r a transaction 
18f30 6e 65 65 64 73 20 74 6f 20 68 61 76 65 20 62 65  needs to have be
18f40 65 6e 20 73 74 61 72 74 65 64 20 6f 72 20 61 6e  en started or an
18f50 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a   OP_Open needs.*
18f60 2a 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64  * to be executed
18f70 20 28 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61   (to establish a
18f80 20 72 65 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f   read lock) befo
18f90 72 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  re this opcode i
18fa0 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f  s.** invoked..*/
18fb0 0a 63 61 73 65 20 4f 50 5f 56 65 72 69 66 79 43  .case OP_VerifyC
18fc0 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69  ookie: {.  int i
18fd0 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e  Meta;.  int iGen
18fe0 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  ;.  Btree *pBt;.
18ff0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
19000 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
19010 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
19020 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
19030 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
19040 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d  )1)<<pOp->p1))!=
19050 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
19060 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
19070 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70  xHeld(db, pOp->p
19080 31 2c 20 30 29 20 29 3b 0a 20 20 61 73 73 65 72  1, 0) );.  asser
19090 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
190a0 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
190b0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
190c0 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20  .  if( pBt ){.  
190d0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
190e0 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45  tMeta(pBt, BTREE
190f0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c  _SCHEMA_VERSION,
19100 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
19110 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e  .    iGen = db->
19120 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
19130 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f  hema->iGeneratio
19140 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  n;.  }else{.    
19150 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30  iGen = iMeta = 0
19160 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 4d 65 74  ;.  }.  if( iMet
19170 61 21 3d 70 4f 70 2d 3e 70 32 20 7c 7c 20 69 47  a!=pOp->p2 || iG
19180 65 6e 21 3d 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  en!=pOp->p3 ){. 
19190 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
191a0 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
191b0 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
191c0 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44   = sqlite3DbStrD
191d0 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65  up(db, "database
191e0 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
191f0 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66  ged");.    /* If
19200 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   the schema-cook
19210 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ie from the data
19220 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65  base file matche
19230 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20  s the cookie .  
19240 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68    ** stored with
19250 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72   the in-memory r
19260 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
19270 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a   the schema, do.
19280 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61      ** not reloa
19290 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f  d the schema fro
192a0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
192b0 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ile..    **.    
192c0 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61  ** If virtual-ta
192d0 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c  bles are in use,
192e0 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73   this is not jus
192f0 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  t an optimizatio
19300 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c  n..    ** Often,
19310 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20   v-tables store 
19320 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74  their data in ot
19330 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65  her SQLite table
19340 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20  s, which.    ** 
19350 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d  are queried from
19360 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20   within xNext() 
19370 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c  and other v-tabl
19380 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a  e methods using.
19390 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20      ** prepared 
193a0 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68  queries. If such
193b0 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d   a query is out-
193c0 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e  of-date, we do n
193d0 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a  ot want to.    *
193e0 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61  * discard the da
193f0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61  tabase schema, a
19400 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20  s the user code 
19410 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65  implementing the
19420 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20  .    ** v-table 
19430 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65  would have to be
19440 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73   ready for the s
19450 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
19460 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20  cture itself.   
19470 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69   ** to be invali
19480 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73  dated whenever s
19490 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73  qlite3_step() is
194a0 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
194b0 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d  hin .    ** a v-
194c0 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20  table method..  
194d0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d    */.    if( db-
194e0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
194f0 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
19500 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20  okie!=iMeta ){. 
19510 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
19520 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70  tOneSchema(db, p
19530 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a  Op->p1);.    }..
19540 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
19550 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   1;.    rc = SQL
19560 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a  ITE_SCHEMA;.  }.
19570 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19580 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20  pcode: OpenRead 
19590 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
195a0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
195b0 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72  -only cursor for
195c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
195d0 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  ble whose root p
195e0 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20  age is.** P2 in 
195f0 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  a database file.
19600 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66    The database f
19610 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ile is determine
19620 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d  d by P3. .** P3=
19630 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69  =0 means the mai
19640 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d  n database, P3==
19650 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  1 means the data
19660 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a  base used for .*
19670 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
19680 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61  es, and P3>1 mea
19690 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72  ns used the corr
196a0 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68  esponding attach
196b0 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  ed.** database. 
196c0 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75   Give the new cu
196d0 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69  rsor an identifi
196e0 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50  er of P1.  The P
196f0 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64  1.** values need
19700 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f   not be contiguo
19710 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61  us but all P1 va
19720 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73  lues should be s
19730 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a  mall integers..*
19740 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  * It is an error
19750 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65   for P1 to be ne
19760 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  gative..**.** If
19770 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20   P5!=0 then use 
19780 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
19790 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68  egister P2 as th
197a0 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74  e root page, not
197b0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
197c0 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a   P2 itself..**.*
197d0 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20  * There will be 
197e0 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74  a read lock on t
197f0 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e  he database when
19800 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e  ever there is an
19810 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e  .** open cursor.
19820 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73    If the databas
19830 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70  e was unlocked p
19840 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73  rior to this ins
19850 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e  truction.** then
19860 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20   a read lock is 
19870 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74  acquired as part
19880 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   of this instruc
19890 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a  tion.  A read.**
198a0 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68   lock allows oth
198b0 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20  er processes to 
198c0 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
198d0 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a  e but prohibits.
198e0 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f  ** any other pro
198f0 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79  cess from modify
19900 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
19910 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b  .  The read lock
19920 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20   is.** released 
19930 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73  when all cursors
19940 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66   are closed.  If
19950 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
19960 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f  n attempts.** to
19970 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b   get a read lock
19980 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20   but fails, the 
19990 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65  script terminate
199a0 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c  s with an.** SQL
199b0 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63  ITE_BUSY error c
199c0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ode..**.** The P
199d0 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
199e0 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
199f0 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
19a00 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
19a10 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
19a20 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
19a30 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
19a40 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
19a50 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
19a60 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
19a70 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
19a80 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
19a90 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
19aa0 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
19ab0 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
19ac0 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
19ad0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
19ae0 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
19af0 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
19b00 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
19b10 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  e table..**.** S
19b20 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74  ee also OpenWrit
19b30 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
19b40 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32   OpenWrite P1 P2
19b50 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
19b60 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74  Open a read/writ
19b70 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50  e cursor named P
19b80 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  1 on the table o
19b90 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
19ba0 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32  ot.** page is P2
19bb0 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75  .  Or if P5!=0 u
19bc0 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
19bd0 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  f register P2 to
19be0 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f   find the.** roo
19bf0 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  t page..**.** Th
19c00 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
19c10 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
19c20 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
19c30 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
19c40 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
19c50 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
19c60 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
19c70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
19c80 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
19c90 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
19ca0 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
19cb0 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
19cc0 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
19cd0 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
19ce0 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
19cf0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
19d00 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
19d10 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
19d20 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
19d30 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
19d40 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74   the table, or t
19d50 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74  o the.** largest
19d60 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f   index of any co
19d70 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c  lumn of the tabl
19d80 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c  e that is actual
19d90 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  ly used..**.** T
19da0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
19db0 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
19dc0 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20  OpenRead except 
19dd0 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68  that it opens th
19de0 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72  e cursor.** in r
19df0 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20  ead/write mode. 
19e00 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62   For a given tab
19e10 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65  le, there can be
19e20 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61   one or more rea
19e30 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72  d-only.** cursor
19e40 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65  s or a single re
19e50 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
19e60 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a  but not both..**
19e70 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
19e80 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nRead..*/.case O
19e90 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65  P_OpenRead:.case
19ea0 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b   OP_OpenWrite: {
19eb0 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
19ec0 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
19ed0 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  fo;.  int p2;.  
19ee0 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77  int iDb;.  int w
19ef0 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a  rFlag;.  Btree *
19f00 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  pX;.  VdbeCursor
19f10 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44   *pCur;.  Db *pD
19f20 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 28 70  b;..  assert( (p
19f30 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50  Op->p5&(OPFLAG_P
19f40 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55  2ISREG|OPFLAG_BU
19f50 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70 35  LKCSR))==pOp->p5
19f60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
19f70 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
19f80 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e  enWrite || pOp->
19f90 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p5==0 );.  asser
19fa0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
19fb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
19fc0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
19fd0 6e 52 65 61 64 20 7c 7c 20 70 2d 3e 72 65 61 64  nRead || p->read
19fe0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66  Only==0 );..  if
19ff0 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a  ( p->expired ){.
1a000 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1a010 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b  ABORT;.    break
1a020 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
1a030 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  = 0;.  pKeyInfo 
1a040 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  = 0;.  p2 = pOp-
1a050 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  >p2;.  iDb = pOp
1a060 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
1a070 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
1a080 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1a090 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
1a0a0 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
1a0b0 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20  <<iDb))!=0 );.  
1a0c0 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
1a0d0 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d  Db];.  pX = pDb-
1a0e0 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  >pBt;.  assert( 
1a0f0 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pX!=0 );.  if( p
1a100 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1a110 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20  penWrite ){.    
1a120 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20  wrFlag = 1;.    
1a130 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1a140 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1a150 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
1a160 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
1a170 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1a180 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
1a190 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
1a1a0 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1a1b0 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
1a1c0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1a1d0 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
1a1e0 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
1a1f0 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
1a200 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32  ->p5 & OPFLAG_P2
1a210 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73  ISREG ){.    ass
1a220 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20  ert( p2>0 );.   
1a230 20 61 73 73 65 72 74 28 20 70 32 3c 3d 70 2d 3e   assert( p2<=p->
1a240 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 70 49 6e 32  nMem );.    pIn2
1a250 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20   = &aMem[p2];.  
1a260 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
1a270 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20  alid(pIn2) );.  
1a280 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
1a290 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1a2a0 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  )!=0 );.    sqli
1a2b0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
1a2c0 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20  rify(pIn2);.    
1a2d0 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e  p2 = (int)pIn2->
1a2e0 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20  u.i;.    /* The 
1a2f0 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20  p2 value always 
1a300 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69  comes from a pri
1a310 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  or OP_CreateTabl
1a320 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20  e opcode and.   
1a330 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20   ** that opcode 
1a340 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20  will always set 
1a350 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20  the p2 value to 
1a360 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73  2 or more or els
1a370 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49  e fail..    ** I
1a380 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66  f there were a f
1a390 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70  ailure, the prep
1a3a0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77  ared statement w
1a3b0 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64  ould have halted
1a3c0 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72  .    ** before r
1a3d0 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73  eaching this ins
1a3e0 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20  truction. */.   
1a3f0 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29   if( NEVER(p2<2)
1a400 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20   ) {.      rc = 
1a410 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
1a420 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
1a430 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1a440 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  or;.    }.  }.  
1a450 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
1a460 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20  =P4_KEYINFO ){. 
1a470 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f     pKeyInfo = pO
1a480 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
1a490 20 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e      pKeyInfo->en
1a4a0 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a  c = ENC(p->db);.
1a4b0 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65      nField = pKe
1a4c0 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b  yInfo->nField+1;
1a4d0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
1a4e0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1a4f0 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64  32 ){.    nField
1a500 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1a510 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  }.  assert( pOp-
1a520 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72  >p1>=0 );.  pCur
1a530 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1a540 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46  r(p, pOp->p1, nF
1a550 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20  ield, iDb, 1);. 
1a560 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67   if( pCur==0 ) g
1a570 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1a580 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  ur->nullRow = 1;
1a590 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72  .  pCur->isOrder
1a5a0 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  ed = 1;.  rc = s
1a5b0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1a5c0 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67  r(pX, p2, wrFlag
1a5d0 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72  , pKeyInfo, pCur
1a5e0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  ->pCursor);.  pC
1a5f0 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ur->pKeyInfo = p
1a600 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
1a610 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  t( OPFLAG_BULKCS
1a620 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  R==BTREE_BULKLOA
1a630 44 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74  D );.  sqlite3Bt
1a640 72 65 65 43 75 72 73 6f 72 48 69 6e 74 73 28 70  reeCursorHints(p
1a650 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c 20 28 70  Cur->pCursor, (p
1a660 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1a670 42 55 4c 4b 43 53 52 29 29 3b 0a 0a 20 20 2f 2a  BULKCSR));..  /*
1a680 20 53 69 6e 63 65 20 69 74 20 70 65 72 66 6f 72   Since it perfor
1a690 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c  ms no memory all
1a6a0 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f 2c 20 74  ocation or IO, t
1a6b0 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65 20 74 68  he only value th
1a6c0 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  at.  ** sqlite3B
1a6d0 74 72 65 65 43 75 72 73 6f 72 28 29 20 6d 61 79  treeCursor() may
1a6e0 20 72 65 74 75 72 6e 20 69 73 20 53 51 4c 49 54   return is SQLIT
1a6f0 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61 73 73 65 72  E_OK. */.  asser
1a700 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
1a710 20 29 3b 0a 0a 20 20 2f 2a 20 53 65 74 20 74 68   );..  /* Set th
1a720 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54  e VdbeCursor.isT
1a730 61 62 6c 65 20 61 6e 64 20 69 73 49 6e 64 65 78  able and isIndex
1a740 20 76 61 72 69 61 62 6c 65 73 2e 20 50 72 65 76   variables. Prev
1a750 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66  ious versions of
1a760 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65  .  ** SQLite use
1a770 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68  d to check if th
1a780 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67  e root-page flag
1a790 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74  s were sane at t
1a7a0 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61  his point.  ** a
1a7b0 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61  nd report databa
1a7c0 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66  se corruption if
1a7d0 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20   they were not, 
1a7e0 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68  but this check h
1a7f0 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f  as.  ** since mo
1a800 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72  ved into the btr
1a810 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a  ee layer.  */  .
1a820 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20    pCur->isTable 
1a830 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50  = pOp->p4type!=P
1a840 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 70 43 75  4_KEYINFO;.  pCu
1a850 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43  r->isIndex = !pC
1a860 75 72 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62  ur->isTable;.  b
1a870 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1a880 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  de: OpenEphemera
1a890 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a  l P1 P2 * P4 P5.
1a8a0 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1a8b0 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
1a8c0 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
1a8d0 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
1a8e0 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
1a8f0 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
1a900 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
1a910 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
1a920 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65  -only.  The ephe
1a930 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69  meral.** table i
1a940 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61  s deleted automa
1a950 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65  tically when the
1a960 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65   cursor is close
1a970 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  d..**.** P2 is t
1a980 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1a990 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65  umns in the ephe
1a9a0 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20  meral table..** 
1a9b0 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  The cursor point
1a9c0 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62  s to a BTree tab
1a9d0 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20  le if P4==0 and 
1a9e0 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78  to a BTree index
1a9f0 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74  .** if P4 is not
1aa00 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f   0.  If P4 is no
1aa10 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74  t NULL, it point
1aa20 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  s to a KeyInfo s
1aa30 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74  tructure.** that
1aa40 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72   defines the for
1aa50 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74  mat of keys in t
1aa60 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  he index..**.** 
1aa70 54 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20  This opcode was 
1aa80 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f 70 65 6e  once called Open
1aa90 54 65 6d 70 2e 20 20 42 75 74 20 74 68 61 74 20  Temp.  But that 
1aaa0 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f 6e 66 75  created.** confu
1aab0 73 69 6f 6e 20 62 65 63 61 75 73 65 20 74 68 65  sion because the
1aac0 20 74 65 72 6d 20 22 74 65 6d 70 20 74 61 62 6c   term "temp tabl
1aad0 65 22 2c 20 6d 69 67 68 74 20 72 65 66 65 72 20  e", might refer 
1aae0 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20 61 20 54  either.** to a T
1aaf0 45 4d 50 20 74 61 62 6c 65 20 61 74 20 74 68 65  EMP table at the
1ab00 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f 72 20 74   SQL level, or t
1ab10 6f 20 61 20 74 61 62 6c 65 20 6f 70 65 6e 65 64  o a table opened
1ab20 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f   by.** this opco
1ab30 64 65 2e 20 20 54 68 65 6e 20 74 68 69 73 20 6f  de.  Then this o
1ab40 70 63 6f 64 65 20 77 61 73 20 63 61 6c 6c 20 4f  pcode was call O
1ab50 70 65 6e 56 69 72 74 75 61 6c 2e 20 20 42 75 74  penVirtual.  But
1ab60 0a 2a 2a 20 74 68 61 74 20 63 72 65 61 74 65 64  .** that created
1ab70 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69 74 68 20   confusion with 
1ab80 74 68 65 20 77 68 6f 6c 65 20 76 69 72 74 75 61  the whole virtua
1ab90 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e 0a 2a 2a  l-table idea..**
1aba0 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d  .** The P5 param
1abb0 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61  eter can be a ma
1abc0 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f  sk of the BTREE_
1abd0 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a  * flags defined.
1abe0 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20  ** in btree.h.  
1abf0 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74  These flags cont
1ac00 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74  rol aspects of t
1ac10 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a  he operation of.
1ac20 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54  ** the btree.  T
1ac30 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f  he BTREE_OMIT_JO
1ac40 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f  URNAL and BTREE_
1ac50 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65  SINGLE flags are
1ac60 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61  .** added automa
1ac70 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f  tically..*/./* O
1ac80 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69  pcode: OpenAutoi
1ac90 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20  ndex P1 P2 * P4 
1aca0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1acb0 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61  ode works the sa
1acc0 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68  me as OP_OpenEph
1acd0 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20  emeral.  It has 
1ace0 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e  a.** different n
1acf0 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69  ame to distingui
1ad00 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62  sh its use.  Tab
1ad10 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
1ad20 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63  g.** by this opc
1ad30 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1ad40 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c   for automatical
1ad50 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73  ly created trans
1ad60 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20  ient.** indices 
1ad70 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73  in joins..*/.cas
1ad80 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64  e OP_OpenAutoind
1ad90 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ex: .case OP_Ope
1ada0 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
1adb0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1adc0 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
1add0 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a  int vfsFlags = .
1ade0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1adf0 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20  N_READWRITE |.  
1ae00 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1ae10 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53  CREATE |.      S
1ae20 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55  QLITE_OPEN_EXCLU
1ae30 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  SIVE |.      SQL
1ae40 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f  ITE_OPEN_DELETEO
1ae50 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53  NCLOSE |.      S
1ae60 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53  QLITE_OPEN_TRANS
1ae70 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73 65  IENT_DB;..  asse
1ae80 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1ae90 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1aea0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1aeb0 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1aec0 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 1);.  if( pCx=
1aed0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1aee0 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1aef0 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
1af00 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62  ite3BtreeOpen(db
1af10 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26  ->pVfs, 0, db, &
1af20 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20  pCx->pBt, .     
1af30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af40 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f     BTREE_OMIT_JO
1af50 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49  URNAL | BTREE_SI
1af60 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20  NGLE | pOp->p5, 
1af70 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28  vfsFlags);.  if(
1af80 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1af90 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1afa0 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
1afb0 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a  s(pCx->pBt, 1);.
1afc0 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
1afd0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f  LITE_OK ){.    /
1afe0 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  * If a transient
1aff0 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72   index is requir
1b000 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79  ed, create it by
1b010 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20   calling.    ** 
1b020 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1b030 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74  teTable() with t
1b040 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  he BTREE_BLOBKEY
1b050 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20   flag before.   
1b060 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20   ** opening it. 
1b070 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  If a transient t
1b080 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64  able is required
1b090 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20  , just use the. 
1b0a0 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61     ** automatica
1b0b0 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c  lly created tabl
1b0c0 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65  e with root-page
1b0d0 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b   1 (an BLOB_INTK
1b0e0 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a  EY table)..    *
1b0f0 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  /.    if( pOp->p
1b100 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20  4.pKeyInfo ){.  
1b110 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20      int pgno;.  
1b120 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1b130 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1b140 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20  NFO );.      rc 
1b150 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
1b160 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70  eateTable(pCx->p
1b170 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45  Bt, &pgno, BTREE
1b180 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e  _BLOBKEY | pOp->
1b190 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20  p5); .      if( 
1b1a0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1b1b0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1b1c0 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f   pgno==MASTER_RO
1b1d0 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20  OT+1 );.        
1b1e0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b1f0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1b200 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20  , pgno, 1, .    
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b220 20 20 20 20 20 20 20 20 20 20 20 20 28 4b 65 79              (Key
1b230 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c  Info*)pOp->p4.z,
1b240 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a   pCx->pCursor);.
1b250 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
1b260 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1b270 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
1b280 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d    pCx->pKeyInfo-
1b290 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62  >enc = ENC(p->db
1b2a0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
1b2b0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1b2c0 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
1b2d0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1b2e0 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
1b2f0 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  >pBt, MASTER_ROO
1b300 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43  T, 1, 0, pCx->pC
1b310 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43  ursor);.      pC
1b320 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
1b330 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d      }.  }.  pCx-
1b340 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f  >isOrdered = (pO
1b350 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f  p->p5!=BTREE_UNO
1b360 52 44 45 52 45 44 29 3b 0a 20 20 70 43 78 2d 3e  RDERED);.  pCx->
1b370 69 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e  isIndex = !pCx->
1b380 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b  isTable;.  break
1b390 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1b3a0 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32  SorterOpen P1 P2
1b3b0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
1b3c0 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
1b3d0 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  like OP_OpenEphe
1b3e0 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61  meral except tha
1b3f0 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20  t it opens.** a 
1b400 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20  transient index 
1b410 74 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63  that is specific
1b420 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f  ally designed to
1b430 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74   sort large.** t
1b440 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65  ables using an e
1b450 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f  xternal merge-so
1b460 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2f  rt algorithm..*/
1b470 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f  .case OP_SorterO
1b480 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
1b490 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 70 43 78  sor *pCx;..  pCx
1b4a0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1b4b0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1b4c0 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20  p->p2, -1, 1);. 
1b4d0 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1b4e0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1b4f0 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70  ->pKeyInfo = pOp
1b500 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
1b510 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1b520 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29  enc = ENC(p->db)
1b530 3b 0a 20 20 70 43 78 2d 3e 69 73 53 6f 72 74 65  ;.  pCx->isSorte
1b540 72 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  r = 1;.  rc = sq
1b550 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49  lite3VdbeSorterI
1b560 6e 69 74 28 64 62 2c 20 70 43 78 29 3b 0a 20 20  nit(db, pCx);.  
1b570 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1b580 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20  ode: OpenPseudo 
1b590 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
1b5a0 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1b5b0 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
1b5c0 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
1b5d0 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
1b5e0 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1b5f0 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f  of data.  The co
1b600 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e  ntent of that on
1b610 65 20 72 6f 77 20 69 6e 20 74 68 65 20 63 6f 6e  e row in the con
1b620 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  tent of memory.*
1b630 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 77 68  * register P2 wh
1b640 65 6e 20 50 35 3d 3d 30 2e 20 20 49 6e 20 6f 74  en P5==0.  In ot
1b650 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f  her words, curso
1b660 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20  r P1 becomes an 
1b670 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a  alias for the .*
1b680 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65  * MEM_Blob conte
1b690 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  nt contained in 
1b6a0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 57 68  register P2.  Wh
1b6b0 65 6e 20 50 35 3d 3d 31 2c 20 74 68 65 6e 20 74  en P5==1, then t
1b6c0 68 65 0a 2a 2a 20 72 6f 77 20 69 73 20 72 65 70  he.** row is rep
1b6d0 72 65 73 65 6e 74 65 64 20 62 79 20 50 33 20 63  resented by P3 c
1b6e0 6f 6e 73 65 63 75 74 69 76 65 20 72 65 67 69 73  onsecutive regis
1b6f0 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  ters beginning w
1b700 69 74 68 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20  ith P2..**.** A 
1b710 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65  pseudo-table cre
1b720 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  ated by this opc
1b730 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68  ode is used to h
1b740 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  old a single.** 
1b750 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  row output from 
1b760 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68  the sorter so th
1b770 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62  at the row can b
1b780 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74  e decomposed int
1b790 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20  o.** individual 
1b7a0 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68  columns using th
1b7b0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
1b7c0 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  de.  The OP_Colu
1b7d0 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  mn opcode.** is 
1b7e0 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20  the only cursor 
1b7f0 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b  opcode that work
1b800 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d  s with a pseudo-
1b810 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  table..**.** P3 
1b820 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1b830 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
1b840 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c  ecords that will
1b850 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a   be stored by.**
1b860 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
1b870 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  e..*/.case OP_Op
1b880 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64  enPseudo: {.  Vd
1b890 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1b8a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b8b0 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  1>=0 );.  pCx = 
1b8c0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1b8d0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1b8e0 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66  p3, -1, 0);.  if
1b8f0 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1b900 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
1b910 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1b920 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  x->pseudoTableRe
1b930 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  g = pOp->p2;.  p
1b940 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1b950 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20  .  pCx->isIndex 
1b960 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 6d 75 6c 74  = 0;.  pCx->mult
1b970 69 50 73 65 75 64 6f 20 3d 20 70 4f 70 2d 3e 70  iPseudo = pOp->p
1b980 35 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  5;.  break;.}../
1b990 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20  * Opcode: Close 
1b9a0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
1b9b0 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20   Close a cursor 
1b9c0 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
1b9d0 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20  d as P1.  If P1 
1b9e0 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e  is not.** curren
1b9f0 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69  tly open, this i
1ba00 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20  nstruction is a 
1ba10 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
1ba20 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73  P_Close: {.  ass
1ba30 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1ba40 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1ba50 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74  ursor );.  sqlit
1ba60 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1ba70 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  (p, p->apCsr[pOp
1ba80 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43  ->p1]);.  p->apC
1ba90 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b  sr[pOp->p1] = 0;
1baa0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1bab0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 65 20 50  Opcode: SeekGe P
1bac0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
1bad0 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1bae0 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1baf0 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1bb00 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1bb10 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1bb20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1bb30 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65 20  ister P3 as the 
1bb40 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20  key.  If cursor 
1bb50 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1bb60 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1bb70 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1bb80 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1bb90 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1bba0 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1bbb0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1bbc0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1bbd0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1bbe0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1bbf0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1bc00 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79  e smallest entry
1bc10 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65   that .** is gre
1bc20 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1bc30 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1bc40 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1bc50 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1bc60 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
1bc70 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1bc80 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1bc90 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1bca0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
1bcb0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1bcc0 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
1bcd0 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74  , SeekLt, SeekGt
1bce0 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1bcf0 70 63 6f 64 65 3a 20 53 65 65 6b 47 74 20 50 31  pcode: SeekGt P1
1bd00 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
1bd10 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1bd20 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1bd30 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1bd40 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1bd50 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1bd60 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1bd70 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
1bd80 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
1bd90 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1bda0 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1bdb0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1bdc0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1bdd0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1bde0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1bdf0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1be00 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1be10 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1be20 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1be30 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1be40 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1be50 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1be60 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1be70 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1be80 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65  e no records gre
1be90 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68  ater than .** th
1bea0 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1beb0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1bec0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1bed0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1bee0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
1bef0 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65  inct, SeekLt, Se
1bf00 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1bf10 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1bf20 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20  t P1 P2 P3 P4 * 
1bf30 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1bf40 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1bf50 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1bf60 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1bf70 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1bf80 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1bf90 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1bfa0 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1bfb0 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1bfc0 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1bfd0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1bfe0 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1bff0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1c000 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1c010 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1c020 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1c030 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1c040 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1c050 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1c060 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1c070 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1c080 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
1c090 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1c0a0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65  re no records le
1c0b0 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  ss than .** the 
1c0c0 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1c0d0 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1c0e0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
1c0f0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1c100 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
1c110 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  ct, SeekGt, Seek
1c120 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1c130 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20   Opcode: SeekLe 
1c140 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1c150 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1c160 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1c170 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1c180 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1c190 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1c1a0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1c1b0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1c1c0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1c1d0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1c1e0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1c1f0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1c200 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1c210 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1c220 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1c230 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1c240 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1c250 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1c260 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
1c270 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1c280 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1c290 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1c2a0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1c2b0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1c2c0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1c2d0 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74  cords .** less t
1c2e0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1c2f0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1c300 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1c310 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1c320 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1c330 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
1c340 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20  stinct, SeekGt, 
1c350 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a  SeekGe, SeekLt.*
1c360 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 74  /.case OP_SeekLt
1c370 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1c380 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1c390 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20 20 20 20  P_SeekLe:       
1c3a0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1c3b0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 65  /.case OP_SeekGe
1c3c0 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1c3d0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1c3e0 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20 20 20 20  P_SeekGt: {     
1c3f0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1c400 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  /.  int res;.  i
1c410 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72  nt oc;.  VdbeCur
1c420 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63  sor *pC;.  Unpac
1c430 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69  kedRecord r;.  i
1c440 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34  nt nField;.  i64
1c450 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54   iKey;      /* T
1c460 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20  he rowid we are 
1c470 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20  to seek to */.. 
1c480 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c490 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1c4a0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1c4b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
1c4c0 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
1c4d0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1c4e0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1c4f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1c500 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
1c510 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  0 );.  assert( O
1c520 50 5f 53 65 65 6b 4c 65 20 3d 3d 20 4f 50 5f 53  P_SeekLe == OP_S
1c530 65 65 6b 4c 74 2b 31 20 29 3b 0a 20 20 61 73 73  eekLt+1 );.  ass
1c540 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 65 20 3d  ert( OP_SeekGe =
1c550 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 32 20 29 3b  = OP_SeekLt+2 );
1c560 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1c570 65 6b 47 74 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGt == OP_SeekL
1c580 74 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  t+3 );.  assert(
1c590 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
1c5a0 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
1c5b0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29  C->pCursor!=0) )
1c5c0 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e  {.    oc = pOp->
1c5d0 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e  opcode;.    pC->
1c5e0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1c5f0 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
1c600 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65   ){.      /* The
1c610 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
1c620 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
1c630 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
1c640 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
1c650 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f        ** blob, o
1c660 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20  r NULL.  But it 
1c670 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69  needs to be an i
1c680 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65  nteger before we
1c690 20 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a   can do.      **
1c6a0 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
1c6b0 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
1c6c0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1c6d0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61  Op->p3];.      a
1c6e0 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
1c6f0 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 20  ity(pIn3);.     
1c700 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
1c710 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
1c720 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  );.      pC->row
1c730 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a  idIsValid = 0;..
1c740 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1c750 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e  P3 value could n
1c760 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1c770 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
1c780 77 69 74 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a  without.      **
1c790 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
1c7a0 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69  tion, then speci
1c7b0 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  al processing is
1c7c0 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a   required... */.
1c7d0 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
1c7e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1c7f0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
1c800 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1c810 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
1c820 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
1c830 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1c840 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
1c850 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e  ted into any kin
1c860 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20  d of a number,. 
1c870 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e           ** then
1c880 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74   the seek is not
1c890 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75   possible, so ju
1c8a0 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
1c8b0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1c8c0 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
1c8d0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
1c8e0 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66   }.        /* If
1c8f0 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70   we reach this p
1c900 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 50  oint, then the P
1c910 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20  3 value must be 
1c920 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20  a floating.     
1c930 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62     ** point numb
1c940 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  er. */.        a
1c950 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
1c960 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21  ags & MEM_Real)!
1c970 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 69  =0 );..        i
1c980 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53  f( iKey==SMALLES
1c990 54 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33  T_INT64 && (pIn3
1c9a0 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79  ->r<(double)iKey
1c9b0 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29   || pIn3->r>0) )
1c9c0 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  {.          /* T
1c9d0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 74  he P3 value is t
1c9e0 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e  oo large in magn
1c9f0 69 74 75 64 65 20 74 6f 20 62 65 20 65 78 70 72  itude to be expr
1ca00 65 73 73 65 64 20 61 73 20 61 6e 0a 20 20 20 20  essed as an.    
1ca10 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65 72        ** integer
1ca20 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 72  . */.          r
1ca30 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  es = 1;.        
1ca40 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20    if( pIn3->r<0 
1ca50 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
1ca60 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65  f( oc>=OP_SeekGe
1ca70 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
1ca80 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63  =OP_SeekGe || oc
1ca90 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
1cab0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
1cac0 72 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  rst(pC->pCursor,
1cad0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1cae0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1caf0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1cb00 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1cb10 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  r;.            }
1cb20 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
1cb30 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  {.            if
1cb40 28 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b 4c 65 20  ( oc<=OP_SeekLe 
1cb50 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1cb60 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
1cb70 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20  =OP_SeekLe );.  
1cb80 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
1cb90 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1cba0 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1cbb0 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20  res);.          
1cbc0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1cbd0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1cbe0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1cbf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
1cc00 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1cc10 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 70 63 20 3d              pc =
1cc30 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1cc40 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1cc50 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1cc60 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d     }else if( oc=
1cc70 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63  =OP_SeekLt || oc
1cc80 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20  ==OP_SeekGe ){. 
1cc90 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1cca0 74 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75  the ceiling() fu
1ccb0 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72  nction to conver
1ccc0 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20  t real->int */. 
1ccd0 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1cce0 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69  3->r > (double)i
1ccf0 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20  Key ) iKey++;.  
1cd00 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1cd10 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
1cd20 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69  e floor() functi
1cd30 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65  on to convert re
1cd40 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20  al->int */.     
1cd50 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d       assert( oc=
1cd60 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63  =OP_SeekLe || oc
1cd70 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1cd80 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1cd90 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69  3->r < (double)i
1cda0 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20  Key ) iKey--;.  
1cdb0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
1cdc0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1cdd0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1cde0 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1cdf0 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79  or, 0, (u64)iKey
1ce00 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1ce10 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1ce20 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
1ce30 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1ce40 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1ce50 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30        if( res==0
1ce60 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   ){.        pC->
1ce70 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31  rowidIsValid = 1
1ce80 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61  ;.        pC->la
1ce90 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a  stRowid = iKey;.
1cea0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
1ceb0 65 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 20  e{.      nField 
1cec0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
1ced0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1cee0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1cef0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1cf00 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
1cf10 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1cf20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1cf30 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20       r.nField = 
1cf40 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20  (u16)nField;..  
1cf50 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
1cf60 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d  line of code com
1cf70 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73  putes as follows
1cf80 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20  , only faster:. 
1cf90 20 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63       **   if( oc
1cfa0 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f  ==OP_SeekGt || o
1cfb0 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a  c==OP_SeekLe ){.
1cfc0 20 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66        **     r.f
1cfd0 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
1cfe0 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20 20 2a  INCRKEY;.      *
1cff0 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20  *   }else{.     
1d000 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20   **     r.flags 
1d010 3d 20 30 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20  = 0;.      **   
1d020 7d 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  }.      */.     
1d030 20 72 2e 66 6c 61 67 73 20 3d 20 28 75 38 29 28   r.flags = (u8)(
1d040 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1d050 20 2a 20 28 31 20 26 20 28 6f 63 20 2d 20 4f 50   * (1 & (oc - OP
1d060 5f 53 65 65 6b 4c 74 29 29 29 3b 0a 20 20 20 20  _SeekLt)));.    
1d070 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1d080 5f 53 65 65 6b 47 74 20 7c 7c 20 72 2e 66 6c 61  _SeekGt || r.fla
1d090 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43  gs==UNPACKED_INC
1d0a0 52 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61 73  RKEY );.      as
1d0b0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1d0c0 6b 4c 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d  kLe || r.flags==
1d0d0 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1d0e0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1d0f0 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc!=OP_SeekGe 
1d100 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b  || r.flags==0 );
1d110 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1d120 63 21 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20  c!=OP_SeekLt || 
1d130 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 0a 20  r.flags==0 );.. 
1d140 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61       r.aMem = &a
1d150 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
1d160 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1d170 47 0a 20 20 20 20 20 20 7b 20 69 6e 74 20 69 3b  G.      { int i;
1d180 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
1d190 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
1d1a0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1d1b0 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
1d1c0 65 6e 64 69 66 0a 20 20 20 20 20 20 45 78 70 61  endif.      Expa
1d1d0 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a  ndBlob(r.aMem);.
1d1e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1d1f0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1d200 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1d210 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
1d220 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
1d230 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1d240 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1d250 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1d260 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
1d270 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1d280 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43   0;.    }.    pC
1d290 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1d2a0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
1d2b0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1d2c0 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
1d2d0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
1d2e0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
1d2f0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
1d300 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65     if( oc>=OP_Se
1d310 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74 28  ekGe ){  assert(
1d320 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c   oc==OP_SeekGe |
1d330 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  | oc==OP_SeekGt 
1d340 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73  );.      if( res
1d350 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  <0 || (res==0 &&
1d360 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20   oc==OP_SeekGt) 
1d370 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1d380 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
1d390 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1d3a0 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
1d3b0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1d3c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d3d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1d3e0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1d3f0 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65  id = 0;.      }e
1d400 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73  lse{.        res
1d410 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
1d420 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
1d430 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1d440 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLt || oc==OP_S
1d450 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 69  eekLe );.      i
1d460 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
1d470 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
1d480 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20 20 20  ekLt) ){.       
1d490 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1d4a0 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70  eePrevious(pC->p
1d4b0 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1d4c0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1d4d0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1d4e0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1d4f0 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  or;.        pC->
1d500 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1d510 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
1d520 20 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69         /* res mi
1d530 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20  ght be negative 
1d540 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
1d550 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65  e is empty.  Che
1d560 63 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a  ck to.        **
1d570 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20   see if this is 
1d580 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20  the case..      
1d590 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73    */.        res
1d5a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45   = sqlite3BtreeE
1d5b0 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  of(pC->pCursor);
1d5c0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1d5d0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1d5e0 70 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20  p2>0 );.    if( 
1d5f0 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
1d600 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1d610 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1d620 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
1d630 73 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e  s when attemptin
1d640 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 71  g to open the sq
1d650 6c 69 74 65 33 5f 6d 61 73 74 65 72 20 74 61 62  lite3_master tab
1d660 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72 65  le.    ** for re
1d670 61 64 20 61 63 63 65 73 73 20 72 65 74 75 72 6e  ad access return
1d680 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20  s SQLITE_EMPTY. 
1d690 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 77  In this case alw
1d6a0 61 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20  ays.    ** take 
1d6b0 74 68 65 20 6a 75 6d 70 20 28 73 69 6e 63 65 20  the jump (since 
1d6c0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1d6d0 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ords in the tabl
1d6e0 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70  e)..    */.    p
1d6f0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1d700 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1d710 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1d720 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1d730 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e  ** P1 is an open
1d740 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e   table cursor an
1d750 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20  d P2 is a rowid 
1d760 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67  integer.  Arrang
1d770 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d  e.** for P1 to m
1d780 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70  ove so that it p
1d790 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77  oints to the row
1d7a0 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a  id given by P2..
1d7b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63  **.** This is ac
1d7c0 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65  tually a deferre
1d7d0 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67  d seek.  Nothing
1d7e0 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e   actually happen
1d7f0 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63  s until.** the c
1d800 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f  ursor is used to
1d810 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20   read a record. 
1d820 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f   That way, if no
1d830 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c   reads.** occur,
1d840 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20   no unnecessary 
1d850 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a  I/O happens..*/.
1d860 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20  case OP_Seek: { 
1d870 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
1d880 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
1d890 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d8a0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1d8b0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1d8c0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1d8d0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1d8e0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
1d8f0 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72   ALWAYS(pC->pCur
1d900 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61  sor!=0) ){.    a
1d910 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1d920 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75  le );.    pC->nu
1d930 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
1d940 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
1d950 3e 70 32 5d 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f  >p2];.    pC->mo
1d960 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c  vetoTarget = sql
1d970 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1d980 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 43 2d 3e  (pIn2);.    pC->
1d990 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1d9a0 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1d9b0 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20  edMoveto = 1;.  
1d9c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a  }.  break;.}.  .
1d9d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e  ./* Opcode: Foun
1d9e0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
1d9f0 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
1da00 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1da10 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1da20 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1da30 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
1da40 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
1da50 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
1da60 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
1da70 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
1da80 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
1da90 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20  d..**.** Cursor 
1daa0 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
1dab0 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
1dac0 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
1dad0 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
1dae0 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  ** is a prefix o
1daf0 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  f any entry in P
1db00 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73  1 then a jump is
1db10 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a   made to P2 and.
1db20 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  ** P1 is left po
1db30 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61  inting at the ma
1db40 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2f  tching entry..*/
1db50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46  ./* Opcode: NotF
1db60 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
1db70 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d   *.**.** If P4==
1db80 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1db90 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1dba0 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1dbb0 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1dbc0 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1dbd0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1dbe0 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1dbf0 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1dc00 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1dc10 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
1dc20 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1dc30 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1dc40 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1dc50 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1dc60 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68   P4.** is not th
1dc70 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20  e prefix of any 
1dc80 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e  entry in P1 then
1dc90 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   a jump is made 
1dca0 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a  to P2.  If P1 .*
1dcb0 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  * does contain a
1dcc0 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72  n entry whose pr
1dcd0 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65  efix matches the
1dce0 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68   P3/P4 record th
1dcf0 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61  en control.** fa
1dd00 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  lls through to t
1dd10 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1dd20 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65  ion and P1 is le
1dd30 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1dd40 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65  he.** matching e
1dd50 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ntry..**.** See 
1dd60 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1dd70 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71 75 65  Exists, IsUnique
1dd80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46  .*/.case OP_NotF
1dd90 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a  ound:       /* j
1dda0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1ddb0 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20   OP_Found: {    
1ddc0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1ddd0 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64   */.  int alread
1dde0 79 45 78 69 73 74 73 3b 0a 20 20 56 64 62 65 43  yExists;.  VdbeC
1ddf0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
1de00 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a 70 46   res;.  char *pF
1de10 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  ree;.  UnpackedR
1de20 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a  ecord *pIdxKey;.
1de30 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1de40 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70   r;.  char aTemp
1de50 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  Rec[ROUND8(sizeo
1de60 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  f(UnpackedRecord
1de70 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29  )) + sizeof(Mem)
1de80 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66  *3 + 7];..#ifdef
1de90 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
1dea0 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75  qlite3_found_cou
1deb0 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  nt++;.#endif..  
1dec0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
1ded0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
1dee0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1def0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1df00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1df10 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1df20 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1df30 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1df40 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1df50 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
1df60 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
1df70 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73  ALWAYS(pC->pCurs
1df80 6f 72 21 3d 30 29 20 29 7b 0a 0a 20 20 20 20 61  or!=0) ){..    a
1df90 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1dfa0 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  le==0 );.    if(
1dfb0 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a   pOp->p4.i>0 ){.
1dfc0 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f        r.pKeyInfo
1dfd0 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1dfe0 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  .      r.nField 
1dff0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
1e000 3b 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d  ;.      r.aMem =
1e010 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20 53 51   pIn3;.#ifdef SQ
1e020 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20  LITE_DEBUG.     
1e030 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
1e040 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
1e050 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
1e060 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
1e070 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
1e080 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
1e090 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d  NPACKED_PREFIX_M
1e0a0 41 54 43 48 3b 0a 20 20 20 20 20 20 70 49 64 78  ATCH;.      pIdx
1e0b0 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 7d 65  Key = &r;.    }e
1e0c0 6c 73 65 7b 0a 20 20 20 20 20 20 70 49 64 78 4b  lse{.      pIdxK
1e0d0 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
1e0e0 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63  AllocUnpackedRec
1e0f0 6f 72 64 28 0a 20 20 20 20 20 20 20 20 20 20 70  ord(.          p
1e100 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65  C->pKeyInfo, aTe
1e110 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
1e120 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a  empRec), &pFree.
1e130 20 20 20 20 20 20 29 3b 20 0a 20 20 20 20 20 20        ); .      
1e140 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29  if( pIdxKey==0 )
1e150 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1e160 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
1e170 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
1e180 6f 62 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ob );.      asse
1e190 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  rt( (pIn3->flags
1e1a0 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20   & MEM_Zero)==0 
1e1b0 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73  );  /* zeroblobs
1e1c0 20 61 6c 72 65 61 64 79 20 65 78 70 61 6e 64 65   already expande
1e1d0 64 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  d */.      sqlit
1e1e0 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61  e3VdbeRecordUnpa
1e1f0 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c  ck(pC->pKeyInfo,
1e200 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e   pIn3->n, pIn3->
1e210 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 20  z, pIdxKey);.   
1e220 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67     pIdxKey->flag
1e230 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52  s |= UNPACKED_PR
1e240 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
1e250 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  }.    rc = sqlit
1e260 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1e270 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1e280 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
1e290 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
1e2a0 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b   pOp->p4.i==0 ){
1e2b0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
1e2c0 46 72 65 65 28 64 62 2c 20 70 46 72 65 65 29 3b  Free(db, pFree);
1e2d0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
1e2e0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1e2f0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1e300 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78   }.    alreadyEx
1e310 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b  ists = (res==0);
1e320 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1e330 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1e340 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1e350 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1e360 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
1e370 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
1e380 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  ){.    if( alrea
1e390 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20  dyExists ) pc = 
1e3a0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1e3b0 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61  else{.    if( !a
1e3c0 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70  lreadyExists ) p
1e3d0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1e3e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1e3f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e  ./* Opcode: IsUn
1e400 69 71 75 65 20 50 31 20 50 32 20 50 33 20 50 34  ique P1 P2 P3 P4
1e410 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20   *.**.** Cursor 
1e420 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e  P1 is open on an
1e430 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 2d 20   index b-tree - 
1e440 74 68 61 74 20 69 73 20 74 6f 20 73 61 79 2c 20  that is to say, 
1e450 61 20 62 74 72 65 65 20 77 68 69 63 68 0a 2a 2a  a btree which.**
1e460 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 77 68 65   no data and whe
1e470 72 65 20 74 68 65 20 6b 65 79 20 61 72 65 20 72  re the key are r
1e480 65 63 6f 72 64 73 20 67 65 6e 65 72 61 74 65 64  ecords generated
1e490 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72   by OP_MakeRecor
1e4a0 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 6c 69  d with.** the li
1e4b0 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67 20 74  st field being t
1e4c0 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44  he integer ROWID
1e4d0 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68   of the entry th
1e4e0 61 74 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20  at the index.** 
1e4f0 65 6e 74 72 79 20 72 65 66 65 72 73 20 74 6f 2e  entry refers to.
1e500 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72 65  .**.** The P3 re
1e510 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  gister contains 
1e520 61 6e 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  an integer recor
1e530 64 20 6e 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74  d number. Call t
1e540 68 69 73 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e  his record .** n
1e550 75 6d 62 65 72 20 52 2e 20 52 65 67 69 73 74 65  umber R. Registe
1e560 72 20 50 34 20 69 73 20 74 68 65 20 66 69 72 73  r P4 is the firs
1e570 74 20 69 6e 20 61 20 73 65 74 20 6f 66 20 4e 20  t in a set of N 
1e580 63 6f 6e 74 69 67 75 6f 75 73 20 72 65 67 69 73  contiguous regis
1e590 74 65 72 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b  ters.** that mak
1e5a0 65 20 75 70 20 61 6e 20 75 6e 70 61 63 6b 65 64  e up an unpacked
1e5b0 20 69 6e 64 65 78 20 6b 65 79 20 74 68 61 74 20   index key that 
1e5c0 63 61 6e 20 62 65 20 75 73 65 64 20 77 69 74 68  can be used with
1e5d0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
1e5e0 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 20 63 61  he value of N ca
1e5f0 6e 20 62 65 20 69 6e 66 65 72 72 65 64 20 66 72  n be inferred fr
1e600 6f 6d 20 74 68 65 20 63 75 72 73 6f 72 2e 20 4e  om the cursor. N
1e610 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 72 6f   includes the ro
1e620 77 69 64 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70  wid.** value app
1e630 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64  ended to the end
1e640 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 72 65   of the index re
1e650 63 6f 72 64 2e 20 54 68 69 73 20 72 6f 77 69 64  cord. This rowid
1e660 20 76 61 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72   value may.** or
1e670 20 6d 61 79 20 6e 6f 74 20 62 65 20 74 68 65 20   may not be the 
1e680 73 61 6d 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a  same as R..**.**
1e690 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65 20 4e   If any of the N
1e6a0 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e   registers begin
1e6b0 6e 69 6e 67 20 77 69 74 68 20 72 65 67 69 73 74  ning with regist
1e6c0 65 72 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  er P4 contains a
1e6d0 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20   NULL.** value, 
1e6e0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1e6f0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74   to P2..**.** Ot
1e700 68 65 72 77 69 73 65 2c 20 74 68 69 73 20 69 6e  herwise, this in
1e710 73 74 72 75 63 74 69 6f 6e 20 63 68 65 63 6b 73  struction checks
1e720 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 63 6f   if cursor P1 co
1e730 6e 74 61 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a  ntains an entry.
1e740 2a 2a 20 77 68 65 72 65 20 74 68 65 20 66 69 72  ** where the fir
1e750 73 74 20 28 4e 2d 31 29 20 66 69 65 6c 64 73 20  st (N-1) fields 
1e760 6d 61 74 63 68 20 62 75 74 20 74 68 65 20 72 6f  match but the ro
1e770 77 69 64 20 76 61 6c 75 65 20 61 74 20 74 68 65  wid value at the
1e780 20 65 6e 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69   end.** of the i
1e790 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6e 6f  ndex entry is no
1e7a0 74 20 52 2e 20 49 66 20 74 68 65 72 65 20 69 73  t R. If there is
1e7b0 20 6e 6f 20 73 75 63 68 20 65 6e 74 72 79 2c 20   no such entry, 
1e7c0 63 6f 6e 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a  control jumps.**
1e7d0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
1e7e0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74  P2. Otherwise, t
1e7f0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
1e800 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65  conflicting inde
1e810 78 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 63 6f  x.** entry is co
1e820 70 69 65 64 20 74 6f 20 72 65 67 69 73 74 65 72  pied to register
1e830 20 50 33 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20   P3 and control 
1e840 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
1e850 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73   the next.** ins
1e860 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
1e870 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
1e880 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 46  nd, NotExists, F
1e890 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ound.*/.case OP_
1e8a0 49 73 55 6e 69 71 75 65 3a 20 7b 20 20 20 20 20  IsUnique: {     
1e8b0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1e8c0 2a 2f 0a 20 20 75 31 36 20 69 69 3b 0a 20 20 56  */.  u16 ii;.  V
1e8d0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1e8e0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1e8f0 72 3b 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  r;.  u16 nField;
1e900 0a 20 20 4d 65 6d 20 2a 61 4d 78 3b 0a 20 20 55  .  Mem *aMx;.  U
1e910 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e930 20 20 2f 2a 20 42 2d 54 72 65 65 20 69 6e 64 65    /* B-Tree inde
1e940 78 20 73 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a  x search key */.
1e950 20 20 69 36 34 20 52 3b 20 20 20 20 20 20 20 20    i64 R;        
1e960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e970 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 73 74       /* Rowid st
1e980 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1e990 20 50 33 20 2a 2f 0a 0a 20 20 70 49 6e 33 20 3d   P3 */..  pIn3 =
1e9a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1e9b0 0a 20 20 61 4d 78 20 3d 20 26 61 4d 65 6d 5b 70  .  aMx = &aMem[p
1e9c0 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20  Op->p4.i];.  /* 
1e9d0 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
1e9e0 76 61 6c 75 65 73 20 6f 66 20 70 61 72 61 6d 65  values of parame
1e9f0 74 65 72 73 20 50 31 20 61 6e 64 20 50 34 20 61  ters P1 and P4 a
1ea00 72 65 20 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a  re in range. */.
1ea10 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ea20 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1ea30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1ea40 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d  ->p4.i>0 && pOp-
1ea50 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  >p4.i<=p->nMem )
1ea60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1ea70 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1ea80 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1ea90 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 69  .  /* Find the i
1eaa0 6e 64 65 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a  ndex cursor. */.
1eab0 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72    pCx = p->apCsr
1eac0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1ead0 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65 72 72  ert( pCx->deferr
1eae0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
1eaf0 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74   pCx->seekResult
1eb00 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63   = 0;.  pCx->cac
1eb10 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1eb20 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72 73 72 20  _STALE;.  pCrsr 
1eb30 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a  = pCx->pCursor;.
1eb40 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20  .  /* If any of 
1eb50 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 4e  the values are N
1eb60 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65 20 6a 75  ULL, take the ju
1eb70 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  mp. */.  nField 
1eb80 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  = pCx->pKeyInfo-
1eb90 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69  >nField;.  for(i
1eba0 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20  i=0; ii<nField; 
1ebb0 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 61  ii++){.    if( a
1ebc0 4d 78 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d  Mx[ii].flags & M
1ebd0 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20  EM_Null ){.     
1ebe0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1ebf0 31 3b 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d  1;.      pCrsr =
1ec00 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   0;.      break;
1ec10 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73  .    }.  }.  ass
1ec20 65 72 74 28 20 28 61 4d 78 5b 6e 46 69 65 6c 64  ert( (aMx[nField
1ec30 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
1ec40 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  ll)==0 );..  if(
1ec50 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20   pCrsr!=0 ){.   
1ec60 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20 74 68 65   /* Populate the
1ec70 20 69 6e 64 65 78 20 73 65 61 72 63 68 20 6b 65   index search ke
1ec80 79 2e 20 2a 2f 0a 20 20 20 20 72 2e 70 4b 65 79  y. */.    r.pKey
1ec90 49 6e 66 6f 20 3d 20 70 43 78 2d 3e 70 4b 65 79  Info = pCx->pKey
1eca0 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1ecb0 6c 64 20 3d 20 6e 46 69 65 6c 64 20 2b 20 31 3b  ld = nField + 1;
1ecc0 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55  .    r.flags = U
1ecd0 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53  NPACKED_PREFIX_S
1ece0 45 41 52 43 48 3b 0a 20 20 20 20 72 2e 61 4d 65  EARCH;.    r.aMe
1ecf0 6d 20 3d 20 61 4d 78 3b 0a 23 69 66 64 65 66 20  m = aMx;.#ifdef 
1ed00 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
1ed10 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
1ed20 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
1ed30 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
1ed40 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
1ed50 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 0a  ]) ); }.#endif..
1ed60 20 20 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74      /* Extract t
1ed70 68 65 20 76 61 6c 75 65 20 6f 66 20 52 20 66 72  he value of R fr
1ed80 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  om register P3. 
1ed90 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
1eda0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1edb0 70 49 6e 33 29 3b 0a 20 20 20 20 52 20 3d 20 70  pIn3);.    R = p
1edc0 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f  In3->u.i;..    /
1edd0 2a 20 53 65 61 72 63 68 20 74 68 65 20 42 2d 54  * Search the B-T
1ede0 72 65 65 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f  ree index. If no
1edf0 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63   conflicting rec
1ee00 6f 72 64 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75  ord is found, ju
1ee10 6d 70 0a 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e  mp.    ** to P2.
1ee20 20 4f 74 68 65 72 77 69 73 65 2c 20 63 6f 70 79   Otherwise, copy
1ee30 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
1ee40 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65  e conflicting re
1ee50 63 6f 72 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72  cord to.    ** r
1ee60 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 66  egister P3 and f
1ee70 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
1ee80 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1ee90 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20  ion.  */.    rc 
1eea0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1eeb0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
1eec0 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 70  sr, &r, 0, 0, &p
1eed0 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b  Cx->seekResult);
1eee0 0a 20 20 20 20 69 66 28 20 28 72 2e 66 6c 61 67  .    if( (r.flag
1eef0 73 20 26 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s & UNPACKED_PRE
1ef00 46 49 58 5f 53 45 41 52 43 48 29 20 7c 7c 20 72  FIX_SEARCH) || r
1ef10 2e 72 6f 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20  .rowid==R ){.   
1ef20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1ef30 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  - 1;.    }else{.
1ef40 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20        pIn3->u.i 
1ef50 3d 20 72 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d  = r.rowid;.    }
1ef60 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1ef70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45  ./* Opcode: NotE
1ef80 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a  xists P1 P2 P3 *
1ef90 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65   *.**.** Use the
1efa0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1efb0 73 74 65 72 20 50 33 20 61 73 20 61 6e 20 69 6e  ster P3 as an in
1efc0 74 65 67 65 72 20 6b 65 79 2e 20 20 49 66 20 61  teger key.  If a
1efd0 20 72 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68   record .** with
1efe0 20 74 68 61 74 20 6b 65 79 20 64 6f 65 73 20 6e   that key does n
1eff0 6f 74 20 65 78 69 73 74 20 69 6e 20 74 61 62 6c  ot exist in tabl
1f000 65 20 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a 75  e of P1, then ju
1f010 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66  mp to P2. .** If
1f020 20 74 68 65 20 72 65 63 6f 72 64 20 64 6f 65 73   the record does
1f030 20 65 78 69 73 74 2c 20 74 68 65 6e 20 66 61 6c   exist, then fal
1f040 6c 20 74 68 72 6f 75 67 68 2e 20 20 54 68 65 20  l through.  The 
1f050 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 0a  cursor is left .
1f060 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  ** pointing to t
1f070 68 65 20 72 65 63 6f 72 64 20 69 66 20 69 74 20  he record if it 
1f080 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  exists..**.** Th
1f090 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
1f0a0 77 65 65 6e 20 74 68 69 73 20 6f 70 65 72 61 74  ween this operat
1f0b0 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f 75 6e 64  ion and NotFound
1f0c0 20 69 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a   is that this.**
1f0d0 20 6f 70 65 72 61 74 69 6f 6e 20 61 73 73 75 6d   operation assum
1f0e0 65 73 20 74 68 65 20 6b 65 79 20 69 73 20 61 6e  es the key is an
1f0f0 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74 68 61   integer and tha
1f100 74 20 50 31 20 69 73 20 61 20 74 61 62 6c 65 20  t P1 is a table 
1f110 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f  whereas.** NotFo
1f120 75 6e 64 20 61 73 73 75 6d 65 73 20 6b 65 79 20  und assumes key 
1f130 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  is a blob constr
1f140 75 63 74 65 64 20 66 72 6f 6d 20 4d 61 6b 65 52  ucted from MakeR
1f150 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20 50 31 20  ecord and.** P1 
1f160 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a  is an index..**.
1f170 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1f180 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73  nd, NotFound, Is
1f190 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f  Unique.*/.case O
1f1a0 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20  P_NotExists: {  
1f1b0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1f1c0 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n3 */.  VdbeCurs
1f1d0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1f1e0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
1f1f0 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79   res;.  u64 iKey
1f200 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ;..  pIn3 = &aMe
1f210 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
1f220 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1f230 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
1f240 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1f250 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1f260 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1f270 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1f280 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1f290 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1f2a0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1f2b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1f2c0 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
1f2d0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
1f2e0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
1f2f0 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21  f( ALWAYS(pCrsr!
1f300 3d 30 29 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  =0) ){.    res =
1f310 20 30 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70   0;.    iKey = p
1f320 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 72 63  In3->u.i;.    rc
1f330 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1f340 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1f350 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c  rsr, 0, iKey, 0,
1f360 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
1f370 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33  lastRowid = pIn3
1f380 2d 3e 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72  ->u.i;.    pC->r
1f390 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65  owidIsValid = re
1f3a0 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70  s==0 ?1:0;.    p
1f3b0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1f3c0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
1f3d0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1f3e0 45 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  E;.    pC->defer
1f3f0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1f400 20 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b     if( res!=0 ){
1f410 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
1f420 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 61  >p2 - 1;.      a
1f430 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
1f440 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20  IsValid==0 );.  
1f450 20 20 7d 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b    }.    pC->seek
1f460 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
1f470 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68  }else{.    /* Th
1f480 69 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20  is happens when 
1f490 61 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 6f 70  an attempt to op
1f4a0 65 6e 20 61 20 72 65 61 64 20 63 75 72 73 6f 72  en a read cursor
1f4b0 20 6f 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   on the .    ** 
1f4c0 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
1f4d0 62 6c 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49  ble returns SQLI
1f4e0 54 45 5f 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f  TE_EMPTY..    */
1f4f0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
1f500 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72  2 - 1;.    asser
1f510 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
1f520 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43  lid==0 );.    pC
1f530 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30  ->seekResult = 0
1f540 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1f550 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
1f560 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20  uence P1 P2 * * 
1f570 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65  *.**.** Find the
1f580 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   next available 
1f590 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1f5a0 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
1f5b0 2a 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75  * Write the sequ
1f5c0 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f  ence number into
1f5d0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1f5e0 20 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   The sequence nu
1f5f0 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73  mber on the curs
1f600 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  or is incremente
1f610 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20  d after this.** 
1f620 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a  instruction.  .*
1f630 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e  /.case OP_Sequen
1f640 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ce: {           
1f650 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
1f660 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
1f670 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1f680 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1f690 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1f6a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21  >apCsr[pOp->p1]!
1f6b0 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
1f6c0 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  i = p->apCsr[pOp
1f6d0 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b  ->p1]->seqCount+
1f6e0 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  +;.  break;.}...
1f6f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f  /* Opcode: NewRo
1f700 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  wid P1 P2 P3 * *
1f710 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77  .**.** Get a new
1f720 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20   integer record 
1f730 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72  number (a.k.a "r
1f740 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74  owid") used as t
1f750 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c  he key to a tabl
1f760 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64  e..** The record
1f770 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70   number is not p
1f780 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61  reviously used a
1f790 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64  s a key in the d
1f7a0 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65  atabase.** table
1f7b0 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
1f7c0 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20  points to.  The 
1f7d0 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
1f7e0 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  r is written.** 
1f7f0 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73  written to regis
1f800 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
1f810 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73   P3>0 then P3 is
1f820 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74   a register in t
1f830 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66  he root frame of
1f840 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20   this VDBE that 
1f850 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61  holds .** the la
1f860 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79  rgest previously
1f870 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
1f880 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77  d number. No new
1f890 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20   record numbers 
1f8a0 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74  are.** allowed t
1f8b0 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74  o be less than t
1f8c0 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20  his value. When 
1f8d0 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68  this value reach
1f8e0 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20  es its maximum, 
1f8f0 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55  .** an SQLITE_FU
1f900 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65  LL error is gene
1f910 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65  rated. The P3 re
1f920 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65  gister is update
1f930 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20  d with the '.** 
1f940 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
1f950 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33   number. This P3
1f960 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73   mechanism is us
1f970 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65  ed to help imple
1f980 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f  ment the.** AUTO
1f990 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72  INCREMENT featur
1f9a0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  e..*/.case OP_Ne
1f9b0 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  wRowid: {       
1f9c0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
1f9d0 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20  elease */.  i64 
1f9e0 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v;              
1f9f0 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f     /* The new ro
1fa00 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  wid */.  VdbeCur
1fa10 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20  sor *pC;        
1fa20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62  /* Cursor of tab
1fa30 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65  le to get the ne
1fa40 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74  w rowid */.  int
1fa50 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
1fa60 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
1fa70 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65   an sqlite3Btree
1fa80 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Last() */.  int 
1fa90 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  cnt;            
1faa0 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f     /* Counter to
1fab0 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65   limit the numbe
1fac0 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f  r of searches */
1fad0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
1fae0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
1faf0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61  ister holding la
1fb00 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20  rgest rowid for 
1fb10 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
1fb20 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
1fb30 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f  rame;     /* Roo
1fb40 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20  t frame of VDBE 
1fb50 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72  */..  v = 0;.  r
1fb60 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  es = 0;.  assert
1fb70 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1fb80 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1fb90 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1fba0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1fbb0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1fbc0 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70  );.  if( NEVER(p
1fbd0 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20 29  C->pCursor==0) )
1fbe0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72  {.    /* The zer
1fbf0 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  o initialization
1fc00 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68   above is all th
1fc10 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a  at is needed */.
1fc20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
1fc30 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f  The next rowid o
1fc40 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
1fc50 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73  (different terms
1fc60 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20   for the same.  
1fc70 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f    ** thing) is o
1fc80 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f  btained in a two
1fc90 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e  -step algorithm.
1fca0 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46  .    **.    ** F
1fcb0 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20  irst we attempt 
1fcc0 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67  to find the larg
1fcd0 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
1fce0 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20  id and add one. 
1fcf0 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20     ** to that.  
1fd00 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65  But if the large
1fd10 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
1fd20 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65  d is already the
1fd30 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20   maximum.    ** 
1fd40 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72  positive integer
1fd50 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c  , we have to fal
1fd60 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
1fd70 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70   second.    ** p
1fd80 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67  robabilistic alg
1fd90 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20  orithm.    **.  
1fda0 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
1fdb0 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20  algorithm is to 
1fdc0 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61  select a rowid a
1fdd0 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65  t random and see
1fde0 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c   if.    ** it al
1fdf0 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20  ready exists in 
1fe00 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69  the table.  If i
1fe10 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
1fe20 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a  , we have.    **
1fe30 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20   succeeded.  If 
1fe40 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  the random rowid
1fe50 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20   does exist, we 
1fe60 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65  select a new one
1fe70 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20  .    ** and try 
1fe80 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30  again, up to 100
1fe90 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20   times..    */. 
1fea0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1feb0 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65  sTable );..#ifde
1fec0 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52  f SQLITE_32BIT_R
1fed0 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20  OWID.#   define 
1fee0 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66  MAX_ROWID 0x7fff
1fef0 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f  ffff.#else.    /
1ff00 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  * Some compilers
1ff10 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
1ff20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65  constants of the
1ff30 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66   form 0x7fffffff
1ff40 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a  ffffffff..    **
1ff50 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e   Others complain
1ff60 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66   about 0x7ffffff
1ff70 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54  ffffffffffLL.  T
1ff80 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1ff90 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20  ro seems.    ** 
1ffa0 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63  to provide the c
1ffb0 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61  onstant while ma
1ffc0 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  king all compile
1ffd0 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f  rs happy..    */
1ffe0 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
1fff0 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28  ROWID  (i64)( ((
20000 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (u64)0x7fffffff)
20010 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66  <<32) | (u64)0xf
20020 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66  fffffff ).#endif
20030 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75  ..    if( !pC->u
20040 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
20050 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74  .      v = sqlit
20060 65 33 42 74 72 65 65 47 65 74 43 61 63 68 65 64  e3BtreeGetCached
20070 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
20080 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 76 3d  r);.      if( v=
20090 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
200a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
200b0 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ast(pC->pCursor,
200c0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
200d0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
200e0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
200f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
20100 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
20110 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65  }.        if( re
20120 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76  s ){.          v
20130 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
20140 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
20150 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
20160 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
20170 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
20180 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e  rsorIsValid(pC->
20190 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  pCursor) );.    
201a0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
201b0 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
201c0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
201d0 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
201e0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
201f0 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20   );   /* Cannot 
20200 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42  fail following B
20210 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
20220 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d          if( v>=M
20230 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
20240 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52          pC->useR
20250 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a  andomRowid = 1;.
20260 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
20270 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 2b 2b  .            v++
20280 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39  ;   /* IMP: R-29
20290 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20  538-34987 */.   
202a0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
202b0 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e   }.      }..#ifn
202c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
202d0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
202e0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20      if( pOp->p3 
202f0 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  ){.        /* As
20300 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
20310 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
20320 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
20330 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
20340 30 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  0 );.        if(
20350 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
20360 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
20370 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
20380 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
20390 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
203a0 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
203b0 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
203c0 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
203d0 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
203e0 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
203f0 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65   pOp->p3<=pFrame
20400 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
20410 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61      pMem = &pFra
20420 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  me->aMem[pOp->p3
20430 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ];.        }else
20440 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  {.          /* A
20450 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
20460 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
20470 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
20480 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
20490 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
204a0 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20           pMem = 
204b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
204c0 20 20 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f            memAbo
204d0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d  utToChange(p, pM
204e0 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  em);.        }. 
204f0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
20500 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
20510 29 3b 0a 0a 20 20 20 20 20 20 20 20 52 45 47 49  );..        REGI
20520 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
20530 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
20540 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
20550 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d  mIntegerify(pMem
20560 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
20570 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
20580 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
20590 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
205a0 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
205b0 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65  .        if( pMe
205c0 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49  m->u.i==MAX_ROWI
205d0 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64  D || pC->useRand
205e0 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
205f0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
20600 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
20610 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a   R-12275-61338 *
20620 2f 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  /.          goto
20630 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
20640 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
20650 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65         if( v<pMe
20660 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
20670 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
20680 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20  u.i + 1;.       
20690 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d   }.        pMem-
206a0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20  >u.i = v;.      
206b0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  }.#endif..      
206c0 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
206d0 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
206e0 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f  Cursor, v<MAX_RO
206f0 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a  WID ? v+1 : 0);.
20700 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43      }.    if( pC
20710 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
20720 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50   ){.      /* IMP
20730 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
20740 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66  R-07677-41881 If
20750 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57   the largest ROW
20760 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74  ID is equal to t
20770 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  he.      ** larg
20780 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  est possible int
20790 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36  eger (9223372036
207a0 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
207b0 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
207c0 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61     ** engine sta
207d0 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69  rts picking posi
207e0 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52  tive candidate R
207f0 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20  OWIDs at random 
20800 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69  until.      ** i
20810 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74  t finds one that
20820 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
20830 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20  ly used. */.    
20840 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20850 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63  3==0 );  /* We c
20860 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64  annot be in rand
20870 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66  om rowid mode if
20880 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20   this is.       
20890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208a0 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f        ** an AUTO
208b0 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
208c0 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20   */.      /* on 
208d0 74 68 65 20 66 69 72 73 74 20 61 74 74 65 6d 70  the first attemp
208e0 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65  t, simply do one
208f0 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76 69   more than previ
20900 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d  ous */.      v =
20910 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20   lastRowid;.    
20920 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49    v &= (MAX_ROWI
20930 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65  D>>1); /* ensure
20940 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61   doesn't go nega
20950 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b  tive */.      v+
20960 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e  +; /* ensure non
20970 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63  -zero */.      c
20980 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68  nt = 0;.      wh
20990 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73 71  ile(   ((rc = sq
209a0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
209b0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
209c0 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
209d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
209e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a00 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c    0, &res))==SQL
20a10 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20  ITE_OK).        
20a20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a      && (res==0).
20a30 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
20a40 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20  ++cnt<100)){.   
20a50 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f       /* collisio
20a60 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72 20  n - try another 
20a70 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a  random rowid */.
20a80 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
20a90 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
20aa0 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20  f(v), &v);.     
20ab0 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a     if( cnt<5 ){.
20ac0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 79            /* try
20ad0 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20   "small" random 
20ae0 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20 69  rowids for the i
20af0 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73 20  nitial attempts 
20b00 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20 26  */.          v &
20b10 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20  = 0xffffff;.    
20b20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20b30 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52       v &= (MAX_R
20b40 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73  OWID>>1); /* ens
20b50 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e  ure doesn't go n
20b60 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20  egative */.     
20b70 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b     }.        v++
20b80 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d  ; /* ensure non-
20b90 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a  zero */.      }.
20ba0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
20bb0 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
20bc0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
20bd0 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
20be0 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39   /* IMP: R-38219
20bf0 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20  -53002 */.      
20c00 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
20c10 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
20c20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
20c30 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20   v>0 );  /* EV: 
20c40 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f  R-40812-03570 */
20c50 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72  .    }.    pC->r
20c60 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
20c70 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
20c80 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
20c90 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
20ca0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
20cb0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
20cc0 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
20cd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
20ce0 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  rt P1 P2 P3 P4 P
20cf0 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e  5.**.** Write an
20d00 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20   entry into the 
20d10 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20  table of cursor 
20d20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79  P1.  A new entry
20d30 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69   is.** created i
20d40 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72  f it doesn't alr
20d50 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68  eady exist or th
20d60 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78  e data for an ex
20d70 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20  isting.** entry 
20d80 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20  is overwritten. 
20d90 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65   The data is the
20da0 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20   value MEM_Blob 
20db0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
20dc0 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e  er.** number P2.
20dd0 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72   The key is stor
20de0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
20df0 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a  3. The key must.
20e00 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e  ** be a MEM_Int.
20e10 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
20e20 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
20e30 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  g of P5 is set, 
20e40 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
20e50 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
20e60 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
20e70 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66  erwise not).  If
20e80 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54   the OPFLAG_LAST
20e90 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35  ROWID flag of P5
20ea0 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e   is set,.** then
20eb0 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64   rowid is stored
20ec0 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20   for subsequent 
20ed0 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a  return by the.**
20ee0 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
20ef0 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e  sert_rowid() fun
20f00 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65  ction (otherwise
20f10 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65   it is unmodifie
20f20 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  d)..**.** If the
20f30 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
20f40 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35  ESULT flag of P5
20f50 20 69 73 20 73 65 74 20 61 6e 64 20 69 66 20 74   is set and if t
20f60 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20  he result of.** 
20f70 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f 70  the last seek op
20f80 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45  eration (OP_NotE
20f90 78 69 73 74 73 29 20 77 61 73 20 61 20 73 75 63  xists) was a suc
20fa0 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69 73 0a  cess, then this.
20fb0 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c  ** operation wil
20fc0 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f  l not attempt to
20fd0 20 66 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70   find the approp
20fe0 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65  riate row before
20ff0 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e   doing.** the in
21000 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e  sert but will in
21010 73 74 65 61 64 20 6f 76 65 72 77 72 69 74 65 20  stead overwrite 
21020 74 68 65 20 72 6f 77 20 74 68 61 74 20 74 68 65  the row that the
21030 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75   cursor is.** cu
21040 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
21050 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79   to.  Presumably
21060 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e  , the prior OP_N
21070 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65 0a  otExists opcode.
21080 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20 70  ** has already p
21090 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75  ositioned the cu
210a0 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e 20  rsor correctly. 
210b0 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69   This is an opti
210c0 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74  mization.** that
210d0 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d 61   boosts performa
210e0 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67 20  nce by avoiding 
210f0 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e  redundant seeks.
21100 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
21110 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c  FLAG_ISUPDATE fl
21120 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
21130 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70  this opcode is p
21140 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44  art of an.** UPD
21150 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ATE operation.  
21160 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68  Otherwise (if th
21170 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29  e flag is clear)
21180 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
21190 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20  e.** is part of 
211a0 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74  an INSERT operat
211b0 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72  ion.  The differ
211c0 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70  ence is only imp
211d0 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65  ortant to.** the
211e0 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a   update hook..**
211f0 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34  .** Parameter P4
21200 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20   may point to a 
21210 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
21220 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65  g the table-name
21230 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e  , or.** may be N
21240 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f  ULL. If it is no
21250 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65  t NULL, then the
21260 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a   update-hook .**
21270 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74   (sqlite3.xUpdat
21280 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e  eCallback) is in
21290 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  voked following 
212a0 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73  a successful ins
212b0 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e  ert..**.** (WARN
212c0 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20  ING/TODO: If P1 
212d0 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73  is a pseudo-curs
212e0 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e  or and P2 is dyn
212f0 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f  amically.** allo
21300 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65  cated, then owne
21310 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74  rship of P2 is t
21320 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68  ransferred to th
21330 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a  e pseudo-cursor.
21340 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20  ** and register 
21350 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d  P2 becomes ephem
21360 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75  eral.  If the cu
21370 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c  rsor is changed,
21380 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
21390 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c   register P2 wil
213a0 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20  l then change.  
213b0 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64  Make sure this d
213c0 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65  oes not.** cause
213d0 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a   any problems.).
213e0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
213f0 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
21400 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68  s on tables.  Th
21410 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
21420 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
21430 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64  indices is OP_Id
21440 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f  xInsert..*/./* O
21450 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74  pcode: InsertInt
21460 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
21470 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
21480 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50   exactly like OP
21490 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20 74  _Insert except t
214a0 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20 74  hat the key is t
214b0 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61  he.** integer va
214c0 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20  lue P3, not the 
214d0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74  value of the int
214e0 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72  eger stored in r
214f0 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63  egister P3..*/.c
21500 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a  ase OP_Insert: .
21510 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e  case OP_InsertIn
21520 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74  t: {.  Mem *pDat
21530 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  a;       /* MEM 
21540 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74  cell holding dat
21550 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  a for the record
21560 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
21570 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20  */.  Mem *pKey; 
21580 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
21590 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20  ll holding key  
215a0 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
215b0 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  /.  i64 iKey;   
215c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74        /* The int
215d0 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65  eger ROWID or ke
215e0 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  y for the record
215f0 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
21600 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
21610 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72  *pC;   /* Cursor
21620 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77   to table into w
21630 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77  hich insert is w
21640 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  ritten */.  int 
21650 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a  nZero;        /*
21660 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d   Number of zero-
21670 62 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64 20  bytes to append 
21680 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73  */.  int seekRes
21690 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74  ult;   /* Result
216a0 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f   of prior seek o
216b0 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45  r 0 if no USESEE
216c0 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a  KRESULT flag */.
216d0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
216e0 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20  b;  /* database 
216f0 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74  name - used by t
21700 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he update hook *
21710 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
21720 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e  zTbl; /* Table n
21730 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68  ame - used by th
21740 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e opdate hook */
21750 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20  .  int op;      
21760 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66       /* Opcode f
21770 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20  or update hook: 
21780 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72  SQLITE_UPDATE or
21790 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a   SQLITE_INSERT *
217a0 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d  /..  pData = &aM
217b0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
217c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
217d0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
217e0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
217f0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
21800 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d  pData) );.  pC =
21810 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21820 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
21830 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
21840 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
21850 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21860 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
21870 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
21880 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
21890 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
218a0 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b  pOp->p2, pData);
218b0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ..  if( pOp->opc
218c0 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29  ode==OP_Insert )
218d0 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d  {.    pKey = &aM
218e0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
218f0 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66   assert( pKey->f
21900 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
21910 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
21920 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29  mIsValid(pKey) )
21930 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
21940 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b  RACE(pOp->p3, pK
21950 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  ey);.    iKey = 
21960 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c  pKey->u.i;.  }el
21970 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
21980 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21990 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20  InsertInt );.   
219a0 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b   iKey = pOp->p3;
219b0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d  .  }..  if( pOp-
219c0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p5 & OPFLAG_NCH
219d0 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
219e0 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  e++;.  if( pOp->
219f0 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54  p5 & OPFLAG_LAST
21a00 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74  ROWID ) db->last
21a10 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
21a20 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28 20  d = iKey;.  if( 
21a30 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
21a40 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
21a50 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20  Data->z = 0;.   
21a60 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20   pData->n = 0;. 
21a70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
21a80 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  rt( pData->flags
21a90 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
21aa0 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73  _Str) );.  }.  s
21ab0 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f  eekResult = ((pO
21ac0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
21ad0 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
21ae0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
21af0 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61   0);.  if( pData
21b00 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
21b10 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20  ro ){.    nZero 
21b20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
21b30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  ;.  }else{.    n
21b40 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Zero = 0;.  }.  
21b50 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
21b60 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
21b70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63  Cursor, 0);.  rc
21b80 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
21b90 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f  nsert(pC->pCurso
21ba0 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20  r, 0, iKey,.    
21bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bc0 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20        pData->z, 
21bd0 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c  pData->n, nZero,
21be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21bf0 20 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e             pOp->
21c00 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45  p5 & OPFLAG_APPE
21c10 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20  ND, seekResult. 
21c20 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   );.  pC->rowidI
21c30 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
21c40 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
21c50 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
21c60 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21c70 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
21c80 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
21c90 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
21ca0 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
21cb0 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
21cc0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
21cd0 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
21ce0 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
21cf0 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b  [pC->iDb].zName;
21d00 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d  .    zTbl = pOp-
21d10 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20  >p4.z;.    op = 
21d20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
21d30 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
21d40 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
21d50 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20  QLITE_INSERT);. 
21d60 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
21d70 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62  sTable );.    db
21d80 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
21d90 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
21da0 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  , op, zDb, zTbl,
21db0 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
21dc0 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
21dd0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
21de0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c  ../* Opcode: Del
21df0 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ete P1 P2 * P4 *
21e00 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
21e10 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
21e20 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
21e30 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
21e40 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  nting..**.** The
21e50 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
21e60 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
21e70 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74   either the next
21e80 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73   or the previous
21e90 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68  .** record in th
21ea0 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69  e table. If it i
21eb0 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
21ec0 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f  at the next reco
21ed0 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  rd, then.** the 
21ee0 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75  next Next instru
21ef0 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20  ction will be a 
21f00 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74  no-op.  Hence it
21f10 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65   is OK to delete
21f20 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f  .** a record fro
21f30 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74  m within an Next
21f40 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   loop..**.** If 
21f50 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
21f60 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73  GE flag of P2 is
21f70 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
21f80 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
21f90 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
21fa0 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
21fb0 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74  )..**.** P1 must
21fc0 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74   not be pseudo-t
21fd0 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f  able.  It has to
21fe0 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65   be a real table
21ff0 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c   with.** multipl
22000 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  e rows..**.** If
22010 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
22020 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20   then it is the 
22030 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
22040 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20  e that P1 is.** 
22050 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68  pointing to.  Th
22060 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69  e update hook wi
22070 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69  ll be invoked, i
22080 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20  f it exists..** 
22090 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
220a0 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75  L then the P1 cu
220b0 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
220c0 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a  een positioned.*
220d0 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  * using OP_NotFo
220e0 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
220f0 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
22100 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
22110 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b  lete: {.  i64 iK
22120 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ey;.  VdbeCursor
22130 20 2a 70 43 3b 0a 0a 20 20 69 4b 65 79 20 3d 20   *pC;..  iKey = 
22140 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
22150 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
22160 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
22170 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
22180 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
22190 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
221a0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
221b0 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e  sor!=0 );  /* On
221c0 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61  ly valid for rea
221d0 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65  l tables, no pse
221e0 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a 20 20  udotables */..  
221f0 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74 65  /* If the update
22200 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e  -hook will be in
22210 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65 79 20  voked, set iKey 
22220 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  to the rowid of 
22230 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62 65 69  the.  ** row bei
22240 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20 2a 2f  ng deleted..  */
22250 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61  .  if( db->xUpda
22260 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
22270 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61  p->p4.z ){.    a
22280 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
22290 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  le );.    assert
222a0 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
222b0 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74 52 6f  id );  /* lastRo
222c0 77 69 64 20 73 65 74 20 62 79 20 70 72 65 76 69  wid set by previ
222d0 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ous OP_NotFound 
222e0 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 43  */.    iKey = pC
222f0 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d  ->lastRowid;.  }
22300 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65  ..  /* The OP_De
22310 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77 61  lete opcode alwa
22320 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50  ys follows an OP
22330 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f 50  _NotExists or OP
22340 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50  _Last or.  ** OP
22350 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73  _Column on the s
22360 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f 75  ame table withou
22370 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e  t any intervenin
22380 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68 61  g operations tha
22390 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76  t.  ** might mov
223a0 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20  e or invalidate 
223b0 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
223c0 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73 20  ce cursor pC is 
223d0 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a  always pointing.
223e0 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20    ** to the row 
223f0 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e  to be deleted an
22400 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64 62  d the sqlite3Vdb
22410 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
22420 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62  operation.  ** b
22430 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20 61  elow is always a
22440 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f   no-op and canno
22450 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c  t fail.  We will
22460 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20   run it anyhow, 
22470 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20  though,.  ** to 
22480 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66 75  guard against fu
22490 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f 20  ture changes to 
224a0 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
224b0 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65  or..  **/.  asse
224c0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
224d0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
224e0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
224f0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
22500 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
22510 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
22520 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
22530 65 72 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74 65  error;..  sqlite
22540 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52  3BtreeSetCachedR
22550 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
22560 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  , 0);.  rc = sql
22570 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
22580 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
22590 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
225a0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
225b0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
225c0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
225d0 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
225e0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
225f0 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
22600 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
22610 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  4.z ){.    const
22620 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d   char *zDb = db-
22630 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
22640 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  ame;.    const c
22650 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d  har *zTbl = pOp-
22660 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e 78  >p4.z;.    db->x
22670 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
22680 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53  b->pUpdateArg, S
22690 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44  QLITE_DELETE, zD
226a0 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
226b0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
226c0 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
226d0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
226e0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
226f0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62  ->nChange++;.  b
22700 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
22710 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
22720 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
22730 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
22740 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
22750 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
22760 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
22770 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
22780 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
22790 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
227a0 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
227b0 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
227c0 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
227d0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
227e0 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
227f0 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
22800 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
22810 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
22820 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
22830 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
22840 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
22850 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
22860 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
22870 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
22880 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50  rCompare P1 P2 P
22890 33 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  3.**.** P1 is a 
228a0 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54  sorter cursor. T
228b0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
228c0 63 6f 6d 70 61 72 65 73 20 74 68 65 20 72 65 63  compares the rec
228d0 6f 72 64 20 62 6c 6f 62 20 69 6e 20 0a 2a 2a 20  ord blob in .** 
228e0 72 65 67 69 73 74 65 72 20 50 33 20 77 69 74 68  register P3 with
228f0 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
22900 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f  the sorter curso
22910 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  r currently poin
22920 74 73 20 74 6f 2e 0a 2a 2a 20 49 66 2c 20 65 78  ts to..** If, ex
22930 63 6c 75 64 69 6e 67 20 74 68 65 20 72 6f 77 69  cluding the rowi
22940 64 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  d fields at the 
22950 65 6e 64 2c 20 74 68 65 20 74 77 6f 20 72 65 63  end, the two rec
22960 6f 72 64 73 20 61 72 65 20 61 20 6d 61 74 63 68  ords are a match
22970 2c 0a 2a 2a 20 66 61 6c 6c 20 74 68 72 6f 75 67  ,.** fall throug
22980 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
22990 73 74 72 75 63 74 69 6f 6e 2e 20 4f 74 68 65 72  struction. Other
229a0 77 69 73 65 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  wise, jump to in
229b0 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
229c0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43  .case OP_SorterC
229d0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65  ompare: {.  Vdbe
229e0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
229f0 74 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70  t res;..  pC = p
22a00 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22a10 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
22a20 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 70 49  rter(pC) );.  pI
22a30 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
22a40 70 33 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  p3];.  rc = sqli
22a50 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d  te3VdbeSorterCom
22a60 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 26  pare(pC, pIn3, &
22a70 72 65 73 29 3b 0a 20 20 69 66 28 20 72 65 73 20  res);.  if( res 
22a80 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
22a90 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
22aa0 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.};../* Opcod
22ab0 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31  e: SorterData P1
22ac0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
22ad0 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
22ae0 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65  ter P2 the curre
22af0 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66  nt sorter data f
22b00 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72  or sorter cursor
22b10 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
22b20 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20  SorterData: {.  
22b30 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22b40 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
22b50 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d  pOp->p2];.  pC =
22b60 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22b70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
22b80 2d 3e 69 73 53 6f 72 74 65 72 20 29 3b 0a 20 20  ->isSorter );.  
22b90 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
22ba0 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c  SorterRowkey(pC,
22bb0 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b   pOut);.  break;
22bc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
22bd0 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a  owData P1 P2 * *
22be0 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69   *.**.** Write i
22bf0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
22c00 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
22c10 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72   data for cursor
22c20 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
22c30 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
22c40 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
22c50 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20   .** It is just 
22c60 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
22c70 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
22c80 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
22c90 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
22ca0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
22cb0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
22cc0 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
22cd0 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
22ce0 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
22cf0 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
22d00 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
22d10 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
22d20 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65  /* Opcode: RowKe
22d30 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
22d40 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
22d50 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
22d60 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20  omplete row key 
22d70 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
22d80 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
22d90 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
22da0 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54  the data.  .** T
22db0 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64  he key is copied
22dc0 20 6f 6e 74 6f 20 74 68 65 20 50 33 20 72 65 67   onto the P3 reg
22dd0 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
22de0 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
22df0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
22e00 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
22e10 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
22e20 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74  st be pointing t
22e30 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e  o a valid row (n
22e40 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a  ot a NULL row).*
22e50 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  * of a real tabl
22e60 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
22e70 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
22e80 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f  P_RowKey:.case O
22e90 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56  P_RowData: {.  V
22ea0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
22eb0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
22ec0 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69 36 34  ;.  u32 n;.  i64
22ed0 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20   n64;..  pOut = 
22ee0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
22ef0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
22f00 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20  ge(p, pOut);..  
22f10 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77  /* Note that Row
22f20 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20  Key and RowData 
22f30 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74  are really exact
22f40 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74  ly the same inst
22f50 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73  ruction */.  ass
22f60 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
22f70 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
22f80 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
22f90 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
22fa0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  ];.  assert( pC-
22fb0 3e 69 73 53 6f 72 74 65 72 3d 3d 30 20 29 3b 0a  >isSorter==0 );.
22fc0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
22fd0 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70  Table || pOp->op
22fe0 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61  code!=OP_RowData
22ff0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
23000 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70 4f 70  ->isIndex || pOp
23010 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
23020 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74  Data );.  assert
23030 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
23040 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  ert( pC->nullRow
23050 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
23060 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
23070 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
23080 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
23090 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
230a0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
230b0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
230c0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
230d0 28 70 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a  (pCrsr) );..  /*
230e0 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61   The OP_RowKey a
230f0 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70  nd OP_RowData op
23100 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c  codes always fol
23110 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  low OP_NotExists
23120 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69   or.  ** OP_Rewi
23130 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20  nd/Op_Next with 
23140 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69  no intervening i
23150 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74  nstructions that
23160 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74   might invalidat
23170 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f  e.  ** the curso
23180 72 2e 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f  r.  Hence the fo
23190 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56  llowing sqlite3V
231a0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
231b0 29 20 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73  ) call is always
231c0 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e  .  ** a no-op an
231d0 64 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  d can never fail
231e0 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76 65 20  .  But we leave 
231f0 69 74 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61  it in place as a
23200 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20   safety..  */.  
23210 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
23220 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
23230 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
23240 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
23250 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
23260 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
23270 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
23280 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66  _to_error;..  if
23290 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
232a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43  .    assert( !pC
232b0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
232c0 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
232d0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
232e0 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29  ize(pCrsr, &n64)
232f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
23300 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
23310 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73    /* True becaus
23320 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
23330 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a  o() call above *
23340 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62  /.    if( n64>db
23350 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
23360 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
23370 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
23380 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  big;.    }.    n
23390 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d   = (u32)n64;.  }
233a0 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e  else{.    VVA_ON
233b0 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
233c0 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
233d0 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73  rsr, &n);.    as
233e0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
233f0 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74  _OK );    /* Dat
23400 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66  aSize() cannot f
23410 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ail */.    if( n
23420 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74  >(u32)db->aLimit
23430 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
23440 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
23450 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
23460 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c   }.  }.  if( sql
23470 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
23480 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20  pOut, n, 0) ){. 
23490 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
234a0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
234b0 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
234c0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
234d0 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
234e0 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63  sIndex ){.    rc
234f0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
23500 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ey(pCrsr, 0, n, 
23510 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73  pOut->z);.  }els
23520 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
23530 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72  te3BtreeData(pCr
23540 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
23550 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  z);.  }.  pOut->
23560 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
23570 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
23580 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
23590 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a  cast to text */.
235a0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
235b0 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
235c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
235d0 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
235e0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  * * *.**.** Stor
235f0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
23600 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
23610 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
23620 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
23630 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
23640 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
23650 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
23660 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
23670 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
23680 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
23690 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
236a0 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
236b0 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
236c0 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
236d0 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
236e0 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
236f0 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
23700 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
23710 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
23720 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
23730 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
23740 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
23750 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23760 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
23770 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
23780 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
23790 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
237a0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
237b0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
237c0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
237d0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
237e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
237f0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
23800 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
23810 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20  oTableReg==0 || 
23820 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20  pC->nullRow );. 
23830 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
23840 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
23850 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
23860 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c      break;.  }el
23870 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72  se if( pC->defer
23880 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20  redMoveto ){.   
23890 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   v = pC->movetoT
238a0 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53  arget;.#ifndef S
238b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
238c0 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20  ALTABLE.  }else 
238d0 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72  if( pC->pVtabCur
238e0 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62  sor ){.    pVtab
238f0 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73   = pC->pVtabCurs
23900 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70  or->pVtab;.    p
23910 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
23920 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73  pModule;.    ass
23930 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
23940 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d  owid );.    rc =
23950 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
23960 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  (pC->pVtabCursor
23970 2c 20 26 76 29 3b 0a 20 20 20 20 69 6d 70 6f 72  , &v);.    impor
23980 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
23990 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  Vtab);.#endif /*
239a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
239b0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
239c0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
239d0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
239e0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
239f0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
23a00 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66  veto(pC);.    if
23a10 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
23a20 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
23a30 20 20 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69      if( pC->rowi
23a40 64 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20  dIsValid ){.    
23a50 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f    v = pC->lastRo
23a60 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  wid;.    }else{.
23a70 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
23a80 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
23a90 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
23aa0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
23ab0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
23ac0 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65   /* Always so be
23ad0 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
23ae0 6f 76 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f  oveto() above */
23af0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
23b00 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
23b10 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23b20 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20  e: NullRow P1 * 
23b30 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  * * *.**.** Move
23b40 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74   the cursor P1 t
23b50 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41  o a null row.  A
23b60 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65  ny OP_Column ope
23b70 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20  rations.** that 
23b80 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20  occur while the 
23b90 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65  cursor is on the
23ba0 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61   null row will a
23bb0 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61  lways.** write a
23bc0 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
23bd0 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56  P_NullRow: {.  V
23be0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
23bf0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23c00 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23c10 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23c20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23c30 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
23c40 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
23c50 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
23c60 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
23c70 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
23c80 70 43 2d 3e 70 43 75 72 73 6f 72 20 7c 7c 20 70  pC->pCursor || p
23c90 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  C->pVtabCursor )
23ca0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72  ;.  if( pC->pCur
23cb0 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  sor ){.    sqlit
23cc0 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72 73  e3BtreeClearCurs
23cd0 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  or(pC->pCursor);
23ce0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
23cf0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74  ./* Opcode: Last
23d00 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
23d10 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
23d20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
23d30 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
23d40 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
23d50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
23d60 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74   to the last ent
23d70 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
23d80 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
23d90 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
23da0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
23db0 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
23dc0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
23dd0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
23de0 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
23df0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
23e00 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
23e10 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
23e20 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
23e30 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
23e40 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20  /.case OP_Last: 
23e50 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
23e60 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
23e70 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
23e80 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
23e90 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
23ea0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23eb0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23ec0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23ed0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23ee0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23ef0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
23f00 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30  ursor;.  res = 0
23f10 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
23f20 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  Crsr!=0) ){.    
23f30 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23f40 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65  eLast(pCrsr, &re
23f50 73 29 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75  s);.  }.  pC->nu
23f60 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
23f70 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
23f80 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
23f90 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
23fa0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
23fb0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
23fc0 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  LE;.  if( pOp->p
23fd0 32 3e 30 20 26 26 20 72 65 73 20 29 7b 0a 20 20  2>0 && res ){.  
23fe0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
23ff0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
24000 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
24010 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Sort P1 P2 * * *
24020 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
24030 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20  de does exactly 
24040 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61  the same thing a
24050 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65  s OP_Rewind exce
24060 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e  pt that.** it in
24070 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f  crements an undo
24080 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20  cumented global 
24090 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f  variable used fo
240a0 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a  r testing..**.**
240b0 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f   Sorting is acco
240c0 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74  mplished by writ
240d0 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f  ing records into
240e0 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78   a sorting index
240f0 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64  ,.** then rewind
24100 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61  ing that index a
24110 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61  nd playing it ba
24120 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e  ck from beginnin
24130 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65  g to.** end.  We
24140 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74   use the OP_Sort
24150 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20   opcode instead 
24160 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20  of OP_Rewind to 
24170 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64  do the.** rewind
24180 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20  ing so that the 
24190 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
241a0 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e  will be incremen
241b0 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65  ted and.** regre
241c0 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20  ssion tests can 
241d0 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
241e0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74  r or not the opt
241f0 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72  imizer is.** cor
24200 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e  rectly optimizin
24210 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a  g out sorts..*/.
24220 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f  case OP_SorterSo
24230 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  rt:    /* jump *
24240 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20  /.case OP_Sort: 
24250 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
24260 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
24270 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
24280 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20  _sort_count++;. 
24290 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
242a0 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a  count--;.#endif.
242b0 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51    p->aCounter[SQ
242c0 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
242d0 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a 20  SORT-1]++;.  /* 
242e0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
242f0 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d  o OP_Rewind */.}
24300 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69  ./* Opcode: Rewi
24310 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nd P1 P2 * * *.*
24320 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
24330 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
24340 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74  r Column or Next
24350 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
24360 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
24370 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
24380 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
24390 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
243a0 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
243b0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
243c0 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
243d0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
243e0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
243f0 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
24400 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
24410 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
24420 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
24430 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
24440 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
24450 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
24460 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
24470 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
24480 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
24490 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
244a0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
244b0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
244c0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
244d0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
244e0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
244f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
24500 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
24510 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70 4f  C->isSorter==(pO
24520 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
24530 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72  rterSort) );.  r
24540 65 73 20 3d 20 31 3b 0a 20 20 69 66 28 20 69 73  es = 1;.  if( is
24550 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
24560 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
24570 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28 64  beSorterRewind(d
24580 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  b, pC, &res);.  
24590 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73 72  }else{.    pCrsr
245a0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
245b0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
245c0 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  r );.    rc = sq
245d0 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
245e0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
245f0 20 20 70 43 2d 3e 61 74 46 69 72 73 74 20 3d 20    pC->atFirst = 
24600 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20  res==0 ?1:0;.   
24610 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
24620 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
24630 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
24640 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
24650 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
24660 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e   = 0;.  }.  pC->
24670 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
24680 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  s;.  assert( pOp
24690 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
246a0 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66  2<p->nOp );.  if
246b0 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
246c0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
246d0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
246e0 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50  * Opcode: Next P
246f0 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a  1 P2 * P4 P5.**.
24700 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f  ** Advance curso
24710 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
24720 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65  points to the ne
24730 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  xt key/data pair
24740 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
24750 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
24760 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
24770 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
24780 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
24790 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
247a0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
247b0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
247c0 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77  cursor advance w
247d0 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
247e0 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
247f0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
24800 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
24810 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c  st be for a real
24820 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
24830 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
24840 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f  * P4 is always o
24850 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43  f type P4_ADVANC
24860 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  E. The function 
24870 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74  pointer points t
24880 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65  o.** sqlite3Btre
24890 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  eNext()..**.** I
248a0 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
248b0 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
248c0 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
248d0 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
248e0 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
248f0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
24900 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
24910 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
24920 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f  so: Prev.*/./* O
24930 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50  pcode: Prev P1 P
24940 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 42  2 * * P5.**.** B
24950 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
24960 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
24970 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
24980 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
24990 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
249a0 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
249b0 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
249c0 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
249d0 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
249e0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
249f0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
24a00 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
24a10 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
24a20 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
24a30 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
24a40 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
24a50 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
24a60 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
24a70 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
24a80 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a  pseudo-table..**
24a90 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73  .** P4 is always
24aa0 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41   of type P4_ADVA
24ab0 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f  NCE. The functio
24ac0 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73  n pointer points
24ad0 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74   to.** sqlite3Bt
24ae0 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a  reePrevious()..*
24af0 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f  *.** If P5 is po
24b00 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a  sitive and the j
24b10 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68  ump is taken, th
24b20 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72  en event counter
24b30 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20  .** number P5-1 
24b40 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
24b50 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63  statement is inc
24b60 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 63 61 73  remented..*/.cas
24b70 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a  e OP_SorterNext:
24b80 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
24b90 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20  ase OP_Prev:    
24ba0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
24bb0 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 7b  .case OP_Next: {
24bc0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
24bd0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
24be0 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
24bf0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24c00 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
24c10 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
24c20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
24c30 3c 3d 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61  <=ArraySize(p->a
24c40 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43  Counter) );.  pC
24c50 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
24c60 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d  >p1];.  if( pC==
24c70 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20  0 ){.    break; 
24c80 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23   /* See ticket #
24c90 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 61 73  2273 */.  }.  as
24ca0 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74  sert( pC->isSort
24cb0 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  er==(pOp->opcode
24cc0 3d 3d 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29  ==OP_SorterNext)
24cd0 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74   );.  if( isSort
24ce0 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 61 73  er(pC) ){.    as
24cf0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
24d00 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74  e==OP_SorterNext
24d10 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
24d20 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65  ite3VdbeSorterNe
24d30 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29  xt(db, pC, &res)
24d40 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
24d50 65 73 20 3d 20 31 3b 0a 20 20 20 20 61 73 73 65  es = 1;.    asse
24d60 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
24d70 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
24d80 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
24d90 72 73 6f 72 20 29 3b 0a 20 20 20 20 61 73 73 65  rsor );.    asse
24da0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
24db0 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d  =OP_Next || pOp-
24dc0 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71  >p4.xAdvance==sq
24dd0 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29  lite3BtreeNext )
24de0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
24df0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
24e00 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  ev || pOp->p4.xA
24e10 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
24e20 74 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a  treePrevious );.
24e30 20 20 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34      rc = pOp->p4
24e40 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 70 43  .xAdvance(pC->pC
24e50 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
24e60 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
24e70 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
24e80 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
24e90 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
24ea0 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
24eb0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
24ec0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
24ed0 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  5 ) p->aCounter[
24ee0 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69  pOp->p5-1]++;.#i
24ef0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
24f00 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61  .    sqlite3_sea
24f10 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
24f20 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f  dif.  }.  pC->ro
24f30 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
24f40 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
24f50 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
24f60 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73  * Opcode: IdxIns
24f70 65 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50  ert P1 P2 P3 * P
24f80 35 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  5.**.** Register
24f90 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c   P2 holds an SQL
24fa0 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
24fb0 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
24fc0 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
24fd0 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
24fe0 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
24ff0 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69  ey.** into the i
25000 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66  ndex P1.  Data f
25010 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
25020 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  nil..**.** P3 is
25030 20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f   a flag that pro
25040 76 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20  vides a hint to 
25050 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72  the b-tree layer
25060 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e   that this.** in
25070 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74  sert is likely t
25080 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a  o be an append..
25090 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
250a0 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
250b0 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  s for indices.  
250c0 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
250d0 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
250e0 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49  r tables is OP_I
250f0 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nsert..*/.case O
25100 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20  P_SorterInsert: 
25110 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
25120 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72  case OP_IdxInser
25130 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  t: {        /* i
25140 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
25150 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
25160 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
25170 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63   nKey;.  const c
25180 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73  har *zKey;..  as
25190 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
251a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
251b0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
251c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
251d0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
251e0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
251f0 20 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 28   pC->isSorter==(
25200 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
25210 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b  SorterInsert) );
25220 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
25230 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
25240 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  rt( pIn2->flags 
25250 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
25260 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
25270 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  sor;.  if( ALWAY
25280 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20  S(pCrsr!=0) ){. 
25290 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
252a0 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20  sTable==0 );.   
252b0 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
252c0 28 70 49 6e 32 29 3b 0a 20 20 20 20 69 66 28 20  (pIn2);.    if( 
252d0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
252e0 0a 20 20 20 20 20 20 69 66 28 20 69 73 53 6f 72  .      if( isSor
252f0 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 20  ter(pC) ){.     
25300 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
25310 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28 64  dbeSorterWrite(d
25320 62 2c 20 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20  b, pC, pIn2);.  
25330 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
25340 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     nKey = pIn2->
25350 6e 3b 0a 20 20 20 20 20 20 20 20 7a 4b 65 79 20  n;.        zKey 
25360 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20  = pIn2->z;.     
25370 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
25380 74 72 65 65 49 6e 73 65 72 74 28 70 43 72 73 72  treeInsert(pCrsr
25390 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22  , zKey, nKey, ""
253a0 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c  , 0, 0, pOp->p3,
253b0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 28   .            ((
253c0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
253d0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
253e0 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
253f0 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20 20 20   : 0).          
25400 20 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73    );.        ass
25410 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
25420 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
25430 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53        pC->cacheS
25440 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
25450 41 4c 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ALE;.      }.   
25460 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
25470 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
25480 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33  xDelete P1 P2 P3
25490 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63   * *.**.** The c
254a0 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67  ontent of P3 reg
254b0 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
254c0 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66  at register P2 f
254d0 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b  orm.** an unpack
254e0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68  ed index key. Th
254f0 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65  is opcode remove
25500 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f  s that entry fro
25510 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20  m the .** index 
25520 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
25530 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
25540 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  IdxDelete: {.  V
25550 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
25560 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
25570 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
25580 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
25590 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
255a0 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p3>0 );.  asser
255b0 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
255c0 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c  pOp->p2+pOp->p3<
255d0 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
255e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
255f0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
25600 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
25610 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
25620 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
25630 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
25640 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
25650 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72    if( ALWAYS(pCr
25660 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 2e  sr!=0) ){.    r.
25670 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
25680 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
25690 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
256a0 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61 67  ->p3;.    r.flag
256b0 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d 65  s = 0;.    r.aMe
256c0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
256d0 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  2];.#ifdef SQLIT
256e0 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e  E_DEBUG.    { in
256f0 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
25700 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
25710 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
25720 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
25730 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 63   }.#endif.    rc
25740 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
25750 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
25760 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
25770 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
25780 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
25790 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  es==0 ){.      r
257a0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
257b0 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20  Delete(pCrsr);. 
257c0 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
257d0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
257e0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43  eto==0 );.    pC
257f0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
25800 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
25810 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
25820 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
25830 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
25840 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
25850 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74  gister P2 an int
25860 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
25870 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
25880 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a  the record at.**
25890 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
258a0 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65  index key pointe
258b0 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50  d to by cursor P
258c0 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72  1.  This integer
258d0 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68   should be.** th
258e0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74  e rowid of the t
258f0 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68  able entry to wh
25900 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65  ich this index e
25910 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a  ntry points..**.
25920 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77  ** See also: Row
25930 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a  id, MakeRecord..
25940 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f  */.case OP_IdxRo
25950 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
25960 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
25970 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75  elease */.  BtCu
25980 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56  rsor *pCrsr;.  V
25990 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
259a0 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61   i64 rowid;..  a
259b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
259c0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
259d0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
259e0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
259f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
25a00 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
25a10 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
25a20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
25a30 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 41  EM_Null;.  if( A
25a40 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20  LWAYS(pCrsr!=0) 
25a50 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
25a60 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
25a70 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28  eto(pC);.    if(
25a80 20 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f 74   NEVER(rc) ) got
25a90 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
25aa0 72 72 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74  rror;.    assert
25ab0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
25ac0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61  veto==0 );.    a
25ad0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
25ae0 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  le==0 );.    if(
25af0 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b   !pC->nullRow ){
25b00 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
25b10 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28  te3VdbeIdxRowid(
25b20 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69  db, pCrsr, &rowi
25b30 64 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  d);.      if( rc
25b40 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
25b50 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
25b60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
25b70 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4f        }.      pO
25b80 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b  ut->u.i = rowid;
25b90 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
25ba0 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
25bb0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
25bc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
25bd0 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34  dxGE P1 P2 P3 P4
25be0 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34   P5.**.** The P4
25bf0 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
25c00 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
25c10 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
25c20 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
25c30 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
25c40 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65   ROWID.  Compare
25c50 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
25c60 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
25c70 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
25c80 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
25c90 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
25ca0 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68   the ROWID on th
25cb0 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a  e P1 index..**.*
25cc0 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
25cd0 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
25ce0 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
25cf0 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
25d00 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74  e.** then jump t
25d10 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65  o P2.  Otherwise
25d20 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
25d30 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
25d40 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
25d50 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74  P5 is non-zero t
25d60 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  hen the key valu
25d70 65 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62  e is increased b
25d80 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a  y an epsilon .**
25d90 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63 6f   prior to the co
25da0 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20  mparison.  This 
25db0 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65 20  make the opcode 
25dc0 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54 20  work like IdxGT 
25dd0 65 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69  except.** that i
25de0 66 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20 72  f the key from r
25df0 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61 20  egister P3 is a 
25e00 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65  prefix of the ke
25e10 79 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72 2c  y in the cursor,
25e20 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69  .** the result i
25e30 73 20 66 61 6c 73 65 20 77 68 65 72 65 61 73 20  s false whereas 
25e40 69 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75 65  it would be true
25e50 20 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a   with IdxGT..*/.
25e60 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54  /* Opcode: IdxLT
25e70 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
25e80 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
25e90 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
25ea0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
25eb0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
25ec0 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
25ed0 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57  at omits the ROW
25ee0 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
25ef0 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
25f00 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
25f10 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
25f20 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
25f30 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
25f40 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
25f50 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
25f60 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
25f70 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  try is less than
25f80 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74   the key value t
25f90 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
25fa0 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  ** Otherwise fal
25fb0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
25fc0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
25fd0 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  n..**.** If P5 i
25fe0 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s non-zero then 
25ff0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73  the key value is
26000 20 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e   increased by an
26010 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a   epsilon prior .
26020 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72  ** to the compar
26030 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65  ison.  This make
26040 73 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72  s the opcode wor
26050 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f  k like IdxLE..*/
26060 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20  .case OP_IdxLT: 
26070 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
26080 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
26090 45 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  E: {        /* j
260a0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
260b0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
260c0 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
260d0 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
260e0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
260f0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
26100 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
26110 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
26120 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
26130 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
26140 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
26150 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e   if( ALWAYS(pC->
26160 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20  pCursor!=0) ){. 
26170 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
26180 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
26190 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
261a0 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
261b0 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20  p->p5==1 );.    
261c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
261d0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
261e0 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
261f0 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
26200 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
26210 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
26220 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
26230 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20  {.      r.flags 
26240 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  = UNPACKED_INCRK
26250 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f 50 52  EY | UNPACKED_PR
26260 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
26270 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e 66  }else{.      r.f
26280 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
26290 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
262a0 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d    }.    r.aMem =
262b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
262c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
262d0 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69  EBUG.    { int i
262e0 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
262f0 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
26300 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
26310 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
26320 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20  #endif.    rc = 
26330 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65  sqlite3VdbeIdxKe
26340 79 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c  yCompare(pC, &r,
26350 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
26360 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
26370 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72  IdxLT ){.      r
26380 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d  es = -res;.    }
26390 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
263a0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
263b0 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20  =OP_IdxGE );.   
263c0 20 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a     res++;.    }.
263d0 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b      if( res>0 ){
263e0 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
263f0 3e 70 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a  >p2 - 1 ;.    }.
26400 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
26410 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72  /* Opcode: Destr
26420 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  oy P1 P2 P3 * *.
26430 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20  **.** Delete an 
26440 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
26450 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
26460 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
26470 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
26480 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  * file is given 
26490 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  by P1..**.** The
264a0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73   table being des
264b0 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65  troyed is in the
264c0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
264d0 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49  ile if P3==0.  I
264e0 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20  f.** P3==1 then 
264f0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
26500 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
26510 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
26520 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
26530 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
26540 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
26550 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
26560 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
26570 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
26580 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e   is enabled then
26590 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
265a0 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f  that another roo
265b0 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20  t page.** might 
265c0 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  be moved into th
265d0 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20  e newly deleted 
265e0 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64  root page in ord
265f0 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a  er to keep all.*
26600 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e  * root pages con
26610 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62  tiguous at the b
26620 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
26630 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66  database.  The f
26640 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f  ormer.** value o
26650 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  f the root page 
26660 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73  that moved - its
26670 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68   value before th
26680 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20  e move occurred 
26690 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69  -.** is stored i
266a0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
266b0 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d  If no page .** m
266c0 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75  ovement was requ
266d0 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68  ired (because th
266e0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72  e table being dr
266f0 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64  opped was alread
26700 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f  y .** the last o
26710 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
26720 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  se) then a zero 
26730 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
26740 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20  ister P2..** If 
26750 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69  AUTOVACUUM is di
26760 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65  sabled then a ze
26770 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
26780 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
26790 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65  ** See also: Cle
267a0 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  ar.*/.case OP_De
267b0 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20  stroy: {     /* 
267c0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
267d0 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b  */.  int iMoved;
267e0 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56  .  int iCnt;.  V
267f0 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e  dbe *pVdbe;.  in
26800 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65 72 74  t iDb;..  assert
26810 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
26820 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
26830 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
26840 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b  ABLE.  iCnt = 0;
26850 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62 2d  .  for(pVdbe=db-
26860 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20 70  >pVdbe; pVdbe; p
26870 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e  Vdbe = pVdbe->pN
26880 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70 56  ext){.    if( pV
26890 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  dbe->magic==VDBE
268a0 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70 56  _MAGIC_RUN && pV
268b0 64 62 65 2d 3e 62 49 73 52 65 61 64 65 72 20 0a  dbe->bIsReader .
268c0 20 20 20 20 20 26 26 20 70 56 64 62 65 2d 3e 69       && pVdbe->i
268d0 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26 26  nVtabMethod<2 &&
268e0 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 0a 20   pVdbe->pc>=0 . 
268f0 20 20 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74     ){.      iCnt
26900 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  ++;.    }.  }.#e
26910 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d  lse.  iCnt = db-
26920 3e 6e 56 64 62 65 52 65 61 64 3b 0a 23 65 6e 64  >nVdbeRead;.#end
26930 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  if.  pOut->flags
26940 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69   = MEM_Null;.  i
26950 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20  f( iCnt>1 ){.   
26960 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
26970 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f  KED;.    p->erro
26980 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f  rAction = OE_Abo
26990 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rt;.  }else{.   
269a0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
269b0 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6e 74      assert( iCnt
269c0 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==1 );.    asser
269d0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
269e0 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
269f0 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20  <<iDb))!=0 );.  
26a00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
26a10 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d  reeDropTable(db-
26a20 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70  >aDb[iDb].pBt, p
26a30 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29  Op->p1, &iMoved)
26a40 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
26a50 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
26a60 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f   pOut->u.i = iMo
26a70 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ved;.#ifndef SQL
26a80 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
26a90 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  UUM.    if( rc==
26aa0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f  SQLITE_OK && iMo
26ab0 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ved!=0 ){.      
26ac0 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
26ad0 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d  oved(db, iDb, iM
26ae0 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  oved, pOp->p1);.
26af0 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f        /* All OP_
26b00 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
26b10 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20  ns occur on the 
26b20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20  same btree */.  
26b30 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73 65      assert( rese
26b40 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d  tSchemaOnFault==
26b50 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61  0 || resetSchema
26b60 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29  OnFault==iDb+1 )
26b70 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68  ;.      resetSch
26b80 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62  emaOnFault = iDb
26b90 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  +1;.    }.#endif
26ba0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
26bb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61  ./* Opcode: Clea
26bc0 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a  r P1 P2 P3.**.**
26bd0 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74   Delete all cont
26be0 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61  ents of the data
26bf0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
26c00 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  dex whose root p
26c10 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61  age.** in the da
26c20 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67  tabase file is g
26c30 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74  iven by P1.  But
26c40 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79  , unlike Destroy
26c50 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f  , do not.** remo
26c60 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  ve the table or 
26c70 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64  index from the d
26c80 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
26c90 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
26ca0 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20  ing clear is in 
26cb0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
26cc0 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e  e file if P2==0.
26cd0 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68    If.** P2==1 th
26ce0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  en the table to 
26cf0 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  be clear is in t
26d00 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
26d10 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68  abase file.** th
26d20 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  at is used to st
26d30 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  ore tables creat
26d40 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  e using CREATE T
26d50 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a  EMPORARY TABLE..
26d60 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20  **.** If the P3 
26d70 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72  value is non-zer
26d80 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  o, then the tabl
26d90 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75  e referred to mu
26da0 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b  st be an.** intk
26db0 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c  ey table (an SQL
26dc0 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69   table, not an i
26dd0 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63  ndex). In this c
26de0 61 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e  ase the row chan
26df0 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20  ge .** count is 
26e00 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
26e10 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
26e20 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
26e30 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a  eing cleared. .*
26e40 2a 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74  * If P3 is great
26e50 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68  er than zero, th
26e60 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  en the value sto
26e70 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
26e80 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e  P3 is.** also in
26e90 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
26ea0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
26eb0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
26ec0 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a  ng cleared..**.*
26ed0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74  * See also: Dest
26ee0 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  roy.*/.case OP_C
26ef0 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43  lear: {.  int nC
26f00 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e  hange;. .  nChan
26f10 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  ge = 0;.  assert
26f20 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
26f30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
26f40 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
26f50 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
26f60 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72  ->p2))!=0 );.  r
26f70 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
26f80 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20  ClearTable(.    
26f90 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70    db->aDb[pOp->p
26fa0 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  2].pBt, pOp->p1,
26fb0 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68   (pOp->p3 ? &nCh
26fc0 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20  ange : 0).  );. 
26fd0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
26fe0 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b      p->nChange +
26ff0 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69  = nChange;.    i
27000 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
27010 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
27020 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
27030 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
27040 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
27050 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
27060 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65  >p3]);.      aMe
27070 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
27080 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
27090 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
270a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
270b0 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20  teTable P1 P2 * 
270c0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  * *.**.** Alloca
270d0 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
270e0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
270f0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
27100 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
27110 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
27120 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
27130 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
27140 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
27150 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
27160 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
27170 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
27180 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
27190 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  ster P2.**.** Th
271a0 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
271b0 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64  ween a table and
271c0 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69   an index is thi
271d0 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74  s:  A table must
271e0 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74  .** have a 4-byt
271f0 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e  e integer key an
27200 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74  d can have arbit
27210 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69  rary data.  An i
27220 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61  ndex.** has an a
27230 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74  rbitrary key but
27240 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20   no data..**.** 
27250 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65  See also: Create
27260 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Index.*/./* Opco
27270 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20  de: CreateIndex 
27280 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
27290 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
272a0 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61   index in the ma
272b0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
272c0 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
272d0 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
272e0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
272f0 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
27300 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
27310 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
27320 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
27330 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
27340 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
27350 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
27360 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d  .**.** See docum
27370 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43  entation on OP_C
27380 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61  reateTable for a
27390 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
273a0 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
273b0 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20  P_CreateIndex:  
273c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
273d0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
273e0 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61  case OP_CreateTa
273f0 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
27400 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
27410 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f  se */.  int pgno
27420 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20  ;.  int flags;. 
27430 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e   Db *pDb;..  pgn
27440 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  o = 0;.  assert(
27450 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
27460 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
27470 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
27480 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
27490 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
274a0 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  p1))!=0 );.  ass
274b0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
274c0 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  ==0 );.  pDb = &
274d0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
274e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
274f0 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28  >pBt!=0 );.  if(
27500 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
27510 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a  _CreateTable ){.
27520 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42      /* flags = B
27530 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a  TREE_INTKEY; */.
27540 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45      flags = BTRE
27550 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73  E_INTKEY;.  }els
27560 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  e{.    flags = B
27570 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20  TREE_BLOBKEY;.  
27580 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
27590 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
275a0 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f  (pDb->pBt, &pgno
275b0 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74  , flags);.  pOut
275c0 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20  ->u.i = pgno;.  
275d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
275e0 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61  ode: ParseSchema
275f0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
27600 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73  ** Read and pars
27610 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72  e all entries fr
27620 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41  om the SQLITE_MA
27630 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61  STER table of da
27640 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61  tabase P1.** tha
27650 74 20 6d 61 74 63 68 20 74 68 65 20 57 48 45 52  t match the WHER
27660 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a  E clause P4. .**
27670 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
27680 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73  invokes the pars
27690 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  er to create a n
276a0 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
276b0 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73  ne,.** then runs
276c0 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
276d0 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73   machine.  It is
276e0 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61   thus a re-entra
276f0 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  nt opcode..*/.ca
27700 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  se OP_ParseSchem
27710 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  a: {.  int iDb;.
27720 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
27730 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a  aster;.  char *z
27740 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20  Sql;.  InitData 
27750 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20  initData;..  /* 
27760 41 6e 79 20 70 72 65 70 61 72 65 64 20 73 74 61  Any prepared sta
27770 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f  tement that invo
27780 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20  kes this opcode 
27790 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65  will hold mutexe
277a0 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20  s.  ** on every 
277b0 62 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20  btree.  This is 
277c0 61 20 70 72 65 72 65 71 75 69 73 69 74 65 20 66  a prerequisite f
277d0 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a  or invoking .  *
277e0 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  * sqlite3InitCal
277f0 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69  lback()..  */.#i
27800 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
27810 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69  G.  for(iDb=0; i
27820 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b  Db<db->nDb; iDb+
27830 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
27840 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65  iDb==1 || sqlite
27850 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78  3BtreeHoldsMutex
27860 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
27870 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t) );.  }.#endif
27880 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ..  iDb = pOp->p
27890 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  1;.  assert( iDb
278a0 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
278b0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
278c0 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62  DbHasProperty(db
278d0 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61  , iDb, DB_Schema
278e0 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20  Loaded) );.  /* 
278f0 55 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e  Used to be a con
27900 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20  ditional */ {.  
27910 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45    zMaster = SCHE
27920 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20  MA_TABLE(iDb);. 
27930 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d     initData.db =
27940 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74   db;.    initDat
27950 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b  a.iDb = pOp->p1;
27960 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a  .    initData.pz
27970 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72  ErrMsg = &p->zEr
27980 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d  rMsg;.    zSql =
27990 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
279a0 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  db,.       "SELE
279b0 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67  CT name, rootpag
279c0 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27  e, sql FROM '%q'
279d0 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44  .%s WHERE %s ORD
279e0 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20  ER BY rowid",.  
279f0 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62       db->aDb[iDb
27a00 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72  ].zName, zMaster
27a10 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
27a20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
27a30 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
27a40 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65  TE_NOMEM;.    }e
27a50 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
27a60 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  t( db->init.busy
27a70 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ==0 );.      db-
27a80 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a  >init.busy = 1;.
27a90 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72        initData.r
27aa0 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
27ab0 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62       assert( !db
27ac0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
27ad0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
27ae0 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53  ite3_exec(db, zS
27af0 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43  ql, sqlite3InitC
27b00 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61  allback, &initDa
27b10 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  ta, 0);.      if
27b20 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
27b30 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e  ) rc = initData.
27b40 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  rc;.      sqlite
27b50 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c  3DbFree(db, zSql
27b60 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
27b70 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20  t.busy = 0;.    
27b80 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
27b90 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
27ba0 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
27bb0 69 6f 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72  ion(db);.  if( r
27bc0 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
27bd0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
27be0 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  em;.  }.  break;
27bf0 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e    .}..#if !defin
27c00 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
27c10 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64  NALYZE)./* Opcod
27c20 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20  e: LoadAnalysis 
27c30 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
27c40 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65   Read the sqlite
27c50 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72  _stat1 table for
27c60 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
27c70 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e   load the conten
27c80 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  t.** of that tab
27c90 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65  le into the inte
27ca0 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20  rnal index hash 
27cb0 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c  table.  This wil
27cc0 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61  l cause.** the a
27cd0 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73  nalysis to be us
27ce0 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e  ed when preparin
27cf0 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  g all subsequent
27d00 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73   queries..*/.cas
27d10 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69  e OP_LoadAnalysi
27d20 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  s: {.  assert( p
27d30 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
27d40 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
27d50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e    rc = sqlite3An
27d60 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70  alysisLoad(db, p
27d70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b  Op->p1);.  break
27d80 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;  .}.#endif /* 
27d90 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
27da0 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f  OMIT_ANALYZE) */
27db0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
27dc0 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34  pTable P1 * * P4
27dd0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
27de0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
27df0 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
27e00 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
27e10 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61  scribe.** the ta
27e20 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ble named P4 in 
27e30 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
27e40 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
27e50 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73  er a table.** is
27e60 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
27e70 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
27e80 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
27e90 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
27ea0 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
27eb0 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
27ec0 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
27ed0 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a  OP_DropTable: {.
27ee0 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
27ef0 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62  ndDeleteTable(db
27f00 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
27f10 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
27f20 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
27f30 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50  opIndex P1 * * P
27f40 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
27f50 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
27f60 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
27f70 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
27f80 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69  escribe.** the i
27f90 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e  ndex named P4 in
27fa0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
27fb0 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
27fc0 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20  ter an index.** 
27fd0 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72  is dropped in or
27fe0 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
27ff0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
28000 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
28010 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
28020 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
28030 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
28040 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20  e OP_DropIndex: 
28050 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
28060 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
28070 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
28080 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
28090 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
280a0 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a  DropTrigger P1 *
280b0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
280c0 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
280d0 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
280e0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
280f0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
28100 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64  he trigger named
28110 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
28120 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
28130 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67  led after a trig
28140 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ger.** is droppe
28150 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
28160 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
28170 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
28180 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
28190 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
281a0 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
281b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
281c0 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c  Trigger: {.  sql
281d0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
281e0 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70  eteTrigger(db, p
281f0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
28200 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
28210 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28220 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
28230 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  HECK./* Opcode: 
28240 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50  IntegrityCk P1 P
28250 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
28260 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f  Do an analysis o
28270 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  f the currently 
28280 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20  open database.  
28290 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69  Store in.** regi
282a0 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74  ster P1 the text
282b0 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   of an error mes
282c0 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20  sage describing 
282d0 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a  any problems..**
282e0 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20   If no problems 
282f0 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65  are found, store
28300 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73   a NULL in regis
28310 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P1..**.** Th
28320 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f  e register P3 co
28330 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d  ntains the maxim
28340 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c  um number of all
28350 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20  owed errors..** 
28360 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20  At most reg(P3) 
28370 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72  errors will be r
28380 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f  eported..** In o
28390 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
283a0 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61  analysis stops a
283b0 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31  s soon as reg(P1
283c0 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a  ) errors are .**
283d0 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20   seen.  Reg(P1) 
283e0 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
283f0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72  the number of er
28400 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a  rors remaining..
28410 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70  **.** The root p
28420 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  age numbers of a
28430 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65  ll tables in the
28440 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e   database are in
28450 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20  teger.** stored 
28460 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28  in reg(P1), reg(
28470 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29  P1+1), reg(P1+2)
28480 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72  , ....  There ar
28490 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74  e P2 tables.** t
284a0 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  otal..**.** If P
284b0 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  5 is not zero, t
284c0 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65  he check is done
284d0 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   on the auxiliar
284e0 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  y database.** fi
284f0 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e  le, not the main
28500 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
28510 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
28520 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  e is used to imp
28530 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67  lement the integ
28540 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d  rity_check pragm
28550 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  a..*/.case OP_In
28560 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69  tegrityCk: {.  i
28570 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f  nt nRoot;      /
28580 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
28590 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e  es to check.  (N
285a0 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61  umber of root pa
285b0 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a  ges.) */.  int *
285c0 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72  aRoot;     /* Ar
285d0 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20  ray of rootpage 
285e0 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c  numbers for tabl
285f0 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64  es to be checked
28600 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
28610 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
28620 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  unter */.  int n
28630 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Err;       /* Nu
28640 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
28650 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61  eported */.  cha
28660 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20  r *z;        /* 
28670 54 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f  Text of the erro
28680 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65  r report */.  Me
28690 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a  m *pnErr;     /*
286a0 20 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e   Register keepin
286b0 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72  g track of error
286c0 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a  s remaining */..
286d0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
286e0 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f  Reader );.  nRoo
286f0 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  t = pOp->p2;.  a
28700 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29  ssert( nRoot>0 )
28710 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69  ;.  aRoot = sqli
28720 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
28730 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28  b, sizeof(int)*(
28740 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66  nRoot+1) );.  if
28750 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74  ( aRoot==0 ) got
28760 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65  o no_mem;.  asse
28770 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
28780 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
28790 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26  m );.  pnErr = &
287a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
287b0 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
287c0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
287d0 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
287e0 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
287f0 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
28800 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49  lob))==0 );.  pI
28810 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
28820 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20  p1];.  for(j=0; 
28830 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20  j<nRoot; j++){. 
28840 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69     aRoot[j] = (i
28850 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e  nt)sqlite3VdbeIn
28860 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29  tValue(&pIn1[j])
28870 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d  ;.  }.  aRoot[j]
28880 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
28890 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
288a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
288b0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
288c0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
288d0 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20 20 7a 20  >p5))!=0 );.  z 
288e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
288f0 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d  tegrityCheck(db-
28900 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42  >aDb[pOp->p5].pB
28910 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c  t, aRoot, nRoot,
28920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28940 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e    (int)pnErr->u.
28950 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c  i, &nErr);.  sql
28960 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61  ite3DbFree(db, a
28970 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e  Root);.  pnErr->
28980 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73  u.i -= nErr;.  s
28990 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
289a0 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66  Null(pIn1);.  if
289b0 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20  ( nErr==0 ){.   
289c0 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b   assert( z==0 );
289d0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d  .  }else if( z==
289e0 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  0 ){.    goto no
289f0 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  _mem;.  }else{. 
28a00 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
28a10 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c  mSetStr(pIn1, z,
28a20 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
28a30 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b  , sqlite3_free);
28a40 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41  .  }.  UPDATE_MA
28a50 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
28a60 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
28a70 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49  hangeEncoding(pI
28a80 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
28a90 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
28aa0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
28ab0 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20  INTEGRITY_CHECK 
28ac0 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  */../* Opcode: R
28ad0 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20 2a  owSetAdd P1 P2 *
28ae0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72   * *.**.** Inser
28af0 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
28b00 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67 69  lue held by regi
28b10 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62  ster P2 into a b
28b20 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20  oolean index.** 
28b30 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72  held in register
28b40 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73   P1..**.** An as
28b50 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66  sertion fails if
28b60 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P2 is not an in
28b70 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
28b80 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20  P_RowSetAdd: {  
28b90 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32       /* in1, in2
28ba0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
28bb0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
28bc0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
28bd0 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
28be0 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn2->flags & M
28bf0 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
28c00 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
28c10 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
28c20 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
28c30 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
28c40 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20  (pIn1);.    if( 
28c50 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
28c60 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20  EM_RowSet)==0 ) 
28c70 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
28c80 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  .  sqlite3RowSet
28c90 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70  Insert(pIn1->u.p
28ca0 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e  RowSet, pIn2->u.
28cb0 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  i);.  break;.}..
28cc0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
28cd0 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a  tRead P1 P2 P3 *
28ce0 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74   *.**.** Extract
28cf0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
28d00 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e  lue from boolean
28d10 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75   index P1 and pu
28d20 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  t that value int
28d30 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33  o.** register P3
28d40 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61  .  Or, if boolea
28d50 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e  n index P1 is in
28d60 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c  itially empty, l
28d70 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61  eave P3.** uncha
28d80 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f  nged and jump to
28d90 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
28da0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
28db0 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20  etRead: {       
28dc0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75  /* jump, in1, ou
28dd0 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b  t3 */.  i64 val;
28de0 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
28df0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
28e00 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
28e10 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a  MEM_RowSet)==0 .
28e20 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77     || sqlite3Row
28e30 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e  SetNext(pIn1->u.
28e40 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d  pRowSet, &val)==
28e50 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  0.  ){.    /* Th
28e60 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  e boolean index 
28e70 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  is empty */.    
28e80 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
28e90 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20  tNull(pIn1);.   
28ea0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
28eb0 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
28ec0 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70  /* A value was p
28ed0 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69  ulled from the i
28ee0 6e 64 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69  ndex */.    sqli
28ef0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
28f00 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  64(&aMem[pOp->p3
28f10 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67  ], val);.  }.  g
28f20 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
28f30 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f  terrupt;.}../* O
28f40 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73  pcode: RowSetTes
28f50 74 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a  t P1 P2 P3 P4.**
28f60 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20  .** Register P3 
28f70 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f  is assumed to ho
28f80 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ld a 64-bit inte
28f90 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65  ger value. If re
28fa0 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e  gister P1.** con
28fb0 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f  tains a RowSet o
28fc0 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52  bject and that R
28fd0 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e  owSet object con
28fe0 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c  tains.** the val
28ff0 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a  ue held in P3, j
29000 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20  ump to register 
29010 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  P2. Otherwise, i
29020 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74  nsert the.** int
29030 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20  eger in P3 into 
29040 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63  the RowSet and c
29050 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68  ontinue on to th
29060 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65  e.** next opcode
29070 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53  ..**.** The RowS
29080 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74  et object is opt
29090 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63  imized for the c
290a0 61 73 65 20 77 68 65 72 65 20 73 75 63 63 65 73  ase where succes
290b0 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20  sive sets.** of 
290c0 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65 20  integers, where 
290d0 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e  each set contain
290e0 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e  s no duplicates.
290f0 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20   Each set.** of 
29100 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69  values is identi
29110 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65  fied by a unique
29120 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66   P4 value. The f
29130 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74  irst set.** must
29140 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65   have P4==0, the
29150 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31   final set P4=-1
29160 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20 65 69  .  P4 must be ei
29170 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f  ther -1 or.** no
29180 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72  n-negative.  For
29190 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
291a0 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20  lues of P4 only 
291b0 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62  the lower 4.** b
291c0 69 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63  its are signific
291d0 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ant..**.** This 
291e0 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74  allows optimizat
291f0 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50  ions: (a) when P
29200 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f  4==0 there is no
29210 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a   need to test.**
29220 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65   the rowset obje
29230 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74  ct for P3, as it
29240 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e   is guaranteed n
29250 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74  ot to contain it
29260 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34  ,.** (b) when P4
29270 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f  ==-1 there is no
29280 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20   need to insert 
29290 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74  the value, as it
292a0 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62   will.** never b
292b0 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e  e tested for, an
292c0 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c  d (c) when a val
292d0 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20  ue that is part 
292e0 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69  of set X is.** i
292f0 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69  nserted, there i
29300 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61  s no need to sea
29310 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68  rch to see if th
29320 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73  e same value was
29330 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69  .** previously i
29340 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
29350 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69  of set X (only i
29360 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75  f it was previou
29370 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20  sly.** inserted 
29380 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20  as part of some 
29390 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63  other set)..*/.c
293a0 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73  ase OP_RowSetTes
293b0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
293c0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
293d0 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
293e0 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20  int iSet;.  int 
293f0 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20  exists;..  pIn1 
29400 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
29410 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
29420 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65  [pOp->p3];.  iSe
29430 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  t = pOp->p4.i;. 
29440 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
29450 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
29460 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69  .  /* If there i
29470 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72  s anything other
29480 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f   than a rowset o
29490 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20  bject in memory 
294a0 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65  cell P1,.  ** de
294b0 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20  lete it now and 
294c0 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69  initialize P1 wi
294d0 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73  th an empty rows
294e0 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  et.  */.  if( (p
294f0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
29500 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
29510 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
29520 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
29530 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
29540 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
29550 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
29560 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73  o_mem;.  }..  as
29570 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
29580 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
29590 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d   assert( iSet==-
295a0 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a  1 || iSet>=0 );.
295b0 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20    if( iSet ){.  
295c0 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74    exists = sqlit
295d0 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e  e3RowSetTest(pIn
295e0 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 0a 20  1->u.pRowSet, . 
295f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 75                (u
29610 38 29 28 69 53 65 74 3e 3d 30 20 3f 20 69 53 65  8)(iSet>=0 ? iSe
29620 74 20 26 20 30 78 66 20 3a 20 30 78 66 66 29 2c  t & 0xf : 0xff),
29630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29650 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20  pIn3->u.i);.    
29660 69 66 28 20 65 78 69 73 74 73 20 29 7b 0a 20 20  if( exists ){.  
29670 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
29680 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72 65 61   - 1;.      brea
29690 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  k;.    }.  }.  i
296a0 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20  f( iSet>=0 ){.  
296b0 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
296c0 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52  nsert(pIn1->u.pR
296d0 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69  owSet, pIn3->u.i
296e0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
296f0 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  }...#ifndef SQLI
29700 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
29710 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67  ./* Opcode: Prog
29720 72 61 6d 20 50 31 20 50 32 20 50 33 20 50 34 20  ram P1 P2 P3 P4 
29730 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  *.**.** Execute 
29740 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
29750 72 61 6d 20 70 61 73 73 65 64 20 61 73 20 50 34  ram passed as P4
29760 20 28 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f   (type P4_SUBPRO
29770 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  GRAM). .**.** P1
29780 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
29790 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d  dress of the mem
297a0 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f  ory cell that co
297b0 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74  ntains the first
297c0 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
297d0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
297e0 76 61 6c 75 65 73 20 75 73 65 64 20 61 73 20 61  values used as a
297f0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
29800 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20  sub-program. P2 
29810 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  .** contains the
29820 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70   address to jump
29830 20 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70   to if the sub-p
29840 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e  rogram throws an
29850 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65   IGNORE .** exce
29860 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20  ption using the 
29870 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e  RAISE() function
29880 2e 20 52 65 67 69 73 74 65 72 20 50 33 20 63 6f  . Register P3 co
29890 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
298a0 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f  ss .** of a memo
298b0 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20  ry cell in this 
298c0 28 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20  (the parent) VM 
298d0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
298e0 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a  allocate the .**
298f0 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
29900 20 62 79 20 74 68 65 20 73 75 62 2d 76 64 62 65   by the sub-vdbe
29910 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a   at runtime..**.
29920 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
29930 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e  er to the VM con
29940 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
29950 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  ger program..*/.
29960 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a  case OP_Program:
29970 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
29980 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  p */.  int nMem;
29990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
299a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
299b0 72 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72  ry registers for
299c0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
299d0 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20    int nByte;    
299e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74            /* Byt
299f0 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70  es of runtime sp
29a00 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
29a10 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
29a20 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20    Mem *pRt;     
29a30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
29a40 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74  ister to allocat
29a50 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20  e runtime space 
29a60 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
29a70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29a80 55 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20  Used to iterate 
29a90 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63  through memory c
29aa0 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ells */.  Mem *p
29ab0 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
29ac0 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79    /* Last memory
29ad0 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72   cell in new arr
29ae0 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  ay */.  VdbeFram
29af0 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20  e *pFrame;      
29b00 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d  /* New vdbe fram
29b10 65 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20  e to execute in 
29b20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
29b30 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
29b40 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65  Sub-program to e
29b50 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64  xecute */.  void
29b60 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20   *t;            
29b70 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65      /* Token ide
29b80 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72  ntifying trigger
29b90 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20   */..  pProgram 
29ba0 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72  = pOp->p4.pProgr
29bb0 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65  am;.  pRt = &aMe
29bc0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
29bd0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
29be0 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a  nOp>0 );.  .  /*
29bf0 20 49 66 20 74 68 65 20 70 35 20 66 6c 61 67 20   If the p5 flag 
29c00 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72  is clear, then r
29c10 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
29c20 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20  ion of triggers 
29c30 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
29c40 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20  d for backwards 
29c50 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70  compatibility (p
29c60 35 20 69 73 20 73 65 74 20 69 66 20 74 68 69 73  5 is set if this
29c70 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a   sub-program.  *
29c80 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72  * is really a tr
29c90 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72  igger, not a for
29ca0 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c  eign key action,
29cb0 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65   and the flag se
29cc0 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72  t.  ** and clear
29cd0 65 64 20 62 79 20 74 68 65 20 22 50 52 41 47 4d  ed by the "PRAGM
29ce0 41 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67  A recursive_trig
29cf0 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73  gers" command is
29d00 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20   clear)..  ** . 
29d10 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72 73   ** It is recurs
29d20 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
29d30 66 20 74 72 69 67 67 65 72 73 2c 20 61 74 20 74  f triggers, at t
29d40 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68  he SQL level, th
29d50 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  at is .  ** disa
29d60 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61  bled. In some ca
29d70 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69  ses a single tri
29d80 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74  gger may generat
29d90 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  e more than one 
29da0 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d  .  ** SubProgram
29db0 20 28 69 66 20 74 68 65 20 74 72 69 67 67 65 72   (if the trigger
29dc0 20 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64   may be executed
29dd0 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20   with more than 
29de0 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20  one different . 
29df0 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20   ** ON CONFLICT 
29e00 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50  algorithm). SubP
29e10 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72 65  rogram structure
29e20 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
29e30 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20  h a.  ** single 
29e40 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65  trigger all have
29e50 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
29e60 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67 72  for the SubProgr
29e70 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76  am.token .  ** v
29e80 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69  ariable.  */.  i
29e90 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
29ea0 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e    t = pProgram->
29eb0 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70  token;.    for(p
29ec0 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
29ed0 20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d   pFrame && pFram
29ee0 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72  e->token!=t; pFr
29ef0 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
29f00 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46  ent);.    if( pF
29f10 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20  rame ) break;.  
29f20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61  }..  if( p->nFra
29f30 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  me>=db->aLimit[S
29f40 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47  QLITE_LIMIT_TRIG
29f50 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20  GER_DEPTH] ){.  
29f60 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
29f70 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ROR;.    sqlite3
29f80 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
29f90 72 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20  rrMsg, db, "too 
29fa0 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74  many levels of t
29fb0 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e  rigger recursion
29fc0 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ");.    break;. 
29fd0 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65   }..  /* Registe
29fe0 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f  r pRt is used to
29ff0 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72   store the memor
2a000 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61  y required to sa
2a010 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a  ve the state.  *
2a020 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  * of the current
2a030 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68   program, and th
2a040 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
2a050 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20  d at runtime to 
2a060 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65  execute.  ** the
2a070 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2a080 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65  . If this trigge
2a090 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64  r has been fired
2a0a0 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52   before, then pR
2a0b0 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61  t .  ** is alrea
2a0c0 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74  dy allocated. Ot
2a0d0 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74  herwise, it must
2a0e0 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e   be initialized.
2a0f0 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d    */.  if( (pRt-
2a100 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65  >flags&MEM_Frame
2a110 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53  )==0 ){.    /* S
2a120 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69  ubProgram.nMem i
2a130 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
2a140 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
2a150 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20  lls used by the 
2a160 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20  .    ** program 
2a170 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f  stored in SubPro
2a180 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c  gram.aOp. As wel
2a190 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20  l as these, one 
2a1a0 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65  memory.    ** ce
2a1b0 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ll is required f
2a1c0 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75  or each cursor u
2a1d0 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
2a1e0 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20  am. Set local.  
2a1f0 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d    ** variable nM
2a200 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56  em (and later, V
2a210 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d  dbeFrame.nChildM
2a220 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75  em) to this valu
2a230 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d  e..    */.    nM
2a240 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em = pProgram->n
2a250 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem + pProgram->
2a260 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20  nCsr;.    nByte 
2a270 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  = ROUND8(sizeof(
2a280 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20  VdbeFrame)).    
2a290 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d            + nMem
2a2a0 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20   * sizeof(Mem). 
2a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70               + p
2a2c0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20  Program->nCsr * 
2a2d0 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2a2e0 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20  r *).           
2a2f0 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
2a300 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38  Once * sizeof(u8
2a310 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  );.    pFrame = 
2a320 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
2a330 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a  ero(db, nByte);.
2a340 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20      if( !pFrame 
2a350 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
2a360 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
2a370 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
2a380 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20  lease(pRt);.    
2a390 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  pRt->flags = MEM
2a3a0 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d  _Frame;.    pRt-
2a3b0 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  >u.pFrame = pFra
2a3c0 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d  me;..    pFrame-
2a3d0 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61  >v = p;.    pFra
2a3e0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20  me->nChildMem = 
2a3f0 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
2a400 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50  ->nChildCsr = pP
2a410 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
2a420 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70    pFrame->pc = p
2a430 63 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  c;.    pFrame->a
2a440 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20  Mem = p->aMem;. 
2a450 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20     pFrame->nMem 
2a460 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70  = p->nMem;.    p
2a470 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70  Frame->apCsr = p
2a480 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72  ->apCsr;.    pFr
2a490 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70  ame->nCursor = p
2a4a0 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70  ->nCursor;.    p
2a4b0 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e  Frame->aOp = p->
2a4c0 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  aOp;.    pFrame-
2a4d0 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20  >nOp = p->nOp;. 
2a4e0 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e     pFrame->token
2a4f0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
2a500 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  en;.    pFrame->
2a510 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61  aOnceFlag = p->a
2a520 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46  OnceFlag;.    pF
2a530 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20  rame->nOnceFlag 
2a540 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a  = p->nOnceFlag;.
2a550 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62  .    pEnd = &Vdb
2a560 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
2a570 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  )[pFrame->nChild
2a580 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d  Mem];.    for(pM
2a590 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  em=VdbeFrameMem(
2a5a0 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70  pFrame); pMem!=p
2a5b0 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20  End; pMem++){.  
2a5c0 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20      pMem->flags 
2a5d0 3d 20 4d 45 4d 5f 49 6e 76 61 6c 69 64 3b 0a 20  = MEM_Invalid;. 
2a5e0 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20       pMem->db = 
2a5f0 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  db;.    }.  }els
2a600 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  e{.    pFrame = 
2a610 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20  pRt->u.pFrame;. 
2a620 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
2a630 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72  ram->nMem+pProgr
2a640 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
2a650 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20  ->nChildMem );. 
2a660 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
2a670 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
2a680 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a  e->nChildCsr );.
2a690 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d      assert( pc==
2a6a0 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20  pFrame->pc );.  
2a6b0 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b  }..  p->nFrame++
2a6c0 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  ;.  pFrame->pPar
2a6d0 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ent = p->pFrame;
2a6e0 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52  .  pFrame->lastR
2a6f0 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
2a700 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61  ;.  pFrame->nCha
2a710 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65  nge = p->nChange
2a720 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
2a730 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20   0;.  p->pFrame 
2a740 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61  = pFrame;.  p->a
2a750 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64  Mem = aMem = &Vd
2a760 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2a770 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65  e)[-1];.  p->nMe
2a780 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69  m = pFrame->nChi
2a790 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72  ldMem;.  p->nCur
2a7a0 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d  sor = (u16)pFram
2a7b0 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20  e->nChildCsr;.  
2a7c0 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65  p->apCsr = (Vdbe
2a7d0 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b  Cursor **)&aMem[
2a7e0 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d  p->nMem+1];.  p-
2a7f0 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72  >aOp = aOp = pPr
2a800 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d  ogram->aOp;.  p-
2a810 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d  >nOp = pProgram-
2a820 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65  >nOp;.  p->aOnce
2a830 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d  Flag = (u8 *)&p-
2a840 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f  >apCsr[p->nCurso
2a850 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c  r];.  p->nOnceFl
2a860 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ag = pProgram->n
2a870 4f 6e 63 65 3b 0a 20 20 70 63 20 3d 20 2d 31 3b  Once;.  pc = -1;
2a880 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e  .  memset(p->aOn
2a890 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f  ceFlag, 0, p->nO
2a8a0 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65  nceFlag);..  bre
2a8b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2a8c0 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20  : Param P1 P2 * 
2a8d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
2a8e0 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76  pcode is only ev
2a8f0 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75  er present in su
2a900 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65  b-programs calle
2a910 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50  d via the .** OP
2a920 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
2a930 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c  tion. Copy a val
2a940 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f  ue currently sto
2a950 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  red in a memory 
2a960 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20  .** cell of the 
2a970 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29  calling (parent)
2a980 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50   frame to cell P
2a990 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  2 in the current
2a9a0 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72   frames .** addr
2a9b0 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20  ess space. This 
2a9c0 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
2a9d0 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61  er programs to a
2a9e0 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20  ccess the new.* 
2a9f0 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61  .** and old.* va
2aa00 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lues..**.** The 
2aa10 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63  address of the c
2aa20 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ell in the paren
2aa30 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72  t frame is deter
2aa40 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a  mined by adding.
2aa50 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
2aa60 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
2aa70 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
2aa80 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
2aa90 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e  to the.** callin
2aaa0 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  g OP_Program ins
2aab0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2aac0 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20  e OP_Param: {   
2aad0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
2aae0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
2aaf0 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
2ab00 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20  e;.  Mem *pIn;. 
2ab10 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
2ab20 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46  ame;.  pIn = &pF
2ab30 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
2ab40 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70  p1 + pFrame->aOp
2ab50 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d  [pFrame->pc].p1]
2ab60 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64  ;   .  sqlite3Vd
2ab70 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
2ab80 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f  (pOut, pIn, MEM_
2ab90 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b  Ephem);.  break;
2aba0 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  .}..#endif /* #i
2abb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2abc0 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69  T_TRIGGER */..#i
2abd0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2abe0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a  T_FOREIGN_KEY./*
2abf0 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74   Opcode: FkCount
2ac00 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
2ac10 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61  *.** Increment a
2ac20 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75   "constraint cou
2ac30 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20  nter" by P2 (P2 
2ac40 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20  may be negative 
2ac50 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a  or positive)..**
2ac60 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
2ac70 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ro, the database
2ac80 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e   constraint coun
2ac90 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
2aca0 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64  ed .** (deferred
2acb0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2acc0 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72  straints). Other
2acd0 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a  wise, if P1 is z
2ace0 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61  ero, the .** sta
2acf0 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69  tement counter i
2ad00 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69  s incremented (i
2ad10 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
2ad20 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2ad30 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
2ad40 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28  Counter: {.  if(
2ad50 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
2ad60 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a  ITE_DeferFKs ){.
2ad70 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
2ad80 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  dImmCons += pOp-
2ad90 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  >p2;.  }else if(
2ada0 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
2adb0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
2adc0 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
2add0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46  }else{.    p->nF
2ade0 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70  kConstraint += p
2adf0 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72  Op->p2;.  }.  br
2ae00 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2ae10 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50  e: FkIfZero P1 P
2ae20 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
2ae30 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20  is opcode tests 
2ae40 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  if a foreign key
2ae50 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2ae60 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
2ae70 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c   zero..** If so,
2ae80 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2ae90 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
2aea0 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
2aeb0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a   to the next .**
2aec0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
2aed0 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
2aee0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
2aef0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
2af00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
2af10 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
2af20 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65  .** is zero (the
2af30 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73   one that counts
2af40 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
2af50 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
2af60 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65  . If P1 is.** ze
2af70 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20  ro, the jump is 
2af80 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61  taken if the sta
2af90 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e  tement constrain
2afa0 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72  t-counter is zer
2afb0 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20  o.** (immediate 
2afc0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2afd0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
2afe0 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
2aff0 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  kIfZero: {      
2b000 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2b010 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
2b020 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65     if( db->nDefe
2b030 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64  rredCons==0 && d
2b040 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
2b050 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f  ons==0 ) pc = pO
2b060 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65  p->p2-1;.  }else
2b070 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b  {.    if( p->nFk
2b080 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26  Constraint==0 &&
2b090 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2b0a0 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20  mCons==0 ) pc = 
2b0b0 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
2b0c0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2b0d0 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
2b0e0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2b0f0 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  KEY */..#ifndef 
2b100 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2b110 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63  INCREMENT./* Opc
2b120 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50  ode: MemMax P1 P
2b130 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31  2 * * *.**.** P1
2b140 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
2b150 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
2b160 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65   of this VM (the
2b170 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a   root frame is.*
2b180 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  * different from
2b190 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
2b1a0 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72  me if this instr
2b1b0 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  uction is being 
2b1c0 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68  executed.** with
2b1d0 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d  in a sub-program
2b1e0 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ). Set the value
2b1f0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
2b200 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
2b210 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e  f .** its curren
2b220 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  t value and the 
2b230 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
2b240 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
2b250 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72   instruction thr
2b260 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ows an error if 
2b270 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
2b280 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
2b290 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  .** an integer..
2b2a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61  */.case OP_MemMa
2b2b0 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  x: {        /* i
2b2c0 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  n2 */.  Mem *pIn
2b2d0 31 3b 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  1;.  VdbeFrame *
2b2e0 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d  pFrame;.  if( p-
2b2f0 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66  >pFrame ){.    f
2b300 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
2b310 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
2b320 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
2b330 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
2b340 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d     pIn1 = &pFram
2b350 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  e->aMem[pOp->p1]
2b360 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
2b370 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2b380 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  >p1];.  }.  asse
2b390 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2b3a0 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65  In1) );.  sqlite
2b3b0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
2b3c0 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  fy(pIn1);.  pIn2
2b3d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2b3e0 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
2b3f0 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
2b400 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  n2);.  if( pIn1-
2b410 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b  >u.i<pIn2->u.i){
2b420 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  .    pIn1->u.i =
2b430 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a   pIn2->u.i;.  }.
2b440 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2b450 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2b460 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a  _AUTOINCREMENT *
2b470 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  /../* Opcode: If
2b480 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Pos P1 P2 * * *.
2b490 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  **.** If the val
2b4a0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2b4b0 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65  1 is 1 or greate
2b4c0 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  r, jump to P2..*
2b4d0 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
2b4e0 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
2b4f0 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
2b500 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
2b510 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
2b520 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
2b530 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
2b540 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
2b550 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
2b560 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20  e OP_IfPos: {   
2b570 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2b580 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2b590 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2b5a0 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2b5b0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2b5c0 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30   if( pIn1->u.i>0
2b5d0 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
2b5e0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
2b5f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2b600 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50  code: IfNeg P1 P
2b610 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  2 * * *.**.** If
2b620 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
2b630 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73  gister P1 is les
2b640 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d  s than zero, jum
2b650 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20  p to P2. .**.** 
2b660 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f  It is illegal to
2b670 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75   use this instru
2b680 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73  ction on a regis
2b690 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a  ter that does.**
2b6a0 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20   not contain an 
2b6b0 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73  integer.  An ass
2b6c0 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c  ertion fault wil
2b6d0 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20  l result if you 
2b6e0 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  try..*/.case OP_
2b6f0 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20  IfNeg: {        
2b700 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
2b710 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2b720 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2b730 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
2b740 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20  EM_Int );.  if( 
2b750 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20  pIn1->u.i<0 ){. 
2b760 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2b770 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2b780 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2b790 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33   IfZero P1 P2 P3
2b7a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   * *.**.** The r
2b7b0 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
2b7c0 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2b7d0 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c  er.  Add literal
2b7e0 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61   P3 to the.** va
2b7f0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
2b800 50 31 2e 20 20 49 66 20 74 68 65 20 72 65 73 75  P1.  If the resu
2b810 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c  lt is exactly 0,
2b820 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a   jump to P2. .**
2b830 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
2b840 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e  l to use this in
2b850 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72  struction on a r
2b860 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65  egister that doe
2b870 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  s.** not contain
2b880 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e   an integer.  An
2b890 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74   assertion fault
2b8a0 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20   will result if 
2b8b0 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65  you try..*/.case
2b8c0 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20   OP_IfZero: {   
2b8d0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2b8e0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2b8f0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2b900 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2b910 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2b920 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
2b930 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70 49 6e  p->p3;.  if( pIn
2b940 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20  1->u.i==0 ){.   
2b950 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2b960 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2b970 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
2b980 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50  ggStep * P2 P3 P
2b990 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  4 P5.**.** Execu
2b9a0 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  te the step func
2b9b0 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
2b9c0 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66  egate.  The.** f
2b9d0 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
2b9e0 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69  rguments.   P4 i
2b9f0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2ba00 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74  he FuncDef.** st
2ba10 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
2ba20 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
2ba30 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74  ion.  Use regist
2ba40 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20  er.** P3 as the 
2ba50 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a  accumulator..**.
2ba60 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65  ** The P5 argume
2ba70 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72  nts are taken fr
2ba80 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
2ba90 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73  nd its.** succes
2baa0 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sors..*/.case OP
2bab0 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
2bac0 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  t n;.  int i;.  
2bad0 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d  Mem *pMem;.  Mem
2bae0 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65   *pRec;.  sqlite
2baf0 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
2bb00 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2bb10 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70  *apVal;..  n = p
2bb20 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74  Op->p5;.  assert
2bb30 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63  ( n>=0 );.  pRec
2bb40 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2bb50 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e  ];.  apVal = p->
2bb60 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28  apArg;.  assert(
2bb70 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29   apVal || n==0 )
2bb80 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
2bb90 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a  ; i++, pRec++){.
2bba0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
2bbb0 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a  sValid(pRec) );.
2bbc0 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70      apVal[i] = p
2bbd0 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  Rec;.    memAbou
2bbe0 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 52 65  tToChange(p, pRe
2bbf0 63 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  c);.    sqlite3V
2bc00 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
2bc10 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78  pRec);.  }.  ctx
2bc20 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  .pFunc = pOp->p4
2bc30 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74  .pFunc;.  assert
2bc40 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
2bc50 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
2bc60 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20  );.  ctx.pMem = 
2bc70 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2bc80 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e  ->p3];.  pMem->n
2bc90 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67  ++;.  ctx.s.flag
2bca0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
2bcb0 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63  ctx.s.z = 0;.  c
2bcc0 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  tx.s.zMalloc = 0
2bcd0 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d  ;.  ctx.s.xDel =
2bce0 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d   0;.  ctx.s.db =
2bcf0 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72   db;.  ctx.isErr
2bd00 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43  or = 0;.  ctx.pC
2bd10 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73  oll = 0;.  ctx.s
2bd20 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 69  kipFlag = 0;.  i
2bd30 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c  f( ctx.pFunc->fl
2bd40 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e  ags & SQLITE_FUN
2bd50 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20  C_NEEDCOLL ){.  
2bd60 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d    assert( pOp>p-
2bd70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65  >aOp );.    asse
2bd80 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79  rt( pOp[-1].p4ty
2bd90 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29  pe==P4_COLLSEQ )
2bda0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
2bdb0 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
2bdc0 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
2bdd0 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b  ctx.pColl = pOp[
2bde0 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20  -1].p4.pColl;.  
2bdf0 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e  }.  (ctx.pFunc->
2be00 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20  xStep)(&ctx, n, 
2be10 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20  apVal); /* IMP: 
2be20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
2be30 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
2be40 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
2be50 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2be60 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2be70 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
2be80 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20  text(&ctx.s));. 
2be90 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
2bea0 72 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63  ror;.  }.  if( c
2beb0 74 78 2e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20  tx.skipFlag ){. 
2bec0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
2bed0 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f  1].opcode==OP_Co
2bee0 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20 3d  llSeq );.    i =
2bef0 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20   pOp[-1].p1;.   
2bf00 20 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33   if( i ) sqlite3
2bf10 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
2bf20 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20  &aMem[i], 1);.  
2bf30 7d 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  }..  sqlite3Vdbe
2bf40 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e  MemRelease(&ctx.
2bf50 73 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  s);..  break;.}.
2bf60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46  ./* Opcode: AggF
2bf70 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  inal P1 P2 * P4 
2bf80 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  *.**.** Execute 
2bf90 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75  the finalizer fu
2bfa0 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
2bfb0 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a  gregate.  P1 is.
2bfc0 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  ** the memory lo
2bfd0 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74  cation that is t
2bfe0 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66  he accumulator f
2bff0 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65  or the aggregate
2c000 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
2c010 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
2c020 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73  ments that the s
2c030 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b  tep function tak
2c040 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20  es and.** P4 is 
2c050 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2c060 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69   FuncDef for thi
2c070 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65  s function.  The
2c080 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20   P2.** argument 
2c090 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
2c0a0 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20  his opcode.  It 
2c0b0 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f  is only there to
2c0c0 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a   disambiguate.**
2c0d0 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20   functions that 
2c0e0 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67  can take varying
2c0f0 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75   numbers of argu
2c100 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50  ments.  The.** P
2c110 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e  4 argument is on
2c120 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68  ly needed for th
2c130 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73  e degenerate cas
2c140 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73  e where.** the s
2c150 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  tep function was
2c160 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
2c170 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  called..*/.case 
2c180 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20  OP_AggFinal: {. 
2c190 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73   Mem *pMem;.  as
2c1a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
2c1b0 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
2c1c0 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20  Mem );.  pMem = 
2c1d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2c1e0 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
2c1f0 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e  >flags & ~(MEM_N
2c200 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30  ull|MEM_Agg))==0
2c210 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2c220 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a  e3VdbeMemFinaliz
2c230 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e  e(pMem, pOp->p4.
2c240 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63  pFunc);.  if( rc
2c250 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
2c260 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2c270 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
2c280 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
2c290 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20  xt(pMem));.  }. 
2c2a0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2c2b0 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c  geEncoding(pMem,
2c2c0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
2c2d0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2c2e0 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73  E(pMem);.  if( s
2c2f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
2c300 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20  Big(pMem) ){.   
2c310 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
2c320 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
2c330 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c340 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65  IT_WAL./* Opcode
2c350 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20  : Checkpoint P1 
2c360 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2c370 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62  Checkpoint datab
2c380 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20  ase P1. This is 
2c390 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73  a no-op if P1 is
2c3a0 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69   not currently i
2c3b0 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50  n.** WAL mode. P
2c3c0 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f  arameter P2 is o
2c3d0 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45  ne of SQLITE_CHE
2c3e0 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c  CKPOINT_PASSIVE,
2c3f0 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45 53 54   FULL.** or REST
2c400 41 52 54 2e 20 20 57 72 69 74 65 20 31 20 6f 72  ART.  Write 1 or
2c410 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20   0 into mem[P3] 
2c420 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  if the checkpoin
2c430 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c  t returns.** SQL
2c440 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c  ITE_BUSY or not,
2c450 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
2c460 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72  Write the number
2c470 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
2c480 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68  .** WAL after th
2c490 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74  e checkpoint int
2c4a0 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20  o mem[P3+1] and 
2c4b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
2c4c0 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41  ges.** in the WA
2c4d0 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e  L that have been
2c4e0 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66   checkpointed af
2c4f0 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69  ter the checkpoi
2c500 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20  nt.** completes 
2c510 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20  into mem[P3+2]. 
2c520 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65   However on an e
2c530 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20  rror, mem[P3+1] 
2c540 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d  and.** mem[P3+2]
2c550 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
2c560 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20   to -1..*/.case 
2c570 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b  OP_Checkpoint: {
2c580 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
2c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5a0 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
2c5b0 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73  er */.  int aRes
2c5c0 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [3];            
2c5d0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
2c5e0 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ts */.  Mem *pMe
2c5f0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2c600 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65          /* Write
2c610 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f   results here */
2c620 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
2c630 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
2c640 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61  aRes[0] = 0;.  a
2c650 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d  Res[1] = aRes[2]
2c660 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28   = -1;.  assert(
2c670 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
2c680 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53  _CHECKPOINT_PASS
2c690 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  IVE.       || pO
2c6a0 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
2c6b0 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20  ECKPOINT_FULL.  
2c6c0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
2c6d0 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
2c6e0 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 29 3b 0a  NT_RESTART.  );.
2c6f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68    rc = sqlite3Ch
2c700 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70  eckpoint(db, pOp
2c710 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26  ->p1, pOp->p2, &
2c720 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32  aRes[1], &aRes[2
2c730 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  ]);.  if( rc==SQ
2c740 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
2c750 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
2c760 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31  .    aRes[0] = 1
2c770 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c  ;.  }.  for(i=0,
2c780 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
2c790 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b  p->p3]; i<3; i++
2c7a0 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73  , pMem++){.    s
2c7b0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2c7c0 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34  Int64(pMem, (i64
2c7d0 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20  )aRes[i]);.  }  
2c7e0 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20    .  break;.};  
2c7f0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
2c800 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
2c810 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  GMA./* Opcode: J
2c820 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32  ournalMode P1 P2
2c830 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 43   P3 * P5.**.** C
2c840 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61  hange the journa
2c850 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61  l mode of databa
2c860 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20  se P1 to P3. P3 
2c870 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74  must be one of t
2c880 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52  he.** PAGER_JOUR
2c890 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75  NALMODE_XXX valu
2c8a0 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20  es. If changing 
2c8b0 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69  between the vari
2c8c0 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  ous rollback.** 
2c8d0 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74  modes (delete, t
2c8e0 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74  runcate, persist
2c8f0 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79  , off and memory
2c900 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d  ), this is a sim
2c910 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  ple.** operation
2c920 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69  . No IO is requi
2c930 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68  red..**.** If ch
2c940 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f  anging into or o
2c950 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74  ut of WAL mode t
2c960 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20  he procedure is 
2c970 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64  more complicated
2c980 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  ..**.** Write a 
2c990 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
2c9a0 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72  g the final jour
2c9b0 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69  nal-mode to regi
2c9c0 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
2c9d0 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a   OP_JournalMode:
2c9e0 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72   {    /* out2-pr
2c9f0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74  erelease */.  Bt
2ca00 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
2ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2ca20 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65   Btree to change
2ca30 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
2ca40 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61   */.  Pager *pPa
2ca50 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ger;            
2ca60 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61        /* Pager a
2ca70 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 70  ssociated with p
2ca80 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77  Bt */.  int eNew
2ca90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2caa0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a          /* New j
2cab0 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20  ournal mode */. 
2cac0 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20   int eOld;      
2cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cae0 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72   /* The old jour
2caf0 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e  nal mode */.#ifn
2cb00 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2cb10 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  WAL.  const char
2cb20 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20   *zFilename;    
2cb30 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
2cb40 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
2cb50 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e  or pPager */.#en
2cb60 64 69 66 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f  dif..  eNew = pO
2cb70 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
2cb80 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2cb90 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20  RNALMODE_DELETE 
2cba0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2cbb0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2cbc0 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20  DE_TRUNCATE .   
2cbd0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2cbe0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50  ER_JOURNALMODE_P
2cbf0 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c  ERSIST .       |
2cc00 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2cc10 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20  URNALMODE_OFF.  
2cc20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2cc30 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2cc40 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c  MEMORY.       ||
2cc50 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2cc60 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
2cc70 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2cc80 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2cc90 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65  UERY.  );.  asse
2cca0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2ccb0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2ccc0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  b );.  assert( p
2ccd0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2cce0 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ..  pBt = db->aD
2ccf0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
2cd00 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74    pPager = sqlit
2cd10 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74  e3BtreePager(pBt
2cd20 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69  );.  eOld = sqli
2cd30 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e  te3PagerGetJourn
2cd40 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a  alMode(pPager);.
2cd50 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
2cd60 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
2cd70 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c  ERY ) eNew = eOl
2cd80 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  d;.  if( !sqlite
2cd90 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65  3PagerOkToChange
2cda0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
2cdb0 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c  er) ) eNew = eOl
2cdc0 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  d;..#ifndef SQLI
2cdd0 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46  TE_OMIT_WAL.  zF
2cde0 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65  ilename = sqlite
2cdf0 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70  3PagerFilename(p
2ce00 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a  Pager, 1);..  /*
2ce10 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20   Do not allow a 
2ce20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f  transition to jo
2ce30 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66  urnal_mode=WAL f
2ce40 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20  or a database.  
2ce50 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ** in temporary 
2ce60 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68  storage or if th
2ce70 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73  e VFS does not s
2ce80 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65  upport shared me
2ce90 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28  mory .  */.  if(
2cea0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2ceb0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
2cec0 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65  && (sqlite3Strle
2ced0 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d  n30(zFilename)==
2cee0 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  0           /* T
2cef0 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20  emp file */.    
2cf00 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61     || !sqlite3Pa
2cf10 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28  gerWalSupported(
2cf20 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f  pPager))   /* No
2cf30 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73   shared-memory s
2cf40 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20  upport */.  ){. 
2cf50 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
2cf60 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77    }..  if( (eNew
2cf70 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65  !=eOld).   && (e
2cf80 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2cf90 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e  ALMODE_WAL || eN
2cfa0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2cfb0 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a  LMODE_WAL).  ){.
2cfc0 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74      if( !db->aut
2cfd0 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e  oCommit || db->n
2cfe0 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20  VdbeRead>1 ){.  
2cff0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2d000 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c  ERROR;.      sql
2d010 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2d020 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a  ->zErrMsg, db, .
2d030 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
2d040 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20  t change %s wal 
2d050 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e  mode from within
2d060 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c   a transaction",
2d070 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77  .          (eNew
2d080 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2d090 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22  ODE_WAL ? "into"
2d0a0 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20   : "out of").   
2d0b0 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61     );.      brea
2d0c0 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a  k;.    }else{. .
2d0d0 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d        if( eOld==
2d0e0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2d0f0 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20  E_WAL ){.       
2d100 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57   /* If leaving W
2d110 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74  AL mode, close t
2d120 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20  he log file. If 
2d130 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20  successful, the 
2d140 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20  call.        ** 
2d150 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c  to PagerCloseWal
2d160 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61  () checkpoints a
2d170 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20 77  nd deletes the w
2d180 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a  rite-ahead-log .
2d190 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e          ** file.
2d1a0 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f   An EXCLUSIVE lo
2d1b0 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  ck may still be 
2d1c0 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61  held on the data
2d1d0 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20  base file .     
2d1e0 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75     ** after a su
2d1f0 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e  ccessful return.
2d200 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20   .        */.   
2d210 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
2d220 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70  3PagerCloseWal(p
2d230 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20  Pager);.        
2d240 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2d250 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  K ){.          s
2d260 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
2d270 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2d280 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20  , eNew);.       
2d290 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69   }.      }else i
2d2a0 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
2d2b0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
2d2c0 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  Y ){.        /* 
2d2d0 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f  Cannot transitio
2d2e0 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20  n directly from 
2d2f0 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20  MEMORY to WAL.  
2d300 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20  Use mode OFF.   
2d310 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e       ** as an in
2d320 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20  termediate */.  
2d330 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
2d340 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2d350 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a  (pPager, PAGER_J
2d360 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b  OURNALMODE_OFF);
2d370 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
2d380 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e    /* Open a tran
2d390 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64  saction on the d
2d3a0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65  atabase file. Re
2d3b0 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
2d3c0 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a  journal.      **
2d3d0 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e   mode, this tran
2d3e0 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75  saction always u
2d3f0 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  ses a rollback j
2d400 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f  ournal..      */
2d410 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
2d420 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
2d430 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a  rans(pBt)==0 );.
2d440 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
2d450 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
2d460 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2d470 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70  treeSetVersion(p
2d480 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52  Bt, (eNew==PAGER
2d490 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2d4a0 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20   ? 2 : 1));.    
2d4b0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65    }.    }.  }.#e
2d4c0 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53  ndif /* ifndef S
2d4d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a  QLITE_OMIT_WAL *
2d4e0 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  /..  if( rc ){. 
2d4f0 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
2d500 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c    }.  eNew = sql
2d510 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2d520 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2d530 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20 3d  eNew);..  pOut =
2d540 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2d550 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
2d560 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
2d570 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
2d580 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20  pOut->z = (char 
2d590 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  *)sqlite3Journal
2d5a0 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a  Modename(eNew);.
2d5b0 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69    pOut->n = sqli
2d5c0 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74  te3Strlen30(pOut
2d5d0 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  ->z);.  pOut->en
2d5e0 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
2d5f0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2d600 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75  angeEncoding(pOu
2d610 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  t, encoding);.  
2d620 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66  break;.};.#endif
2d630 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2d640 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21  PRAGMA */..#if !
2d650 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2d660 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21  MIT_VACUUM) && !
2d670 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2d680 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f  MIT_ATTACH)./* O
2d690 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20  pcode: Vacuum * 
2d6a0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61  * * * *.**.** Va
2d6b0 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20  cuum the entire 
2d6c0 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20  database.  This 
2d6d0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73  opcode will caus
2d6e0 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a  e other virtual.
2d6f0 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62  ** machines to b
2d700 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72 75  e created and ru
2d710 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62  n.  It may not b
2d720 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  e called from wi
2d730 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61  thin.** a transa
2d740 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2d750 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73  P_Vacuum: {.  as
2d760 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
2d770 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  y==0 );.  rc = s
2d780 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
2d790 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29  &p->zErrMsg, db)
2d7a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2d7b0 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
2d7c0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
2d7d0 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
2d7e0 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
2d7f0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2d800 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
2d810 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
2d820 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
2d830 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
2d840 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
2d850 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
2d860 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
2d870 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2d880 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
2d890 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
2d8a0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2d8b0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2d8c0 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
2d8d0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2d8e0 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
2d8f0 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
2d900 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2d910 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2d920 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
2d930 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
2d940 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31  Mask)1)<<pOp->p1
2d950 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))!=0 );.  asser
2d960 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2d970 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  0 );.  pBt = db-
2d980 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
2d990 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  t;.  rc = sqlite
2d9a0 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d  3BtreeIncrVacuum
2d9b0 28 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d  (pBt);.  if( rc=
2d9c0 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
2d9d0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2d9e0 20 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53   - 1;.    rc = S
2d9f0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20  QLITE_OK;.  }.  
2da00 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2da10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69  ./* Opcode: Expi
2da20 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  re P1 * * * *.**
2da30 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d  .** Cause precom
2da40 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73  piled statements
2da50 20 74 6f 20 62 65 63 6f 6d 65 20 65 78 70 69 72   to become expir
2da60 65 64 2e 20 41 6e 20 65 78 70 69 72 65 64 20 73  ed. An expired s
2da70 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 61 69 6c  tatement.** fail
2da80 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20  s with an error 
2da90 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f 53  code of SQLITE_S
2daa0 43 48 45 4d 41 20 69 66 20 69 74 20 69 73 20 65  CHEMA if it is e
2dab0 76 65 72 20 65 78 65 63 75 74 65 64 20 0a 2a 2a  ver executed .**
2dac0 20 28 76 69 61 20 73 71 6c 69 74 65 33 5f 73 74   (via sqlite3_st
2dad0 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49 66  ep())..** .** If
2dae0 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61   P1 is 0, then a
2daf0 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ll SQL statement
2db00 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64  s become expired
2db10 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  . If P1 is non-z
2db20 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c  ero,.** then onl
2db30 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  y the currently 
2db40 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d  executing statem
2db50 65 6e 74 20 69 73 20 61 66 66 65 63 74 65 64 2e  ent is affected.
2db60 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70   .*/.case OP_Exp
2db70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f  ire: {.  if( !pO
2db80 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
2db90 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
2dba0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
2dbb0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
2dbc0 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20  ->expired = 1;. 
2dbd0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
2dbe0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2dbf0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
2dc00 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65  /* Opcode: Table
2dc10 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34  Lock P1 P2 P3 P4
2dc20 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20   *.**.** Obtain 
2dc30 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74  a lock on a part
2dc40 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68  icular table. Th
2dc50 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
2dc60 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e  s only used when
2dc70 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63  .** the shared-c
2dc80 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73 20  ache feature is 
2dc90 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20  enabled. .**.** 
2dca0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
2dcb0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2dcc0 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
2dcd0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2dce0 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65  .** on which the
2dcf0 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65   lock is acquire
2dd00 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69  d.  A readlock i
2dd10 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33  s obtained if P3
2dd20 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74  ==0 or.** a writ
2dd30 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e  e lock if P3==1.
2dd40 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69  .**.** P2 contai
2dd50 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65  ns the root-page
2dd60 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
2dd70 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20   lock..**.** P4 
2dd80 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74  contains a point
2dd90 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f  er to the name o
2dda0 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
2ddb0 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69  g locked. This i
2ddc0 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74  s only.** used t
2ddd0 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72  o generate an er
2dde0 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74  ror message if t
2ddf0 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62  he lock cannot b
2de00 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63  e obtained..*/.c
2de10 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b  ase OP_TableLock
2de20 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65  : {.  u8 isWrite
2de30 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e  Lock = (u8)pOp->
2de40 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74  p3;.  if( isWrit
2de50 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d  eLock || 0==(db-
2de60 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65  >flags&SQLITE_Re
2de70 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29  adUncommitted) )
2de80 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70  {.    int p1 = p
2de90 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73  Op->p1; .    ass
2dea0 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31  ert( p1>=0 && p1
2deb0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20  <db->nDb );.    
2dec0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
2ded0 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
2dee0 73 6b 29 31 29 3c 3c 70 31 29 29 21 3d 30 20 29  sk)1)<<p1))!=0 )
2def0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 73  ;.    assert( is
2df00 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20  WriteLock==0 || 
2df10 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29  isWriteLock==1 )
2df20 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2df30 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65  e3BtreeLockTable
2df40 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74  (db->aDb[p1].pBt
2df50 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69  , pOp->p2, isWri
2df60 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28  teLock);.    if(
2df70 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49   (rc&0xFF)==SQLI
2df80 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20  TE_LOCKED ){.   
2df90 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
2dfa0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
2dfb0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2dfc0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2dfd0 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73 65 20  , db, "database 
2dfe0 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a  table is locked:
2dff0 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a   %s", z);.    }.
2e000 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2e010 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2e020 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
2e030 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2e040 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2e050 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2e060 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50  : VBegin * * * P
2e070 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  4 *.**.** P4 may
2e080 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   be a pointer to
2e090 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
2e0a0 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73   structure. If s
2e0b0 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20  o, call the .** 
2e0c0 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f  xBegin method fo
2e0d0 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a  r that table..**
2e0e0 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65  .** Also, whethe
2e0f0 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73  r or not P4 is s
2e100 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74  et, check that t
2e110 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67  his is not being
2e120 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20   called from.** 
2e130 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63  within a callbac
2e140 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  k to a virtual t
2e150 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74  able xSync() met
2e160 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74  hod. If it is, t
2e170 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65  he error.** code
2e180 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20   will be set to 
2e190 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a  SQLITE_LOCKED..*
2e1a0 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e  /.case OP_VBegin
2e1b0 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56  : {.  VTable *pV
2e1c0 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70  Tab;.  pVTab = p
2e1d0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20  Op->p4.pVtab;.  
2e1e0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
2e1f0 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29  Begin(db, pVTab)
2e200 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20 29 20  ;.  if( pVTab ) 
2e210 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67  importVtabErrMsg
2e220 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62  (p, pVTab->pVtab
2e230 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
2e240 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2e250 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2e260 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2e270 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2e280 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2e290 20 56 43 72 65 61 74 65 20 50 31 20 2a 20 2a 20   VCreate P1 * * 
2e2a0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2e2b0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
2e2c0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
2e2d0 64 61 74 61 62 61 73 65 20 50 31 2e 20 43 61 6c  database P1. Cal
2e2e0 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d 65  l the xCreate me
2e2f0 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74  thod.** for that
2e300 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
2e310 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20  OP_VCreate: {.  
2e320 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
2e330 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70  CallCreate(db, p
2e340 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2e350 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  z, &p->zErrMsg);
2e360 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2e370 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2e380 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2e390 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2e3a0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2e3b0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2e3c0 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50  Destroy P1 * * P
2e3d0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2e3e0 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69  the name of a vi
2e3f0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64  rtual table in d
2e400 61 74 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c  atabase P1.  Cal
2e410 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d  l the xDestroy m
2e420 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74  ethod.** of that
2e430 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
2e440 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20  OP_VDestroy: {. 
2e450 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2e460 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 2;.  rc = sql
2e470 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
2e480 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  roy(db, pOp->p1,
2e490 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70   pOp->p4.z);.  p
2e4a0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
2e4b0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23   0;.  break;.}.#
2e4c0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2e4d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2e4e0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2e4f0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2e500 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2e510 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50  : VOpen P1 * * P
2e520 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2e530 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
2e540 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
2e550 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
2e560 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
2e570 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f  ** P1 is a curso
2e580 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20  r number.  This 
2e590 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63  opcode opens a c
2e5a0 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72  ursor to the vir
2e5b0 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e  tual.** table an
2e5c0 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75  d stores that cu
2e5d0 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63  rsor in P1..*/.c
2e5e0 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a  ase OP_VOpen: {.
2e5f0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2e600 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  ur;.  sqlite3_vt
2e610 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
2e620 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
2e630 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2e640 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2e650 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73  *pModule;..  ass
2e660 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
2e670 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b  r );.  pCur = 0;
2e680 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d  .  pVtabCursor =
2e690 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f   0;.  pVtab = pO
2e6a0 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
2e6b0 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
2e6c0 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  (sqlite3_module 
2e6d0 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  *)pVtab->pModule
2e6e0 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74 61 62  ;.  assert(pVtab
2e6f0 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20   && pModule);.  
2e700 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f  rc = pModule->xO
2e710 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61  pen(pVtab, &pVta
2e720 62 43 75 72 73 6f 72 29 3b 0a 20 20 69 6d 70 6f  bCursor);.  impo
2e730 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20  rtVtabErrMsg(p, 
2e740 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51  pVtab);.  if( SQ
2e750 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20  LITE_OK==rc ){. 
2e760 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65     /* Initialize
2e770 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
2e780 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20  rsor base class 
2e790 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73  */.    pVtabCurs
2e7a0 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61  or->pVtab = pVta
2e7b0 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69  b;..    /* Initi
2e7c0 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f  alize vdbe curso
2e7d0 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20  r object */.    
2e7e0 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
2e7f0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
2e800 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20  , 0, -1, 0);.   
2e810 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20   if( pCur ){.   
2e820 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75     pCur->pVtabCu
2e830 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73  rsor = pVtabCurs
2e840 6f 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e  or;.      pCur->
2e850 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 43  pModule = pVtabC
2e860 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d  ursor->pVtab->pM
2e870 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65  odule;.    }else
2e880 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c  {.      db->mall
2e890 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
2e8a0 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c      pModule->xCl
2e8b0 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29  ose(pVtabCursor)
2e8c0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
2e8d0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2e8e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2e8f0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2e900 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e910 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2e920 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65  * Opcode: VFilte
2e930 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  r P1 P2 P3 P4 *.
2e940 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  **.** P1 is a cu
2e950 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e  rsor opened usin
2e960 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20  g VOpen.  P2 is 
2e970 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  an address to ju
2e980 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20  mp to if.** the 
2e990 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20  filtered result 
2e9a0 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a  set is empty..**
2e9b0 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72  .** P4 is either
2e9c0 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e   NULL or a strin
2e9d0 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72  g that was gener
2e9e0 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73  ated by the xBes
2e9f0 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64  tIndex.** method
2ea00 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
2ea10 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74   The interpretat
2ea20 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74  ion of the P4 st
2ea30 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20  ring is left.** 
2ea40 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  to the module im
2ea50 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  plementation..**
2ea60 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2ea70 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c  invokes the xFil
2ea80 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68  ter method on th
2ea90 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
2eaa0 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20  specified.** by 
2eab0 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72  P1.  The integer
2eac0 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61   query plan para
2ead0 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72  meter to xFilter
2eae0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
2eaf0 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65  gister.** P3. Re
2eb00 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72  gister P3+1 stor
2eb10 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61  es the argc para
2eb20 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73  meter to be pass
2eb30 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69  ed to the.** xFi
2eb40 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67  lter method. Reg
2eb50 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b  isters P3+2..P3+
2eb60 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61  1+argc are the a
2eb70 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  rgc.** additiona
2eb80 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69  l parameters whi
2eb90 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f  ch are passed to
2eba0 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61  .** xFilter as a
2ebb0 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33  rgv. Register P3
2ebc0 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b  +2 becomes argv[
2ebd0 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74  0] when passed t
2ebe0 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a  o xFilter..**.**
2ebf0 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   A jump is made 
2ec00 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73  to P2 if the res
2ec10 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69  ult set after fi
2ec20 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65  ltering would be
2ec30 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20   empty..*/.case 
2ec40 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20  OP_VFilter: {   
2ec50 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
2ec60 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75   nArg;.  int iQu
2ec70 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  ery;.  const sql
2ec80 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
2ec90 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75  dule;.  Mem *pQu
2eca0 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67  ery;.  Mem *pArg
2ecb0 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  c;.  sqlite3_vta
2ecc0 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43  b_cursor *pVtabC
2ecd0 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33  ursor;.  sqlite3
2ece0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2ecf0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
2ed00 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
2ed10 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  nt i;.  Mem **ap
2ed20 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d  Arg;..  pQuery =
2ed30 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2ed40 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75 65  .  pArgc = &pQue
2ed50 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20  ry[1];.  pCur = 
2ed60 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2ed70 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  ];.  assert( mem
2ed80 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29 20  IsValid(pQuery) 
2ed90 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
2eda0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75  ACE(pOp->p3, pQu
2edb0 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ery);.  assert( 
2edc0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2edd0 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72 73  r );.  pVtabCurs
2ede0 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  or = pCur->pVtab
2edf0 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62 20  Cursor;.  pVtab 
2ee00 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  = pVtabCursor->p
2ee10 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2ee20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
2ee30 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65  ;..  /* Grab the
2ee40 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e   index number an
2ee50 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  d argc parameter
2ee60 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  s */.  assert( (
2ee70 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45  pQuery->flags&ME
2ee80 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72  M_Int)!=0 && pAr
2ee90 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  gc->flags==MEM_I
2eea0 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28  nt );.  nArg = (
2eeb0 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a  int)pArgc->u.i;.
2eec0 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29    iQuery = (int)
2eed0 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20  pQuery->u.i;..  
2eee0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46  /* Invoke the xF
2eef0 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a  ilter method */.
2ef00 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b    {.    res = 0;
2ef10 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  .    apArg = p->
2ef20 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28 69  apArg;.    for(i
2ef30 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b   = 0; i<nArg; i+
2ef40 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67 5b  +){.      apArg[
2ef50 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d  i] = &pArgc[i+1]
2ef60 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
2ef70 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
2ef80 61 70 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d  apArg[i]);.    }
2ef90 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d  ..    p->inVtabM
2efa0 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72  ethod = 1;.    r
2efb0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69  c = pModule->xFi
2efc0 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f 72  lter(pVtabCursor
2efd0 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70  , iQuery, pOp->p
2efe0 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  4.z, nArg, apArg
2eff0 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  );.    p->inVtab
2f000 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20  Method = 0;.    
2f010 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67  importVtabErrMsg
2f020 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
2f030 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2f040 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  K ){.      res =
2f050 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
2f060 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20  VtabCursor);.   
2f070 20 7d 0a 0a 20 20 20 20 69 66 28 20 72 65 73 20   }..    if( res 
2f080 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
2f090 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d  p->p2 - 1;.    }
2f0a0 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  .  }.  pCur->nul
2f0b0 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65  lRow = 0;..  bre
2f0c0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2f0d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2f0e0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2f0f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2f100 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2f110 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e   Opcode: VColumn
2f120 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2f130 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61  .** Store the va
2f140 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68  lue of the P2-th
2f150 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68   column of.** th
2f160 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72  e row of the vir
2f170 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20  tual-table that 
2f180 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f  the .** P1 curso
2f190 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f  r is pointing to
2f1a0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
2f1b0 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  3..*/.case OP_VC
2f1c0 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74  olumn: {.  sqlit
2f1d0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2f1e0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2f1f0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
2f200 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20  .  Mem *pDest;. 
2f210 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
2f220 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64   sContext;..  Vd
2f230 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d  beCursor *pCur =
2f240 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2f250 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2f260 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
2f270 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2f280 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
2f290 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
2f2a0 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  pDest = &aMem[pO
2f2b0 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
2f2c0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44  utToChange(p, pD
2f2d0 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72  est);.  if( pCur
2f2e0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
2f2f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2f300 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
2f310 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
2f320 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56  pVtab = pCur->pV
2f330 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2f340 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
2f350 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2f360 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
2f370 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65  >xColumn );.  me
2f380 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20  mset(&sContext, 
2f390 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65  0, sizeof(sConte
2f3a0 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  xt));..  /* The 
2f3b0 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20  output cell may 
2f3c0 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62  already have a b
2f3d0 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e  uffer allocated.
2f3e0 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 63   Move.  ** the c
2f3f0 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20  urrent contents 
2f400 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73 6f  to sContext.s so
2f410 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65   in case the use
2f420 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a  r-function .  **
2f430 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c 72   can use the alr
2f440 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62  eady allocated b
2f450 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66  uffer instead of
2f460 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a 20   allocating a . 
2f470 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a   ** new one..  *
2f480 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  /.  sqlite3VdbeM
2f490 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78 74  emMove(&sContext
2f4a0 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d 65  .s, pDest);.  Me
2f4b0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73 43  mSetTypeFlag(&sC
2f4c0 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75  ontext.s, MEM_Nu
2f4d0 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4d 6f  ll);..  rc = pMo
2f4e0 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43  dule->xColumn(pC
2f4f0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c  ur->pVtabCursor,
2f500 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d   &sContext, pOp-
2f510 3e 70 32 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74  >p2);.  importVt
2f520 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
2f530 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65  b);.  if( sConte
2f540 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  xt.isError ){.  
2f550 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e    rc = sContext.
2f560 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  isError;.  }..  
2f570 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75  /* Copy the resu
2f580 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
2f590 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65 67  on to the P3 reg
2f5a0 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64  ister. We.  ** d
2f5b0 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c 65 73  o this regardles
2f5c0 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
2f5d0 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63 63  not an error occ
2f5e0 75 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20  urred to ensure 
2f5f0 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63  any.  ** dynamic
2f600 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73   allocation in s
2f610 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d  Context.s (a Mem
2f620 20 73 74 72 75 63 74 29 20 69 73 20 20 72 65 6c   struct) is  rel
2f630 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71  eased..  */.  sq
2f640 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2f650 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78  ncoding(&sContex
2f660 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  t.s, encoding);.
2f670 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2f680 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43 6f  Move(pDest, &sCo
2f690 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47 49  ntext.s);.  REGI
2f6a0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
2f6b0 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50  p3, pDest);.  UP
2f6c0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2f6d0 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28  E(pDest);..  if(
2f6e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
2f6f0 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a  ooBig(pDest) ){.
2f700 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
2f710 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2f720 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2f730 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2f740 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2f750 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2f760 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2f770 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20  de: VNext P1 P2 
2f780 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61  * * *.**.** Adva
2f790 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  nce virtual tabl
2f7a0 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74  e P1 to the next
2f7b0 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75   row in its resu
2f7c0 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75  lt set and.** ju
2f7d0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
2f7e0 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68  n P2.  Or, if th
2f7f0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
2f800 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74  has reached.** t
2f810 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65  he end of its re
2f820 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66  sult set, then f
2f830 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
2f840 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
2f850 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
2f860 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75  VNext: {   /* ju
2f870 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  mp */.  sqlite3_
2f880 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
2f890 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
2f8a0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
2f8b0 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43  int res;.  VdbeC
2f8c0 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20  ursor *pCur;..  
2f8d0 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20  res = 0;.  pCur 
2f8e0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2f8f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2f900 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2f910 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e   );.  if( pCur->
2f920 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62  nullRow ){.    b
2f930 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
2f940 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
2f950 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
2f960 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
2f970 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
2f980 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  rt( pModule->xNe
2f990 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  xt );..  /* Invo
2f9a0 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d  ke the xNext() m
2f9b0 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64  ethod of the mod
2f9c0 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f  ule. There is no
2f9d0 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a   way for the.  *
2f9e0 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70  * underlying imp
2f9f0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72  lementation to r
2fa00 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
2fa10 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72  f one occurs dur
2fa20 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29  ing.  ** xNext()
2fa30 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e  . Instead, if an
2fa40 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74   error occurs, t
2fa50 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20  rue is returned 
2fa60 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74  (indicating that
2fa70 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61   .  ** data is a
2fa80 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68  vailable) and th
2fa90 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74  e error code ret
2faa0 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75  urned when xColu
2fab0 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20  mn or.  ** some 
2fac0 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20  other method is 
2fad0 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20  next invoked on 
2fae0 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c  the save virtual
2faf0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20   table cursor.. 
2fb00 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d   */.  p->inVtabM
2fb10 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20  ethod = 1;.  rc 
2fb20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74  = pModule->xNext
2fb30 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
2fb40 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  or);.  p->inVtab
2fb50 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 69 6d  Method = 0;.  im
2fb60 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70  portVtabErrMsg(p
2fb70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
2fb80 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2fb90 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75  .    res = pModu
2fba0 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70  le->xEof(pCur->p
2fbb0 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d  VtabCursor);.  }
2fbc0 0a 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a  ..  if( !res ){.
2fbd0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
2fbe0 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f  is data, jump to
2fbf0 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20   P2 */.    pc = 
2fc00 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2fc10 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
2fc20 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23  r_interrupt;.}.#
2fc30 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2fc40 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2fc50 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2fc60 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2fc70 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2fc80 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a  : VRename P1 * *
2fc90 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2fca0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2fcb0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
2fcc0 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
2fcd0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2fce0 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
2fcf0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
2fd00 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61  responding xRena
2fd10 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76  me method. The v
2fd20 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73  alue.** in regis
2fd30 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65 64  ter P1 is passed
2fd40 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72   as the zName ar
2fd50 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52  gument to the xR
2fd60 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f  ename method..*/
2fd70 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65  .case OP_VRename
2fd80 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
2fd90 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d  ab *pVtab;.  Mem
2fda0 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61   *pName;..  pVta
2fdb0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
2fdc0 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d  b->pVtab;.  pNam
2fdd0 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  e = &aMem[pOp->p
2fde0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56  1];.  assert( pV
2fdf0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
2fe00 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72  ename );.  asser
2fe10 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e  t( memIsValid(pN
2fe20 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74  ame) );.  assert
2fe30 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2fe40 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
2fe50 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e  RACE(pOp->p1, pN
2fe60 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ame);.  assert( 
2fe70 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d  pName->flags & M
2fe80 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74  EM_Str );.  test
2fe90 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
2fea0 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b  ==SQLITE_UTF8 );
2feb0 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
2fec0 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
2fed0 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73  UTF16BE );.  tes
2fee0 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
2fef0 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  c==SQLITE_UTF16L
2ff00 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  E );.  rc = sqli
2ff10 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2ff20 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c  oding(pName, SQL
2ff30 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28  ITE_UTF8);.  if(
2ff40 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2ff50 7b 0a 20 20 20 20 72 63 20 3d 20 70 56 74 61 62  {.    rc = pVtab
2ff60 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61  ->pModule->xRena
2ff70 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d  me(pVtab, pName-
2ff80 3e 7a 29 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56  >z);.    importV
2ff90 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74  tabErrMsg(p, pVt
2ffa0 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  ab);.    p->expi
2ffb0 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  red = 0;.  }.  b
2ffc0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
2ffd0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ffe0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2fff0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64  ./* Opcode: VUpd
30000 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ate P1 P2 P3 P4 
30010 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
30020 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
30030 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
30040 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
30050 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
30060 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
30070 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70  okes the corresp
30080 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d  onding xUpdate m
30090 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73  ethod. P2 values
300a0 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f  .** are contiguo
300b0 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  us memory cells 
300c0 73 74 61 72 74 69 6e 67 20 61 74 20 50 33 20 74  starting at P3 t
300d0 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78 55  o pass to the xU
300e0 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61  pdate .** invoca
300f0 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20  tion. The value 
30100 69 6e 20 72 65 67 69 73 74 65 72 20 28 50 33 2b  in register (P3+
30110 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64  P2-1) correspond
30120 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74  s to the .** p2t
30130 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  h element of the
30140 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73 73   argv array pass
30150 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a  ed to xUpdate..*
30160 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65  *.** The xUpdate
30170 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20   method will do 
30180 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49  a DELETE or an I
30190 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a  NSERT or both..*
301a0 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c  * The argv[0] el
301b0 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72  ement (which cor
301c0 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f  responds to memo
301d0 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69  ry cell P3).** i
301e0 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61  s the rowid of a
301f0 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20   row to delete. 
30200 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e   If argv[0] is N
30210 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20  ULL then no .** 
30220 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e  deletion occurs.
30230 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c    The argv[1] el
30240 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77  ement is the row
30250 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a  id of the new .*
30260 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e  * row.  This can
30270 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65   be NULL to have
30280 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
30290 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65  le select the ne
302a0 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20  w .** rowid for 
302b0 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62  itself.  The sub
302c0 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73  sequent elements
302d0 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 61 72   in the array ar
302e0 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  e .** the values
302f0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
30300 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a  he new row..**.*
30310 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20  * If P2==1 then 
30320 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65 72  no insert is per
30330 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d  formed.  argv[0]
30340 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
30350 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c  .** a row to del
30360 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ete..**.** P1 is
30370 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e   a boolean flag.
30380 20 49 66 20 69 74 20 69 73 20 73 65 74 20 74 6f   If it is set to
30390 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 78 55   true and the xU
303a0 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73  pdate call.** is
303b0 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
303c0 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75  n the value retu
303d0 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
303e0 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
303f0 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74  d() .** is set t
30400 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
30410 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65  he rowid for the
30420 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74   row just insert
30430 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
30440 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69  Update: {.  sqli
30450 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
30460 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  .  sqlite3_modul
30470 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
30480 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b  t nArg;.  int i;
30490 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
304a0 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61  rowid;.  Mem **a
304b0 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b  pArg;.  Mem *pX;
304c0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
304d0 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c  >p2==1        ||
304e0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69   pOp->p5==OE_Fai
304f0 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  l   || pOp->p5==
30500 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20  OE_Rollback .   
30510 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d      || pOp->p5==
30520 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d  OE_Abort || pOp-
30530 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c  >p5==OE_Ignore |
30540 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  | pOp->p5==OE_Re
30550 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73  place.  );.  ass
30560 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
30570 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d  ==0 );.  pVtab =
30580 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
30590 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
305a0 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
305b0 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
305c0 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f  ule;.  nArg = pO
305d0 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
305e0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
305f0 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41  _VTAB );.  if( A
30600 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78  LWAYS(pModule->x
30610 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75  Update) ){.    u
30620 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  8 vtabOnConflict
30630 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e   = db->vtabOnCon
30640 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67  flict;.    apArg
30650 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20   = p->apArg;.   
30660 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d   pX = &aMem[pOp-
30670 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  >p3];.    for(i=
30680 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
30690 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
306a0 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b  emIsValid(pX) );
306b0 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
306c0 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a  oChange(p, pX);.
306d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
306e0 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 58  eMemStoreType(pX
306f0 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  );.      apArg[i
30700 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58  ] = pX;.      pX
30710 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62  ++;.    }.    db
30720 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
30730 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20   = pOp->p5;.    
30740 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55  rc = pModule->xU
30750 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72  pdate(pVtab, nAr
30760 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64  g, apArg, &rowid
30770 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f  );.    db->vtabO
30780 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62  nConflict = vtab
30790 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20  OnConflict;.    
307a0 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67  importVtabErrMsg
307b0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
307c0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
307d0 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a  K && pOp->p1 ){.
307e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41        assert( nA
307f0 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d  rg>1 && apArg[0]
30800 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66   && (apArg[0]->f
30810 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29  lags&MEM_Null) )
30820 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74  ;.      db->last
30830 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
30840 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d  d = rowid;.    }
30850 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66  .    if( (rc&0xf
30860 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54  f)==SQLITE_CONST
30870 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34  RAINT && pOp->p4
30880 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61  .pVtab->bConstra
30890 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  int ){.      if(
308a0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e   pOp->p5==OE_Ign
308b0 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ore ){.        r
308c0 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
308d0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
308e0 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69      p->errorActi
308f0 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d  on = ((pOp->p5==
30900 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45  OE_Replace) ? OE
30910 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35  _Abort : pOp->p5
30920 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
30930 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e  else{.      p->n
30940 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a  Change++;.    }.
30950 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
30960 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
30970 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
30980 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53  E */..#ifndef  S
30990 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
309a0 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
309b0 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31  de: Pagecount P1
309c0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
309d0 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e  Write the curren
309e0 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  t number of page
309f0 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  s in database P1
30a00 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
30a10 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  P2..*/.case OP_P
30a20 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20  agecount: {     
30a30 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
30a40 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
30a50 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74  Out->u.i = sqlit
30a60 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28  e3BtreeLastPage(
30a70 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
30a80 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pBt);.  break;.
30a90 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  }.#endif...#ifnd
30aa0 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ef  SQLITE_OMIT_
30ab0 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a  PAGER_PRAGMAS./*
30ac0 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e   Opcode: MaxPgcn
30ad0 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
30ae0 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20  *.** Try to set 
30af0 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
30b00 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62   count for datab
30b10 61 73 65 20 50 31 20 74 6f 20 74 68 65 20 76 61  ase P1 to the va
30b20 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f  lue in P3..** Do
30b30 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78   not let the max
30b40 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20  imum page count 
30b50 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63  fall below the c
30b60 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e  urrent page coun
30b70 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20  t and.** do not 
30b80 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d  change the maxim
30b90 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61  um page count va
30ba0 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a  lue if P3==0..**
30bb0 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61  .** Store the ma
30bc0 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
30bd0 20 61 66 74 65 72 20 74 68 65 20 63 68 61 6e 67   after the chang
30be0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
30bf0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78  ..*/.case OP_Max
30c00 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  Pgcnt: {        
30c10 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
30c20 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69  elease */.  unsi
30c30 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b  gned int newMax;
30c40 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
30c50 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
30c60 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
30c70 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66  newMax = 0;.  if
30c80 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
30c90 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65   newMax = sqlite
30ca0 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 70  3BtreeLastPage(p
30cb0 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77  Bt);.    if( new
30cc0 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29  Max < (unsigned)
30cd0 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78  pOp->p3 ) newMax
30ce0 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70   = (unsigned)pOp
30cf0 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->p3;.  }.  pOut
30d00 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42  ->u.i = sqlite3B
30d10 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74  treeMaxPageCount
30d20 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20  (pBt, newMax);. 
30d30 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
30d40 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
30d50 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20  E_OMIT_TRACE./* 
30d60 4f 70 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20  Opcode: Trace * 
30d70 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49  * * P4 *.**.** I
30d80 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61  f tracing is ena
30d90 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c  bled (by the sql
30da0 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e  ite3_trace()) in
30db0 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a  terface, then.**
30dc0 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e   the UTF-8 strin
30dd0 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50  g contained in P
30de0 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20  4 is emitted on 
30df0 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61  the trace callba
30e00 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ck..*/.case OP_T
30e10 72 61 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a  race: {.  char *
30e20 7a 54 72 61 63 65 3b 0a 20 20 63 68 61 72 20 2a  zTrace;.  char *
30e30 7a 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 78 54  z;..  if( db->xT
30e40 72 61 63 65 0a 20 20 20 26 26 20 21 70 2d 3e 64  race.   && !p->d
30e50 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20  oingRerun.   && 
30e60 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e  (zTrace = (pOp->
30e70 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a  p4.z ? pOp->p4.z
30e80 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a   : p->zSql))!=0.
30e90 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c    ){.    z = sql
30ea0 69 74 65 33 56 64 62 65 45 78 70 61 6e 64 53 71  ite3VdbeExpandSq
30eb0 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  l(p, zTrace);.  
30ec0 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d    db->xTrace(db-
30ed0 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a  >pTraceArg, z);.
30ee0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
30ef0 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69  e(db, z);.  }.#i
30f00 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
30f10 47 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61  G.  if( (db->fla
30f20 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54  gs & SQLITE_SqlT
30f30 72 61 63 65 29 21 3d 30 0a 20 20 20 26 26 20 28  race)!=0.   && (
30f40 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
30f50 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
30f60 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20  : p->zSql))!=0. 
30f70 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
30f80 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d  ebugPrintf("SQL-
30f90 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54  trace: %s\n", zT
30fa0 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  race);.  }.#endi
30fb0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
30fc0 47 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  G */.  break;.}.
30fd0 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f  #endif.../* Opco
30fe0 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a  de: Noop * * * *
30ff0 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68   *.**.** Do noth
31000 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72  ing.  This instr
31010 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20  uction is often 
31020 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70  useful as a jump
31030 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e  .** destination.
31040 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  .*/./*.** The ma
31050 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f  gic Explain opco
31060 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65  de are only inse
31070 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69  rted when explai
31080 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69  n==2 (which.** i
31090 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68  s to say when th
310a0 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  e EXPLAIN QUERY 
310b0 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75  PLAN syntax is u
310c0 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70  sed.).** This op
310d0 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66  code records inf
310e0 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68  ormation from th
310f0 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74  e optimizer.  It
31100 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73   is the.** the s
31110 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20  ame as a no-op. 
31120 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76   This opcodesnev
31130 65 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20  er appears in a 
31140 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e  real VM program.
31150 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20  .*/.default: {  
31160 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20          /* This 
31170 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f  is really OP_Noo
31180 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e  p and OP_Explain
31190 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
311a0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
311b0 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  op || pOp->opcod
311c0 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b  e==OP_Explain );
311d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a  .  break;.}../**
311e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
311f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31210 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31220 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54  ***********.** T
31230 68 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20  he cases of the 
31240 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
31250 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65   above this line
31260 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69   should all be i
31270 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20  ndented.** by 6 
31280 73 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65  spaces.  But the
31290 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61   left-most 6 spa
312a0 63 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ces have been re
312b0 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65  moved to improve
312c0 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c   the.** readabil
312d0 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20  ity.  From this 
312e0 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74  point on down, t
312f0 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74  he normal indent
31300 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a  ation rules are.
31310 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a  ** restored..***
31320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20  **********/.    
31370 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  }..#ifdef VDBE_P
31380 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20  ROFILE.    {.   
31390 20 20 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d     u64 elapsed =
313a0 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
313b0 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20   - start;.      
313c0 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65  pOp->cycles += e
313d0 6c 61 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f  lapsed;.      pO
313e0 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a  p->cnt++;.#if 0.
313f0 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28          fprintf(
31400 73 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20  stdout, "%10llu 
31410 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20  ", elapsed);.   
31420 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
31430 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
31440 6f 72 69 67 50 63 2c 20 26 61 4f 70 5b 6f 72 69  origPc, &aOp[ori
31450 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20  gPc]);.#endif.  
31460 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
31470 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
31480 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69   code adds nothi
31490 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c  ng to the actual
314a0 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20   functionality. 
314b0 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f     ** of the pro
314c0 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c  gram.  It is onl
314d0 79 20 68 65 72 65 20 66 6f 72 20 74 65 73 74 69  y here for testi
314e0 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67  ng and debugging
314f0 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20  ..    ** On the 
31500 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64  other hand, it d
31510 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63 79 63  oes burn CPU cyc
31520 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65 20 74  les every time t
31530 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68  hrough.    ** th
31540 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70  e evaluator loop
31550 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61  .  So we can lea
31560 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e  ve it out when N
31570 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64  DEBUG is defined
31580 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66  ..    */.#ifndef
31590 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73 65   NDEBUG.    asse
315a0 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63  rt( pc>=-1 && pc
315b0 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64  <p->nOp );..#ifd
315c0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
315d0 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65      if( p->trace
315e0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63   ){.      if( rc
315f0 21 3d 30 20 29 20 66 70 72 69 6e 74 66 28 70 2d  !=0 ) fprintf(p-
31600 3e 74 72 61 63 65 2c 22 72 63 3d 25 64 5c 6e 22  >trace,"rc=%d\n"
31610 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ,rc);.      if( 
31620 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28  pOp->opflags & (
31630 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45  OPFLG_OUT2_PRERE
31640 4c 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32  LEASE|OPFLG_OUT2
31650 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  ) ){.        reg
31660 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72  isterTrace(p->tr
31670 61 63 65 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61  ace, pOp->p2, &a
31680 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
31690 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
316a0 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20   pOp->opflags & 
316b0 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20  OPFLG_OUT3 ){.  
316c0 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
316d0 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f  ace(p->trace, pO
316e0 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p3, &aMem[pOp
316f0 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p3]);.      }.
31700 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a      }.#endif  /*
31710 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
31720 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42  .#endif  /* NDEB
31730 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68  UG */.  }  /* Th
31740 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72  e end of the for
31750 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f  (;;) loop the lo
31760 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f  ops through opco
31770 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20  des */..  /* If 
31780 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  we reach this po
31790 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  int, it means th
317a0 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20  at execution is 
317b0 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20  finished with.  
317c0 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73  ** an error of s
317d0 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76  ome kind..  */.v
317e0 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a  dbe_error_halt:.
317f0 20 20 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a    assert( rc );.
31800 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20    p->rc = rc;.  
31810 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65  testcase( sqlite
31820 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c  3GlobalConfig.xL
31830 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74  og!=0 );.  sqlit
31840 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61 74  e3_log(rc, "stat
31850 65 6d 65 6e 74 20 61 62 6f 72 74 73 20 61 74 20  ement aborts at 
31860 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20  %d: [%s] %s", . 
31870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31880 20 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70    pc, p->zSql, p
31890 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71  ->zErrMsg);.  sq
318a0 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
318b0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
318c0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
318d0 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
318e0 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51  d = 1;.  rc = SQ
318f0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66  LITE_ERROR;.  if
31900 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  ( resetSchemaOnF
31910 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20 73 71  ault>0 ){.    sq
31920 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
31930 65 6d 61 28 64 62 2c 20 72 65 73 65 74 53 63 68  ema(db, resetSch
31940 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20  emaOnFault-1);. 
31950 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73   }..  /* This is
31960 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75   the only way ou
31970 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64  t of this proced
31980 75 72 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f  ure.  We have to
31990 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68  .  ** release th
319a0 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72  e mutexes on btr
319b0 65 65 73 20 74 68 61 74 20 77 65 72 65 20 61 63  ees that were ac
319c0 71 75 69 72 65 64 20 61 74 20 74 68 65 0a 20 20  quired at the.  
319d0 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f  ** top. */.vdbe_
319e0 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61  return:.  db->la
319f0 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
31a00 77 69 64 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  wid;.  p->aCount
31a10 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
31a20 41 54 55 53 5f 56 4d 5f 53 54 45 50 2d 31 5d 20  ATUS_VM_STEP-1] 
31a30 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65 70 3b  += (int)nVmStep;
31a40 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65  .  sqlite3VdbeLe
31a50 61 76 65 28 70 29 3b 0a 20 20 72 65 74 75 72 6e  ave(p);.  return
31a60 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20   rc;..  /* Jump 
31a70 74 6f 20 68 65 72 65 20 69 66 20 61 20 73 74 72  to here if a str
31a80 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67  ing or blob larg
31a90 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d  er than SQLITE_M
31aa0 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69  AX_LENGTH.  ** i
31ab0 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20  s encountered.. 
31ac0 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73   */.too_big:.  s
31ad0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
31ae0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
31af0 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62   "string or blob
31b00 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63   too big");.  rc
31b10 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47   = SQLITE_TOOBIG
31b20 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
31b30 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20  ror_halt;..  /* 
31b40 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20  Jump to here if 
31b50 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73  a malloc() fails
31b60 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20  ..  */.no_mem:. 
31b70 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
31b80 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33  d = 1;.  sqlite3
31b90 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
31ba0 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20  rrMsg, db, "out 
31bb0 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72  of memory");.  r
31bc0 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
31bd0 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
31be0 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20  ror_halt;..  /* 
31bf0 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72  Jump to here for
31c00 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20   any other kind 
31c10 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20  of fatal error. 
31c20 20 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62   The "rc" variab
31c30 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68  le.  ** should h
31c40 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75  old the error nu
31c50 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  mber..  */.abort
31c60 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20  _due_to_error:. 
31c70 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72   assert( p->zErr
31c80 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  Msg==0 );.  if( 
31c90 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
31ca0 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e   ) rc = SQLITE_N
31cb0 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d  OMEM;.  if( rc!=
31cc0 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
31cd0 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  EM ){.    sqlite
31ce0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
31cf0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
31d00 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
31d10 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  rc));.  }.  goto
31d20 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
31d30 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
31d40 68 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69  here if the sqli
31d50 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
31d60 41 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74  API sets the int
31d70 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67  errupt.  ** flag
31d80 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
31d90 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  _to_interrupt:. 
31da0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e   assert( db->u1.
31db0 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b  isInterrupted );
31dc0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49  .  rc = SQLITE_I
31dd0 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72  NTERRUPT;.  p->r
31de0 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65  c = rc;.  sqlite
31df0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
31e00 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
31e10 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
31e20 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62  rc));.  goto vdb
31e30 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a  e_error_halt;.}.