/ Hex Artifact Content
Login

Artifact cb3df2d7b2ebadf22a39efcfb12a1277e273616e:


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 0a 2f 2a 0a 2a 2a 20 45 78 65  ndif.../*.** Exe
3df0: 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20  cute as much of 
3e00: 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61  a VDBE program a
3e10: 73 20 77 65 20 63 61 6e 20 74 68 65 6e 20 72 65  s we can then re
3e20: 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  turn..**.** sqli
3e30: 74 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64 79  te3VdbeMakeReady
3e40: 28 29 20 6d 75 73 74 20 62 65 20 63 61 6c 6c 65  () must be calle
3e50: 64 20 62 65 66 6f 72 65 20 74 68 69 73 20 72 6f  d before this ro
3e60: 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
3e70: 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65 20 70  o.** close the p
3e80: 72 6f 67 72 61 6d 20 77 69 74 68 20 61 20 66 69  rogram with a fi
3e90: 6e 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20  nal OP_Halt and 
3ea0: 74 6f 20 73 65 74 20 75 70 20 74 68 65 20 63 61  to set up the ca
3eb0: 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74  llbacks.** and t
3ec0: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
3ed0: 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20   pointer..**.** 
3ee0: 57 68 65 6e 65 76 65 72 20 61 20 72 6f 77 20 6f  Whenever a row o
3ef0: 72 20 72 65 73 75 6c 74 20 64 61 74 61 20 69 73  r result data is
3f00: 20 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69 73   available, this
3f10: 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 65 69   routine will ei
3f20: 74 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74  ther.** invoke t
3f30: 68 65 20 72 65 73 75 6c 74 20 63 61 6c 6c 62 61  he result callba
3f40: 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20  ck (if there is 
3f50: 6f 6e 65 29 20 6f 72 20 72 65 74 75 72 6e 20 77  one) or return w
3f60: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f  ith.** SQLITE_RO
3f70: 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61  W..**.** If an a
3f80: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
3f90: 6f 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20  o open a locked 
3fa0: 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74  database, then t
3fb0: 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77  his routine.** w
3fc0: 69 6c 6c 20 65 69 74 68 65 72 20 69 6e 76 6f 6b  ill either invok
3fd0: 65 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62  e the busy callb
3fe0: 61 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73  ack (if there is
3ff0: 20 6f 6e 65 29 20 6f 72 20 69 74 20 77 69 6c 6c   one) or it will
4000: 0a 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c 49 54  .** return SQLIT
4010: 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66  E_BUSY..**.** If
4020: 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
4030: 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  , an error messa
4040: 67 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 6f  ge is written to
4050: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
4060: 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
4070: 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d  _malloc() and p-
4080: 3e 7a 45 72 72 4d 73 67 20 69 73 20 6d 61 64 65  >zErrMsg is made
4090: 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 61   to point to tha
40a0: 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65  t memory..** The
40b0: 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73   error code is s
40c0: 74 6f 72 65 64 20 69 6e 20 70 2d 3e 72 63 20 61  tored in p->rc a
40d0: 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  nd this routine 
40e0: 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45  returns SQLITE_E
40f0: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  RROR..**.** If t
4100: 68 65 20 63 61 6c 6c 62 61 63 6b 20 65 76 65 72  he callback ever
4110: 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   returns non-zer
4120: 6f 2c 20 74 68 65 6e 20 74 68 65 20 70 72 6f 67  o, then the prog
4130: 72 61 6d 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d  ram exits.** imm
4140: 65 64 69 61 74 65 6c 79 2e 20 20 54 68 65 72 65  ediately.  There
4150: 20 77 69 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f   will be no erro
4160: 72 20 6d 65 73 73 61 67 65 20 62 75 74 20 74 68  r message but th
4170: 65 20 70 2d 3e 72 63 20 66 69 65 6c 64 20 69 73  e p->rc field is
4180: 0a 2a 2a 20 73 65 74 20 74 6f 20 53 51 4c 49 54  .** set to SQLIT
4190: 45 5f 41 42 4f 52 54 20 61 6e 64 20 74 68 69 73  E_ABORT and this
41a0: 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 72 65   routine will re
41b0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
41c0: 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72  R..**.** A memor
41d0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72  y allocation err
41e0: 6f 72 20 63 61 75 73 65 73 20 70 2d 3e 72 63 20  or causes p->rc 
41f0: 74 6f 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c  to be set to SQL
4200: 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68  ITE_NOMEM and th
4210: 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f  is.** routine to
4220: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
4230: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  RROR..**.** Othe
4240: 72 20 66 61 74 61 6c 20 65 72 72 6f 72 73 20 72  r fatal errors r
4250: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
4260: 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20  OR..**.** After 
4270: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 68 61 73  this routine has
4280: 20 66 69 6e 69 73 68 65 64 2c 20 73 71 6c 69 74   finished, sqlit
4290: 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 29  e3VdbeFinalize()
42a0: 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73   should be.** us
42b0: 65 64 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74  ed to clean up t
42c0: 68 65 20 6d 65 73 73 20 74 68 61 74 20 77 61 73  he mess that was
42d0: 20 6c 65 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f   left behind..*/
42e0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
42f0: 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20  Exec(.  Vdbe *p 
4300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4310: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a     /* The VDBE *
4320: 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3d 30 3b  /.){.  int pc=0;
4330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4340: 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d    /* The program
4350: 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70   counter */.  Op
4360: 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20   *aOp = p->aOp; 
4370: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
4380: 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20   of p->aOp */.  
4390: 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20  Op *pOp;        
43a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
43b0: 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrent operation 
43c0: 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  */.  int rc = SQ
43d0: 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
43e0: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
43f0: 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rn */.  sqlite3 
4400: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20  *db = p->db;    
4410: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4420: 73 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74  se */.  u8 reset
4430: 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
4440: 30 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65  0; /* Reset sche
4450: 6d 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ma after an erro
4460: 72 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f  r if positive */
4470: 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d  .  u8 encoding =
4480: 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a   ENC(db);     /*
4490: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   The database en
44a0: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
44b0: 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20  iCompare = 0;   
44c0: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
44d0: 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70   of last OP_Comp
44e0: 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f  are operation */
44f0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53  .  unsigned nVmS
4500: 74 65 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  tep = 0;      /*
4510: 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
4520: 61 6c 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73  al machine steps
4530: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
4540: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
4550: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69  _CALLBACK.  unsi
4560: 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69  gned nProgressLi
4570: 6d 69 74 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b  mit = 0;/* Invok
4580: 65 20 78 50 72 6f 67 72 65 73 73 28 29 20 77 68  e xProgress() wh
4590: 65 6e 20 6e 56 6d 53 74 65 70 20 72 65 61 63 68  en nVmStep reach
45a0: 65 73 20 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69  es this */.#endi
45b0: 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20  f.  Mem *aMem = 
45c0: 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f  p->aMem;       /
45d0: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65  * Copy of p->aMe
45e0: 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31  m */.  Mem *pIn1
45f0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4600: 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f    /* 1st input o
4610: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
4620: 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20  *pIn2 = 0;      
4630: 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e         /* 2nd in
4640: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
4650: 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20   Mem *pIn3 = 0; 
4660: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33              /* 3
4670: 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  rd input operand
4680: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20   */.  Mem *pOut 
4690: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
46a0: 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61   /* Output opera
46b0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65  nd */.  int *aPe
46c0: 72 6d 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20  rmute = 0;      
46d0: 20 20 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f     /* Permutatio
46e0: 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  n of columns for
46f0: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20   OP_Compare */. 
4700: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 20 3d   i64 lastRowid =
4710: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20   db->lastRowid; 
4720: 20 2f 2a 20 53 61 76 65 64 20 76 61 6c 75 65 20   /* Saved value 
4730: 6f 66 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65  of the last inse
4740: 72 74 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64  rt ROWID */.#ifd
4750: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
4760: 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20    u64 start;    
4770: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4780: 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20  CPU clock count 
4790: 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f  at start of opco
47a0: 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67  de */.  int orig
47b0: 50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Pc;             
47c0: 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f     /* Program co
47d0: 75 6e 74 65 72 20 61 74 20 73 74 61 72 74 20 6f  unter at start o
47e0: 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64  f opcode */.#end
47f0: 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54  if.  /*** INSERT
4800: 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52   STACK UNION HER
4810: 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74  E ***/..  assert
4820: 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  ( p->magic==VDBE
4830: 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f  _MAGIC_RUN );  /
4840: 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  * sqlite3_step()
4850: 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a   verifies this *
4860: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45  /.  sqlite3VdbeE
4870: 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70  nter(p);.  if( p
4880: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ->rc==SQLITE_NOM
4890: 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  EM ){.    /* Thi
48a0: 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d  s happens if a m
48b0: 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61  alloc() inside a
48c0: 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
48d0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f  _column_text() o
48e0: 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  r.    ** sqlite3
48f0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29  _column_text16()
4900: 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20   failed.  */.   
4910: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
4920: 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  }.  assert( p->r
4930: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
4940: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  p->rc==SQLITE_BU
4950: 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  SY );.  assert( 
4960: 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20  p->bIsReader || 
4970: 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29  p->readOnly!=0 )
4980: 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49  ;.  p->rc = SQLI
4990: 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72  TE_OK;.  p->iCur
49a0: 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20  rentTime = 0;.  
49b0: 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61  assert( p->expla
49c0: 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52  in==0 );.  p->pR
49d0: 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20  esultSet = 0;.  
49e0: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
49f0: 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 43 48 45  nBusy = 0;.  CHE
4a00: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
4a10: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ;.  sqlite3VdbeI
4a20: 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69  OTraceSql(p);.#i
4a30: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4a40: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
4a50: 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78 50  ACK.  if( db->xP
4a60: 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20 61  rogress ){.    a
4a70: 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e  ssert( 0 < db->n
4a80: 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20  ProgressOps );. 
4a90: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
4aa0: 74 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 2d  t = (unsigned)p-
4ab0: 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
4ac0: 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53  _STMTSTATUS_VM_S
4ad0: 54 45 50 5d 3b 0a 20 20 20 20 69 66 28 20 6e 50  TEP];.    if( nP
4ae0: 72 6f 67 72 65 73 73 4c 69 6d 69 74 3d 3d 30 20  rogressLimit==0 
4af0: 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65  ){.      nProgre
4b00: 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50  ssLimit = db->nP
4b10: 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20 20 20  rogressOps;.    
4b20: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 50 72  }else{.      nPr
4b30: 6f 67 72 65 73 73 4c 69 6d 69 74 20 25 3d 20 28  ogressLimit %= (
4b40: 75 6e 73 69 67 6e 65 64 29 64 62 2d 3e 6e 50 72  unsigned)db->nPr
4b50: 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20 20 20 7d  ogressOps;.    }
4b60: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64  .  }.#endif.#ifd
4b70: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4b80: 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65    sqlite3BeginBe
4b90: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20  nignMalloc();.  
4ba0: 69 66 28 20 70 2d 3e 70 63 3d 3d 30 20 20 26 26  if( p->pc==0  &&
4bb0: 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26   (p->db->flags &
4bc0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
4bd0: 69 6e 67 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  ing)!=0 ){.    i
4be0: 6e 74 20 69 3b 0a 20 20 20 20 70 72 69 6e 74 66  nt i;.    printf
4bf0: 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c  ("VDBE Program L
4c00: 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20  isting:\n");.   
4c10: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4c20: 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f 72  tSql(p);.    for
4c30: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20  (i=0; i<p->nOp; 
4c40: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  i++){.      sqli
4c50: 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
4c60: 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69  tdout, i, &aOp[i
4c70: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ]);.    }.  }.  
4c80: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
4c90: 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66  Malloc();.#endif
4ca0: 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b  .  for(pc=p->pc;
4cb0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20   rc==SQLITE_OK; 
4cc0: 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  pc++){.    asser
4cd0: 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70  t( pc>=0 && pc<p
4ce0: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28  ->nOp );.    if(
4cf0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
4d00: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
4d10: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4d20: 46 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63 20  FILE.    origPc 
4d30: 3d 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74 20  = pc;.    start 
4d40: 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
4d50: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56  );.#endif.    nV
4d60: 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f 70  mStep++;.    pOp
4d70: 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20   = &aOp[pc];..  
4d80: 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20    /* Only allow 
4d90: 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54  tracing if SQLIT
4da0: 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e  E_DEBUG is defin
4db0: 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65  ed..    */.#ifde
4dc0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
4dd0: 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20     if( p->trace 
4de0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 63 3d  ){.      if( pc=
4df0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72  =0 ){.        pr
4e00: 69 6e 74 66 28 22 56 44 42 45 20 45 78 65 63 75  intf("VDBE Execu
4e10: 74 69 6f 6e 20 54 72 61 63 65 3a 5c 6e 22 29 3b  tion Trace:\n");
4e20: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4e30: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
4e40: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
4e50: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
4e60: 70 28 70 2d 3e 74 72 61 63 65 2c 20 70 63 2c 20  p(p->trace, pc, 
4e70: 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  pOp);.    }.#end
4e80: 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f  if.      ..    /
4e90: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
4ea0: 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d  f we need to sim
4eb0: 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75  ulate an interru
4ec0: 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68  pt.  This only h
4ed0: 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66  appens.    ** if
4ee0: 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69   we have a speci
4ef0: 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20  al test build.. 
4f00: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
4f10: 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28  ITE_TEST.    if(
4f20: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
4f30: 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20  pt_count>0 ){.  
4f40: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65      sqlite3_inte
4f50: 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20  rrupt_count--;. 
4f60: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
4f70: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
4f80: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
4f90: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4fa0: 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  (db);.      }.  
4fb0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
4fc0: 2f 2a 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65  /* On any opcode
4fd0: 20 77 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d   with the "out2-
4fe0: 70 72 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c  prerelease" tag,
4ff0: 20 66 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a   free any.    **
5000: 20 65 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61   external alloca
5010: 74 69 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d  tions out of mem
5020: 5b 70 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d  [p2] and set mem
5030: 5b 70 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a  [p2] to be.    *
5040: 2a 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69  * an undefined i
5050: 6e 74 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73  nteger.  Opcodes
5060: 20 77 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c   will either fil
5070: 6c 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72  l in the integer
5080: 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72  .    ** value or
5090: 20 63 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d   convert mem[p2]
50a0: 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20   to a different 
50b0: 74 79 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  type..    */.   
50c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
50d0: 66 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70  flags==sqlite3Op
50e0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70  codeProperty[pOp
50f0: 2d 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20  ->opcode] );.   
5100: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
5110: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50  s & OPFLG_OUT2_P
5120: 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  RERELEASE ){.   
5130: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5140: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
5150: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
5160: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5170: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 70 4f 75  or) );.      pOu
5180: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
5190: 32 5d 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f  2];.      memAbo
51a0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
51b0: 75 74 29 3b 0a 20 20 20 20 20 20 56 64 62 65 4d  ut);.      VdbeM
51c0: 65 6d 52 65 6c 65 61 73 65 28 70 4f 75 74 29 3b  emRelease(pOut);
51d0: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
51e0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
51f0: 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69    }..    /* Sani
5200: 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f  ty checking on o
5210: 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  ther operands */
5220: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
5230: 45 42 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f  EBUG.    if( (pO
5240: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5250: 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20  LG_IN1)!=0 ){.  
5260: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5270: 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p1>0 );.      a
5280: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d  ssert( pOp->p1<=
5290: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
52a0: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73  sor) );.      as
52b0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
52c0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
52d0: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
52e0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
52f0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  , &aMem[pOp->p1]
5300: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
5310: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
5320: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
5330: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5340: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5350: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5360: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
5370: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5380: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5390: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
53a0: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p2]) );.      RE
53b0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
53c0: 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p2, &aMem[pOp-
53d0: 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2]);.    }.   
53e0: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
53f0: 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21  gs & OPFLG_IN3)!
5400: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
5410: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
5420: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5430: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
5440: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
5450: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5460: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5470: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
5480: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5490: 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b  (pOp->p3, &aMem[
54a0: 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d  pOp->p3]);.    }
54b0: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
54c0: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
54d0: 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  UT2)!=0 ){.     
54e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
54f0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5500: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5510: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5520: 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
5530: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
5540: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
5550: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
5560: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
5570: 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a  FLG_OUT3)!=0 ){.
5580: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5590: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
55a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
55b0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
55c0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
55d0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
55e0: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
55f0: 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  3]);.    }.#endi
5600: 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68 28  f.  .    switch(
5610: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
5620: 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
5630: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5640: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5650: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5660: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
5670: 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20  ** What follows 
5680: 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77 69  is a massive swi
5690: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68  tch statement wh
56a0: 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69 6d  ere each case im
56b0: 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65  plements a.** se
56c0: 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74 69  parate instructi
56d0: 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61  on in the virtua
56e0: 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77  l machine.  If w
56f0: 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75  e follow the usu
5700: 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f  al.** indentatio
5710: 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65  n conventions, e
5720: 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20  ach case should 
5730: 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36  be indented by 6
5740: 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a   spaces.  But.**
5750: 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f   that is a lot o
5760: 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20 6f  f wasted space o
5770: 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69  n the left margi
5780: 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20  n.  So the code 
5790: 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77  within.** the sw
57a0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
57b0: 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63  ill break with c
57c0: 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65  onvention and be
57d0: 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f   flush-left. Ano
57e0: 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d  ther.** big comm
57f0: 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20  ent (similar to 
5800: 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d  this one) will m
5810: 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e  ark the point in
5820: 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a   the code where.
5830: 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e  ** we transition
5840: 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20   back to normal 
5850: 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  indentation..**.
5860: 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e  ** The formattin
5870: 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20 69  g of each case i
5880: 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68  s important.  Th
5890: 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53  e makefile for S
58a0: 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74  QLite.** generat
58b0: 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22  es two C files "
58c0: 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22  opcodes.h" and "
58d0: 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63  opcodes.c" by sc
58e0: 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66  anning this.** f
58f0: 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ile looking for 
5900: 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e  lines that begin
5910: 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22   with "case OP_"
5920: 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68  .  The opcodes.h
5930: 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62   files.** will b
5940: 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64  e filled with #d
5950: 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76 65  efines that give
5960: 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20   unique integer 
5970: 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a  values to each.*
5980: 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65  * opcode and the
5990: 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20   opcodes.c file 
59a0: 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61  is filled with a
59b0: 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e  n array of strin
59c0: 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68  gs where.** each
59d0: 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 73   string is the s
59e0: 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72  ymbolic name for
59f0: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
5a00: 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74  ng opcode.  If t
5a10: 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65  he.** case state
5a20: 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64  ment is followed
5a30: 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66   by a comment of
5a40: 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61   the form "/# sa
5a50: 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a  me as ... #/".**
5a60: 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73   that comment is
5a70: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
5a80: 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  ne the particula
5a90: 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  r value of the o
5aa0: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68  pcode..**.** Oth
5ab0: 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74  er keywords in t
5ac0: 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20  he comment that 
5ad0: 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73  follows each cas
5ae0: 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  e are used to.**
5af0: 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f   construct the O
5b00: 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52  PFLG_INITIALIZER
5b10: 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74   value that init
5b20: 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72  ializes opcodePr
5b30: 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79  operty[]..** Key
5b40: 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69  words include: i
5b50: 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75  n1, in2, in3, ou
5b60: 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c 20 6f  t2_prerelease, o
5b70: 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a  ut2, out3.  See.
5b80: 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68  ** the mkopcodeh
5b90: 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20  .awk script for 
5ba0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
5bb0: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f  mation..**.** Do
5bc0: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75  cumentation abou
5bd0: 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69  t VDBE opcodes i
5be0: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73  s generated by s
5bf0: 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  canning this fil
5c00: 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f  e.** for lines o
5c10: 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22  f that contain "
5c20: 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20  Opcode:".  That 
5c30: 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62  line and all sub
5c40: 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65  sequent.** comme
5c50: 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65  nt lines are use
5c60: 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
5c70: 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  ion of the opcod
5c80: 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61  e.html documenta
5c90: 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a  tion.** file..**
5ca0: 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a  .** SUMMARY:.**.
5cb0: 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e  **     Formattin
5cc0: 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  g is important t
5cd0: 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73  o scripts that s
5ce0: 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a  can this file..*
5cf0: 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76  *     Do not dev
5d00: 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f  iate from the fo
5d10: 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63  rmatting style c
5d20: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e  urrently in use.
5d30: 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .**.************
5d40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d80: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  */../* Opcode:  
5d90: 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a  Goto * P2 * * *.
5da0: 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69  **.** An uncondi
5db0: 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61  tional jump to a
5dc0: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68  ddress P2..** Th
5dd0: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
5de0: 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c  on executed will
5df0: 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20   be .** the one 
5e00: 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d  at index P2 from
5e10: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
5e20: 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d  f.** the program
5e30: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74  ..*/.case OP_Got
5e40: 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  o: {            
5e50: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 70 63   /* jump */.  pc
5e60: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
5e70: 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68  .  /* Opcodes th
5e80: 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74  at are used as t
5e90: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
5ea0: 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50  oop (OP_Next, OP
5eb0: 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56  _Prev,.  ** OP_V
5ec0: 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e  Next, OP_RowSetN
5ed0: 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65  ext, or OP_Sorte
5ee0: 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20  rNext) all jump 
5ef0: 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63  here upon.  ** c
5f00: 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63  ompletion.  Chec
5f10: 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69  k to see if sqli
5f20: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
5f30: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a  has been called.
5f40: 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70    ** or if the p
5f50: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
5f60: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76   needs to be inv
5f70: 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a  oked. .  **.  **
5f80: 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73 20   This code uses 
5f90: 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67 6f  unstructured "go
5fa0: 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61  to" statements a
5fb0: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b  nd does not look
5fc0: 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74   clean..  ** But
5fd0: 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65   that is not due
5fe0: 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e   to sloppy codin
5ff0: 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f  g habits. The co
6000: 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68  de is written th
6010: 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20  is.  ** way for 
6020: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20  performance, to 
6030: 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20  avoid having to 
6040: 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70  run the interrup
6050: 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20  t and progress. 
6060: 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76   ** checks on ev
6070: 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69  ery opcode.  Thi
6080: 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f  s helps sqlite3_
6090: 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62  step() to run ab
60a0: 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61  out 1.5%.  ** fa
60b0: 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74  ster according t
60c0: 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f  o "valgrind --to
60d0: 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a  ol=cachegrind" *
60e0: 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  /.check_for_inte
60f0: 72 72 75 70 74 3a 0a 20 20 43 48 45 43 4b 5f 46  rrupt:.  CHECK_F
6100: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 23 69  OR_INTERRUPT;.#i
6110: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6120: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
6130: 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68  ACK.  /* Call th
6140: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6150: 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e  ack if it is con
6160: 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20  figured and the 
6170: 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a  required number.
6180: 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73    ** of VDBE ops
6190: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
61a0: 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63  ted (either sinc
61b0: 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f  e this invocatio
61c0: 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65  n of.  ** sqlite
61d0: 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73  3VdbeExec() or s
61e0: 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74  ince last time t
61f0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
6200: 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29  back was called)
6210: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72  ..  ** If the pr
6220: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
6230: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
6240: 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75  , exit the virtu
6250: 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a  al machine with.
6260: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
6270: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
6280: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
6290: 78 50 72 6f 67 72 65 73 73 21 3d 30 20 26 26 20  xProgress!=0 && 
62a0: 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65  nVmStep>=nProgre
62b0: 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20 69  ssLimit ){.    i
62c0: 6e 74 20 70 72 63 3b 0a 20 20 20 20 70 72 63 20  nt prc;.    prc 
62d0: 3d 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28  = db->xProgress(
62e0: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
62f0: 29 3b 0a 20 20 20 20 69 66 28 20 70 72 63 21 3d  );.    if( prc!=
6300: 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
6310: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
6320: 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
6330: 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20  e_error_halt;.  
6340: 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e    }.    if( db->
6350: 78 50 72 6f 67 72 65 73 73 21 3d 30 20 29 7b 0a  xProgress!=0 ){.
6360: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c        nProgressL
6370: 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b  imit = nVmStep +
6380: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6390: 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d  s - (nVmStep%db-
63a0: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
63b0: 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
63c0: 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  .  .  break;.}..
63d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75  /* Opcode:  Gosu
63e0: 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  b P1 P2 * * *.**
63f0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75  .** Write the cu
6400: 72 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e  rrent address on
6410: 74 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  to register P1.*
6420: 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20  * and then jump 
6430: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  to address P2..*
6440: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a  /.case OP_Gosub:
6450: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6460: 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
6470: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
6480: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
6490: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
64a0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
64b0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
64c0: 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
64d0: 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29   & MEM_Dyn)==0 )
64e0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
64f0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
6500: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6510: 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e  EM_Int;.  pIn1->
6520: 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49  u.i = pc;.  REGI
6530: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
6540: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20  p1, pIn1);.  pc 
6550: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
6560: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6570: 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31  code:  Return P1
6580: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a   * * * *.**.** J
6590: 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ump to the next 
65a0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65  instruction afte
65b0: 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  r the address in
65c0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f   register P1..*/
65d0: 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a  .case OP_Return:
65e0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
65f0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
6600: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6610: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6620: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
6630: 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70  );.  pc = (int)p
6640: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61  In1->u.i;.  brea
6650: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6660: 20 20 59 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a    Yield P1 * * *
6670: 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68   *.**.** Swap th
6680: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
6690: 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  r with the value
66a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
66b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c  .*/.case OP_Yiel
66c0: 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
66d0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  /* in1 */.  int 
66e0: 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d  pcDest;.  pIn1 =
66f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6700: 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
6710: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
6720: 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d  n)==0 );.  pIn1-
6730: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6740: 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e  ;.  pcDest = (in
6750: 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70  t)pIn1->u.i;.  p
6760: 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20  In1->u.i = pc;. 
6770: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
6780: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
6790: 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20    pc = pcDest;. 
67a0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
67b0: 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c  code:  HaltIfNul
67c0: 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  l  P1 P2 P3 P4 *
67d0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
67e0: 66 20 72 5b 50 33 5d 20 6e 75 6c 6c 20 74 68 65  f r[P3] null the
67f0: 6e 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65  n halt.**.** Che
6800: 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ck the value in 
6810: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66  register P3.  If
6820: 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   it is NULL then
6830: 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70   Halt using.** p
6840: 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c  arameter P1, P2,
6850: 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74 68   and P4 as if th
6860: 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20 69  is were a Halt i
6870: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20  nstruction.  If 
6880: 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
6890: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6e  register P3 is n
68a0: 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
68b0: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20  is routine is a 
68c0: 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
68d0: 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20  P_HaltIfNull: { 
68e0: 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20       /* in3 */. 
68f0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
6900: 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
6910: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
6920: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61  _Null)==0 ) brea
6930: 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
6940: 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c  ough into OP_Hal
6950: 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  t */.}../* Opcod
6960: 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a  e:  Halt P1 P2 *
6970: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74   P4 *.**.** Exit
6980: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41   immediately.  A
6990: 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c  ll open cursors,
69a0: 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a   etc are closed.
69b0: 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
69c0: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
69d0: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  e result code re
69e0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
69f0: 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65  3_exec(), sqlite
6a00: 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72  3_reset(),.** or
6a10: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6a20: 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d  e().  For a norm
6a30: 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68  al halt, this sh
6a40: 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f  ould be SQLITE_O
6a50: 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72  K (0)..** For er
6a60: 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20  rors, it can be 
6a70: 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65  some other value
6a80: 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e  .  If P1!=0 then
6a90: 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69   P2 will determi
6aa0: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72  ne.** whether or
6ab0: 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b   not to rollback
6ac0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
6ad0: 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f  nsaction.  Do no
6ae0: 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66  t rollback.** if
6af0: 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f   P2==OE_Fail. Do
6b00: 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66   the rollback if
6b10: 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b   P2==OE_Rollback
6b20: 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f  .  If P2==OE_Abo
6b30: 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b  rt,.** then back
6b40: 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73   out all changes
6b50: 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72   that have occur
6b60: 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20  red during this 
6b70: 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65  execution of the
6b80: 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f  .** VDBE, but do
6b90: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68   not rollback th
6ba0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a  e transaction. .
6bb0: 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
6bc0: 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20  ot null then it 
6bd0: 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  is an error mess
6be0: 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a  age string..**.*
6bf0: 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d  * There is an im
6c00: 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20  plied "Halt 0 0 
6c10: 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  0" instruction i
6c20: 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76  nserted at the v
6c30: 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76  ery end of.** ev
6c40: 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f  ery program.  So
6c50: 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65   a jump past the
6c60: 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f   last instructio
6c70: 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  n of the program
6c80: 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20  .** is the same 
6c90: 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c  as executing Hal
6ca0: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  t..*/.case OP_Ha
6cb0: 6c 74 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d  lt: {.  if( pOp-
6cc0: 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26  >p1==SQLITE_OK &
6cd0: 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  & p->pFrame ){. 
6ce0: 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73     /* Halt the s
6cf0: 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75  ub-program. Retu
6d00: 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  rn control to th
6d10: 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20  e parent frame. 
6d20: 2a 2f 0a 20 20 20 20 56 64 62 65 46 72 61 6d 65  */.    VdbeFrame
6d30: 20 2a 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46   *pFrame = p->pF
6d40: 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72  rame;.    p->pFr
6d50: 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50  ame = pFrame->pP
6d60: 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46  arent;.    p->nF
6d70: 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69  rame--;.    sqli
6d80: 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
6d90: 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
6da0: 29 3b 0a 20 20 20 20 70 63 20 3d 20 73 71 6c 69  );.    pc = sqli
6db0: 74 65 33 56 64 62 65 46 72 61 6d 65 52 65 73 74  te3VdbeFrameRest
6dc0: 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20  ore(pFrame);.   
6dd0: 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d   lastRowid = db-
6de0: 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20  >lastRowid;.    
6df0: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f  if( pOp->p2==OE_
6e00: 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20  Ignore ){.      
6e10: 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 70  /* Instruction p
6e20: 63 20 69 73 20 74 68 65 20 4f 50 5f 50 72 6f 67  c is the OP_Prog
6e30: 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ram that invoked
6e40: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
6e50: 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65   .      ** curre
6e60: 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c 74 65  ntly being halte
6e70: 64 2e 20 49 66 20 74 68 65 20 70 32 20 69 6e 73  d. If the p2 ins
6e80: 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 69 73  truction of this
6e90: 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a   OP_Halt.      *
6ea0: 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  * instruction is
6eb0: 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72   set to OE_Ignor
6ec0: 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75 62 2d  e, then the sub-
6ed0: 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72 6f 77  program is throw
6ee0: 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20  ing.      ** an 
6ef0: 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69 6f 6e  IGNORE exception
6f00: 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6a  . In this case j
6f10: 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64 72 65  ump to the addre
6f20: 73 73 20 73 70 65 63 69 66 69 65 64 0a 20 20 20  ss specified.   
6f30: 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70 32 20     ** as the p2 
6f40: 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f  of the calling O
6f50: 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20  P_Program.  */. 
6f60: 20 20 20 20 20 70 63 20 3d 20 70 2d 3e 61 4f 70       pc = p->aOp
6f70: 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d  [pc].p2-1;.    }
6f80: 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f  .    aOp = p->aO
6f90: 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d  p;.    aMem = p-
6fa0: 3e 61 4d 65 6d 3b 0a 20 20 20 20 62 72 65 61 6b  >aMem;.    break
6fb0: 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 72 63 20 3d  ;.  }..  p->rc =
6fc0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65   pOp->p1;.  p->e
6fd0: 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38  rrorAction = (u8
6fe0: 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70  )pOp->p2;.  p->p
6ff0: 63 20 3d 20 70 63 3b 0a 20 20 69 66 28 20 70 4f  c = pc;.  if( pO
7000: 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61  p->p4.z ){.    a
7010: 73 73 65 72 74 28 20 70 2d 3e 72 63 21 3d 53 51  ssert( p->rc!=SQ
7020: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 73  LITE_OK );.    s
7030: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
7040: 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
7050: 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a   "%s", pOp->p4.z
7060: 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  );.    testcase(
7070: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
7080: 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a  nfig.xLog!=0 );.
7090: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28      sqlite3_log(
70a0: 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72 74 20  pOp->p1, "abort 
70b0: 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25  at %d in [%s]: %
70c0: 73 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c  s", pc, p->zSql,
70d0: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d   pOp->p4.z);.  }
70e0: 65 6c 73 65 20 69 66 28 20 70 2d 3e 72 63 20 29  else if( p->rc )
70f0: 7b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  {.    testcase( 
7100: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
7110: 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20  fig.xLog!=0 );. 
7120: 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70     sqlite3_log(p
7130: 4f 70 2d 3e 70 31 2c 20 22 63 6f 6e 73 74 72 61  Op->p1, "constra
7140: 69 6e 74 20 66 61 69 6c 65 64 20 61 74 20 25 64  int failed at %d
7150: 20 69 6e 20 5b 25 73 5d 22 2c 20 70 63 2c 20 70   in [%s]", pc, p
7160: 2d 3e 7a 53 71 6c 29 3b 0a 20 20 7d 0a 20 20 72  ->zSql);.  }.  r
7170: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48  c = sqlite3VdbeH
7180: 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74  alt(p);.  assert
7190: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
71a0: 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  Y || rc==SQLITE_
71b0: 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  OK || rc==SQLITE
71c0: 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20  _ERROR );.  if( 
71d0: 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
71e0: 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  ){.    p->rc = r
71f0: 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
7200: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
7210: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
7220: 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78  _OK || (p->rc&0x
7230: 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  ff)==SQLITE_CONS
7240: 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73  TRAINT );.    as
7250: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
7260: 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  _OK || db->nDefe
7270: 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62  rredCons>0 || db
7280: 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
7290: 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  ns>0 );.    rc =
72a0: 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f   p->rc ? SQLITE_
72b0: 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44  ERROR : SQLITE_D
72c0: 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  ONE;.  }.  goto 
72d0: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
72e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
72f0: 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
7300: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
7310: 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33  ]=P1.**.** The 3
7320: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  2-bit integer va
7330: 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65  lue P1 is writte
7340: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
7350: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
7360: 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20  nteger: {       
7370: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7380: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
7390: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  u.i = pOp->p1;. 
73a0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
73b0: 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32  code: Int64 * P2
73c0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
73d0: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
73e0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
73f0: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
7400: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a  integer value..*
7410: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
7420: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
7430: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7440: 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20  Int64: {        
7450: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7460: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
7470: 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21  t( pOp->p4.pI64!
7480: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
7490: 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36  i = *pOp->p4.pI6
74a0: 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  4;.  break;.}..#
74b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
74c0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
74d0: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
74e0: 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  l * P2 * P4 *.**
74f0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
7500: 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  =P4.**.** P4 is 
7510: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
7520: 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70  4-bit floating p
7530: 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  oint value..** W
7540: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
7550: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7560: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
7570: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
7580: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c  /* same as TK_FL
7590: 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c  OAT, out2-prerel
75a0: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
75b0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c  flags = MEM_Real
75c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c  ;.  assert( !sql
75d0: 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e  ite3IsNaN(*pOp->
75e0: 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70  p4.pReal) );.  p
75f0: 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70  Out->r = *pOp->p
7600: 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b  4.pReal;.  break
7610: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
7620: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a  pcode: String8 *
7630: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
7640: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50  nopsis: r[P2]='P
7650: 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  4'.**.** P4 poin
7660: 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d  ts to a nul term
7670: 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
7680: 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  ing. This opcode
7690: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
76a0: 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53  .** into an OP_S
76b0: 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20  tring before it 
76c0: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
76d0: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a  the first time..
76e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
76f0: 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  g8: {         /*
7700: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49   same as TK_STRI
7710: 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  NG, out2-prerele
7720: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7730: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7740: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
7750: 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f   OP_String;.  pO
7760: 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53  p->p1 = sqlite3S
7770: 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e  trlen30(pOp->p4.
7780: 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  z);..#ifndef SQL
7790: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
77a0: 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53   if( encoding!=S
77b0: 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20  QLITE_UTF8 ){.  
77c0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
77d0: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
77e0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c  , pOp->p4.z, -1,
77f0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
7800: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
7810: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
7820: 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74  _TOOBIG ) goto t
7830: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20  oo_big;.    if( 
7840: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
7850: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
7860: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
7870: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
7880: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
7890: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70  pOut->zMalloc==p
78a0: 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73  Out->z );.    as
78b0: 73 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67  sert( pOut->flag
78c0: 73 20 26 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20  s & MEM_Dyn );. 
78d0: 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63     pOut->zMalloc
78e0: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
78f0: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
7900: 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  tic;.    pOut->f
7910: 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e  lags &= ~MEM_Dyn
7920: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
7930: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
7940: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
7950: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
7960: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
7970: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
7980: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
7990: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
79a0: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
79b0: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
79c0: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
79d0: 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74  p->p1>db->aLimit
79e0: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
79f0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
7a00: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
7a10: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
7a20: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73   to the next cas
7a30: 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a  e, OP_String */.
7a40: 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  }.  ./* Opcode: 
7a50: 53 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50  String P1 P2 * P
7a60: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
7a70: 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e   r[P2]='P4' (len
7a80: 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  =P1).**.** The s
7a90: 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f  tring value P4 o
7aa0: 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74  f length P1 (byt
7ab0: 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e  es) is stored in
7ac0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
7ad0: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a  .case OP_String:
7ae0: 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
7af0: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7b00: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
7b10: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f  >p4.z!=0 );.  pO
7b20: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
7b30: 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
7b40: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
7b50: 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  >z = pOp->p4.z;.
7b60: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d    pOut->n = pOp-
7b70: 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >p1;.  pOut->enc
7b80: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
7b90: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
7ba0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
7bb0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7bc0: 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a   Null P1 P2 P3 *
7bd0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
7be0: 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a   r[P2..P3]=NULL.
7bf0: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55  **.** Write a NU
7c00: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
7c10: 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65  s P2.  If P3 gre
7c20: 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68  ater than P2, th
7c30: 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a  en also write.**
7c40: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
7c50: 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 79  ter P3 and every
7c60: 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74   register in bet
7c70: 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20  ween P2 and P3. 
7c80: 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73   If P3.** is les
7c90: 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63  s than P2 (typic
7ca0: 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29  ally P3 is zero)
7cb0: 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73   then only regis
7cc0: 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74  ter P2 is.** set
7cd0: 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   to NULL..**.** 
7ce0: 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  If the P1 value 
7cf0: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
7d00: 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d  n also set the M
7d10: 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20  EM_Cleared flag 
7d20: 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20  so that.** NULL 
7d30: 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20  values will not 
7d40: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76  compare equal ev
7d50: 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c  en if SQLITE_NUL
7d60: 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a  LEQ is set on.**
7d70: 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e   OP_Ne or OP_Eq.
7d80: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
7d90: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
7da0: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7db0: 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20   */.  int cnt;. 
7dc0: 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20   u16 nullFlag;. 
7dd0: 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70   cnt = pOp->p3-p
7de0: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
7df0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
7e00: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
7e10: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
7e20: 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f   = nullFlag = pO
7e30: 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c  p->p1 ? (MEM_Nul
7e40: 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a  l|MEM_Cleared) :
7e50: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69   MEM_Null;.  whi
7e60: 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20  le( cnt>0 ){.   
7e70: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d   pOut++;.    mem
7e80: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
7e90: 20 70 4f 75 74 29 3b 0a 20 20 20 20 56 64 62 65   pOut);.    Vdbe
7ea0: 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75 74 29  MemRelease(pOut)
7eb0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
7ec0: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  s = nullFlag;.  
7ed0: 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62    cnt--;.  }.  b
7ee0: 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
7ef0: 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20  ode: Blob P1 P2 
7f00: 2a 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  * P4.** Synopsis
7f10: 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d  : r[P2]=P4 (len=
7f20: 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P1).**.** P4 poi
7f30: 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66  nts to a blob of
7f40: 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c   data P1 bytes l
7f50: 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73  ong.  Store this
7f60: 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  .** blob in regi
7f70: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
7f80: 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20   OP_Blob: {     
7f90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
7fa0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7fb0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7fc0: 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58  p1 <= SQLITE_MAX
7fd0: 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c  _LENGTH );.  sql
7fe0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
7ff0: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
8000: 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30  z, pOp->p1, 0, 0
8010: 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
8020: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
8030: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
8040: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
8050: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
8060: 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20  ariable P1 P2 * 
8070: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8080: 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65  : r[P2]=paramete
8090: 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54  r(P1,P4).**.** T
80a0: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
80b0: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
80c0: 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  meter P1 into re
80d0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
80e0: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
80f0: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
8100: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
8110: 20 69 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31   in P4 and P3==1
8120: 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  ..** The P4 valu
8130: 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c  e is used by sql
8140: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
8150: 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63  ter_name()..*/.c
8160: 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a  ase OP_Variable:
8170: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
8180: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
8190: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b   */.  Mem *pVar;
81a0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
81b0: 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65  being transferre
81c0: 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  d */..  assert( 
81d0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
81e0: 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b  ->p1<=p->nVar );
81f0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8200: 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  p4.z==0 || pOp->
8210: 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70  p4.z==p->azVar[p
8220: 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70  Op->p1-1] );.  p
8230: 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70  Var = &p->aVar[p
8240: 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69  Op->p1 - 1];.  i
8250: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
8260: 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b  mTooBig(pVar) ){
8270: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
8280: 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  g;.  }.  sqlite3
8290: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
82a0: 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d  py(pOut, pVar, M
82b0: 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50  EM_Static);.  UP
82c0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
82d0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
82e0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
82f0: 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20  Move P1 P2 P3 * 
8300: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
8310: 72 5b 50 32 5d 3d 72 5b 50 31 5d 20 4e 3d 50 33  r[P2]=r[P1] N=P3
8320: 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
8330: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
8340: 65 72 20 50 31 2e 2e 50 31 2b 50 33 20 6f 76 65  er P1..P1+P3 ove
8350: 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  r into.** regist
8360: 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 20 20  ers P2..P2+P3.  
8370: 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  Registers P1..P1
8380: 2b 50 33 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  +P3 are.** left 
8390: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
83a0: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
83b0: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
83c0: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
83d0: 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 20 74   and P2..P2+P3 t
83e0: 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61  o overlap..*/.ca
83f0: 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20  se OP_Move: {.  
8400: 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20  char *zMalloc;  
8410: 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76 61 72 69   /* Holding vari
8420: 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f 63 61 74  able for allocat
8430: 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  ed memory */.  i
8440: 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
8450: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
8460: 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63  isters left to c
8470: 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b  opy */.  int p1;
8480: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
8490: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72  ister to copy fr
84a0: 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  om */.  int p2; 
84b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
84c0: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20  ster to copy to 
84d0: 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  */..  n = pOp->p
84e0: 33 20 2b 20 31 3b 0a 20 20 70 31 20 3d 20 70 4f  3 + 1;.  p1 = pO
84f0: 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
8500: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
8510: 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20   n>0 && p1>0 && 
8520: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
8530: 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32  ( p1+n<=p2 || p2
8540: 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e  +n<=p1 );..  pIn
8550: 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20  1 = &aMem[p1];. 
8560: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32   pOut = &aMem[p2
8570: 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20  ];.  while( n-- 
8580: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
8590: 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e  Out<=&aMem[(p->n
85a0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d  Mem-p->nCursor)]
85b0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
85c0: 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e  pIn1<=&aMem[(p->
85d0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
85e0: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
85f0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
8600: 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  ) );.    memAbou
8610: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
8620: 74 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20  t);.    zMalloc 
8630: 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b  = pOut->zMalloc;
8640: 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  .    pOut->zMall
8650: 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  oc = 0;.    sqli
8660: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
8670: 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64  Out, pIn1);.#ifd
8680: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
8690: 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53      if( pOut->pS
86a0: 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b  copyFrom>=&aMem[
86b0: 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63  p1] && pOut->pSc
86c0: 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31  opyFrom<&aMem[p1
86d0: 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20  +pOp->p3] ){.   
86e0: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
86f0: 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d  rom += p1 - pOp-
8700: 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  >p2;.    }.#endi
8710: 66 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c  f.    pIn1->zMal
8720: 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20  loc = zMalloc;. 
8730: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
8740: 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20  E(p2++, pOut);. 
8750: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70     pIn1++;.    p
8760: 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  Out++;.  }.  bre
8770: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8780: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20  : Copy P1 P2 P3 
8790: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
87a0: 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 20 4e 3d 50   r[P2]=r[P1] N=P
87b0: 33 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63  3.**.** Make a c
87c0: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73  opy of registers
87d0: 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20   P1..P1+P3 into 
87e0: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
87f0: 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  +P3..**.** This 
8800: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
8810: 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66  s a deep copy of
8820: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64   the value.  A d
8830: 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d  uplicate.** is m
8840: 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e  ade of any strin
8850: 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61  g or blob consta
8860: 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50  nt.  See also OP
8870: 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  _SCopy..*/.case 
8880: 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74  OP_Copy: {.  int
8890: 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   n;..  n = pOp->
88a0: 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  p3;.  pIn1 = &aM
88b0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
88c0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
88d0: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
88e0: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
88f0: 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20  while( 1 ){.    
8900: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
8910: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
8920: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
8930: 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  ;.    Deephemera
8940: 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64  lize(pOut);.#ifd
8950: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
8960: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
8970: 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66  From = 0;.#endif
8980: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
8990: 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d  ACE(pOp->p2+pOp-
89a0: 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20  >p3-n, pOut);.  
89b0: 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29    if( (n--)==0 )
89c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74   break;.    pOut
89d0: 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  ++;.    pIn1++;.
89e0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
89f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79  /* Opcode: SCopy
8a00: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
8a10: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8a20: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  r[P1].**.** Make
8a30: 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20   a shallow copy 
8a40: 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
8a50: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
8a60: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
8a70: 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20  ruction makes a 
8a80: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
8a90: 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74  the value.  If t
8aa0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61  he value.** is a
8ab0: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c   string or blob,
8ac0: 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69   then the copy i
8ad0: 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72  s only a pointer
8ae0: 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69   to the.** origi
8af0: 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66  nal and hence if
8b00: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68   the original ch
8b10: 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68  anges so will th
8b20: 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65  e copy..** Worse
8b30: 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  , if the origina
8b40: 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64  l is deallocated
8b50: 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d  , the copy becom
8b60: 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54  es invalid..** T
8b70: 68 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20  hus the program 
8b80: 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65 20 74  must guarantee t
8b90: 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  hat the original
8ba0: 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65   will not change
8bb0: 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c  .** during the l
8bc0: 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63  ifetime of the c
8bd0: 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70  opy.  Use OP_Cop
8be0: 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70  y to make a comp
8bf0: 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f  lete.** copy..*/
8c00: 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20  .case OP_SCopy: 
8c10: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
8c20: 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  in1, out2 */.  p
8c30: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
8c40: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
8c50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
8c60: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
8c70: 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  In1 );.  sqlite3
8c80: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
8c90: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
8ca0: 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65  EM_Ephem);.#ifde
8cb0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
8cc0: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
8cd0: 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d  yFrom==0 ) pOut-
8ce0: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49  >pScopyFrom = pI
8cf0: 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 52 45 47  n1;.#endif.  REG
8d00: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
8d10: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72  >p2, pOut);.  br
8d20: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8d30: 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20  e: ResultRow P1 
8d40: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
8d50: 70 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b  psis:  output=r[
8d60: 50 31 5d 2e 2e 20 63 6f 6c 75 6d 6e 73 3d 50 31  P1].. columns=P1
8d70: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
8d80: 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20  ters P1 through 
8d90: 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20  P1+P2-1 contain 
8da0: 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a  a single row of.
8db0: 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73  ** results. This
8dc0: 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74   opcode causes t
8dd0: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
8de0: 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e  ) call to termin
8df0: 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53  ate.** with an S
8e00: 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e  QLITE_ROW return
8e10: 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74   code and it set
8e20: 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33  s up the sqlite3
8e30: 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75  _stmt.** structu
8e40: 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63  re to provide ac
8e50: 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20  cess to the top 
8e60: 50 31 20 76 61 6c 75 65 73 20 61 73 20 74 68 65  P1 values as the
8e70: 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a   result.** row..
8e80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
8e90: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
8ea0: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
8eb0: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
8ec0: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
8ed0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8ee0: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
8ef0: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
8f00: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
8f10: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 20  nCursor)+1 );.. 
8f20: 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74   /* If this stat
8f30: 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74  ement has violat
8f40: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  ed immediate for
8f50: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
8f60: 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f  ints, do.  ** no
8f70: 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  t return the num
8f80: 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69  ber of rows modi
8f90: 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74  fied. And do not
8fa0: 20 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61   RELEASE the sta
8fb0: 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e  tement.  ** tran
8fc0: 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64  saction. It need
8fd0: 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  s to be rolled b
8fe0: 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53  ack.  */.  if( S
8ff0: 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20  QLITE_OK!=(rc = 
9000: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
9010: 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20  Fk(p, 0)) ){.   
9020: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61   assert( db->fla
9030: 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  gs&SQLITE_CountR
9040: 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ows );.    asser
9050: 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f  t( p->usesStmtJo
9060: 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72 65  urnal );.    bre
9070: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  ak;.  }..  /* If
9080: 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e   the SQLITE_Coun
9090: 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65  tRows flag is se
90a0: 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61  t in sqlite3.fla
90b0: 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20  gs mask, then . 
90c0: 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e   ** DML statemen
90d0: 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f  ts invoke this o
90e0: 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20  pcode to return 
90f0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
9100: 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65  ws .  ** modifie
9110: 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  d to the user. T
9120: 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
9130: 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68  way that a VM th
9140: 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20  at.  ** opens a 
9150: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
9160: 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65  ction may invoke
9170: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20   this opcode..  
9180: 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20  **.  ** In case 
9190: 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73  this is such a s
91a0: 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20  tatement, close 
91b0: 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72  any statement tr
91c0: 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f  ansaction.  ** o
91d0: 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d  pened by this VM
91e0: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
91f0: 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  g control to the
9200: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
9210: 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68  o.  ** ensure th
9220: 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  at statement-tra
9230: 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  nsactions are al
9240: 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74  ways nested, not
9250: 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20   overlapping..  
9260: 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73  ** If the open s
9270: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
9280: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73  tion is not clos
9290: 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68  ed here, then th
92a0: 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20  e user.  ** may 
92b0: 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20  step another VM 
92c0: 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f  that opens its o
92d0: 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  wn statement tra
92e0: 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20  nsaction. This. 
92f0: 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20   ** may lead to 
9300: 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74  overlapping stat
9310: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
9320: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ns..  **.  ** Th
9330: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
9340: 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72  saction is never
9350: 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61   a top-level tra
9360: 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nsaction.  Hence
9370: 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53  .  ** the RELEAS
9380: 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e  E call below can
9390: 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a   never fail..  *
93a0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69  /.  assert( p->i
93b0: 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20  Statement==0 || 
93c0: 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
93d0: 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20  _CountRows );.  
93e0: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
93f0: 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70  CloseStatement(p
9400: 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  , SAVEPOINT_RELE
9410: 41 53 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  ASE);.  if( NEVE
9420: 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
9430: 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
9440: 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64   }..  /* Invalid
9450: 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61  ate all ephemera
9460: 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63  l cursor row cac
9470: 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68  hes */.  p->cach
9480: 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65  eCtr = (p->cache
9490: 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f  Ctr + 2)|1;..  /
94a0: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
94b0: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
94c0: 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c  urrent row are \
94d0: 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20  000 terminated. 
94e0: 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20   ** and have an 
94f0: 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20  assigned type.  
9500: 54 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  The results are 
9510: 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64  de-ephemeralized
9520: 20 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20   as.  ** a side 
9530: 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70  effect..  */.  p
9540: 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74  Mem = p->pResult
9550: 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Set = &aMem[pOp-
9560: 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p1];.  for(i=0;
9570: 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29   i<pOp->p2; i++)
9580: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
9590: 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69  mIsValid(&pMem[i
95a0: 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65  ]) );.    Deephe
95b0: 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69  meralize(&pMem[i
95c0: 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
95d0: 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26  (pMem[i].flags &
95e0: 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20   MEM_Ephem)==0. 
95f0: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70             || (p
9600: 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28  Mem[i].flags & (
9610: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
9620: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  ))==0 );.    sql
9630: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65  ite3VdbeMemNulTe
9640: 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d  rminate(&pMem[i]
9650: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
9660: 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 26  beMemStoreType(&
9670: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45  pMem[i]);.    RE
9680: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
9690: 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d  ->p1+i, &pMem[i]
96a0: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d  );.  }.  if( db-
96b0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
96c0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20  goto no_mem;..  
96d0: 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45  /* Return SQLITE
96e0: 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70  _ROW.  */.  p->p
96f0: 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72 63  c = pc + 1;.  rc
9700: 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20   = SQLITE_ROW;. 
9710: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
9720: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
9730: 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33   Concat P1 P2 P3
9740: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9750: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b  : r[P3]=r[P2]+r[
9760: 50 33 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  P3].**.** Add th
9770: 65 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74  e text in regist
9780: 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65  er P1 onto the e
9790: 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69  nd of the text i
97a0: 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  n.** register P2
97b0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
97c0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
97d0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
97e0: 65 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20  er the P1 or P2 
97f0: 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68  text are NULL th
9800: 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e  en store NULL in
9810: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20   P3..**.**   P3 
9820: 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a  = P2 || P1.**.**
9830: 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66   It is illegal f
9840: 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20  or P1 and P3 to 
9850: 62 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  be the same regi
9860: 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c  ster. Sometimes,
9870: 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65  .** if P3 is the
9880: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61   same register a
9890: 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d  s P2, the implem
98a0: 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65  entation is able
98b0: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d  .** to avoid a m
98c0: 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65  emcpy()..*/.case
98d0: 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20   OP_Concat: {   
98e0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
98f0: 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e  as TK_CONCAT, in
9900: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
9910: 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20    i64 nByte;..  
9920: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
9930: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
9940: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
9950: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9960: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
9970: 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b  t( pIn1!=pOut );
9980: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
9990: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
99a0: 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  s) & MEM_Null ){
99b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
99c0: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
99d0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
99e0: 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f  .  if( ExpandBlo
99f0: 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e  b(pIn1) || Expan
9a00: 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f  dBlob(pIn2) ) go
9a10: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72  to no_mem;.  Str
9a20: 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63  ingify(pIn1, enc
9a30: 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67  oding);.  String
9a40: 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69  ify(pIn2, encodi
9a50: 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70  ng);.  nByte = p
9a60: 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e  In1->n + pIn2->n
9a70: 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
9a80: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
9a90: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
9aa0: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
9ab0: 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54  g;.  }.  MemSetT
9ac0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
9ad0: 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 73 71  M_Str);.  if( sq
9ae0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
9af0: 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74  (pOut, (int)nByt
9b00: 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29  e+2, pOut==pIn2)
9b10: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
9b20: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  mem;.  }.  if( p
9b30: 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20  Out!=pIn2 ){.   
9b40: 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c   memcpy(pOut->z,
9b50: 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e   pIn2->z, pIn2->
9b60: 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79  n);.  }.  memcpy
9b70: 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e  (&pOut->z[pIn2->
9b80: 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e  n], pIn1->z, pIn
9b90: 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a  1->n);.  pOut->z
9ba0: 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75  [nByte]=0;.  pOu
9bb0: 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20  t->z[nByte+1] = 
9bc0: 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  0;.  pOut->flags
9bd0: 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
9be0: 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
9bf0: 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  Byte;.  pOut->en
9c00: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
9c10: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
9c20: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
9c30: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9c40: 3a 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a  : Add P1 P2 P3 *
9c50: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9c60: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50   r[P3]=r[P1]+r[P
9c70: 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65  2].**.** Add the
9c80: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
9c90: 65 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c  er P1 to the val
9ca0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9cb0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
9cc0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
9cd0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
9ce0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
9cf0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
9d00: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
9d10: 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79  Opcode: Multiply
9d20: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9d30: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
9d40: 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]*r[P2].**
9d50: 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20  .**.** Multiply 
9d60: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9d70: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
9d80: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9d90: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
9da0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
9db0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
9dc0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
9dd0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
9de0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
9df0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72  /* Opcode: Subtr
9e00: 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  act P1 P2 P3 * *
9e10: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
9e20: 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d  [P3]=r[P2]-r[P1]
9e30: 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20  .**.** Subtract 
9e40: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9e50: 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68  ister P1 from th
9e60: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9e70: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
9e80: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
9e90: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
9ea0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
9eb0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
9ec0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
9ed0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76  /./* Opcode: Div
9ee0: 69 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ide P1 P2 P3 * *
9ef0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
9f00: 5b 50 33 5d 3d 72 5b 50 31 5d 2f 72 5b 50 32 5d  [P3]=r[P1]/r[P2]
9f10: 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68  .**.** Divide th
9f20: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9f30: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
9f40: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9f50: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
9f60: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
9f70: 67 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32  gister P3 (P3=P2
9f80: 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c  /P1). If the val
9f90: 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74  ue in .** regist
9fa0: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74  er P1 is zero, t
9fb0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
9fc0: 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65  s NULL. If eithe
9fd0: 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e  r input is .** N
9fe0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
9ff0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
a000: 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72  pcode: Remainder
a010: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
a020: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
a030: 5d 3d 72 5b 50 31 5d 25 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]%r[P2].**
a040: 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20  .** Compute the 
a050: 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20  remainder after 
a060: 69 6e 74 65 67 65 72 20 64 69 76 69 73 69 6f 6e  integer division
a070: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   of the value in
a080: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
a090: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
a0a0: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
a0b0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
a0c0: 20 69 6e 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74   in P3. .** If t
a0d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
a0e0: 73 74 65 72 20 50 32 20 69 73 20 7a 65 72 6f 20  ster P2 is zero 
a0f0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
a100: 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  LL..** If either
a110: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
a120: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
a130: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
a140: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20 20  _Add:           
a150: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
a160: 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c  as TK_PLUS, in1,
a170: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
a180: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
a190: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a1a0: 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53  same as TK_MINUS
a1b0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
a1c0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74   */.case OP_Mult
a1d0: 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20  iply:           
a1e0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
a1f0: 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  _STAR, in1, in2,
a200: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
a210: 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20 20  _Divide:        
a220: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
a230: 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31  as TK_SLASH, in1
a240: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
a250: 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72  ase OP_Remainder
a260: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
a270: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c   same as TK_REM,
a280: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
a290: 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e  */.  char bIntin
a2a0: 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20  t;   /* Started 
a2b0: 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67  out as two integ
a2c0: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20  er operands */. 
a2d0: 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20   int flags;     
a2e0: 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d   /* Combined MEM
a2f0: 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f  _* flags from bo
a300: 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69  th inputs */.  i
a310: 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f  64 iA;         /
a320: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
a330: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
a340: 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20  */.  i64 iB;    
a350: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
a360: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
a370: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
a380: 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52  le rA;      /* R
a390: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  eal value of lef
a3a0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64  t operand */.  d
a3b0: 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f  ouble rB;      /
a3c0: 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20  * Real value of 
a3d0: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
a3e0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
a3f0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70  [pOp->p1];.  app
a400: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
a410: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  y(pIn1);.  pIn2 
a420: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a430: 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ;.  applyNumeric
a440: 41 66 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a  Affinity(pIn2);.
a450: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
a460: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
a470: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
a480: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
a490: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
a4a0: 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f  _Null)!=0 ) goto
a4b0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
a4c0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66  lt_is_null;.  if
a4d0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
a4e0: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
a4f0: 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74  EM_Int)==MEM_Int
a500: 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e   ){.    iA = pIn
a510: 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d  1->u.i;.    iB =
a520: 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn2->u.i;.    
a530: 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20  bIntint = 1;.   
a540: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
a550: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
a560: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
a570: 20 69 66 28 20 73 71 6c 69 74 65 33 41 64 64 49   if( sqlite3AddI
a580: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
a590: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
a5a0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
a5b0: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66  OP_Subtract:  if
a5c0: 28 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  ( sqlite3SubInt6
a5d0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
a5e0: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
a5f0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
a600: 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73  Multiply:  if( s
a610: 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26  qlite3MulInt64(&
a620: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
a630: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
a640: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
a650: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ide: {.        i
a660: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
a670: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a680: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
a690: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26     if( iA==-1 &&
a6a0: 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e   iB==SMALLEST_IN
a6b0: 54 36 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  T64 ) goto fp_ma
a6c0: 74 68 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f  th;.        iB /
a6d0: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
a6e0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
a6f0: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
a700: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
a710: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
a720: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
a730: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
a740: 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20  ==-1 ) iA = 1;. 
a750: 20 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b         iB %= iA;
a760: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
a770: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
a780: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42    pOut->u.i = iB
a790: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
a7a0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
a7b0: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  nt);.  }else{.  
a7c0: 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66    bIntint = 0;.f
a7d0: 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d  p_math:.    rA =
a7e0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
a7f0: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20  Value(pIn1);.   
a800: 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rB = sqlite3Vdb
a810: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29  eRealValue(pIn2)
a820: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
a830: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
a840: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
a850: 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41          rB += rA
a860: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
a870: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
a880: 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20  tract:    rB -= 
a890: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
a8a0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
a8b0: 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a  ultiply:    rB *
a8c0: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
a8d0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
a8e0: 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20  _Divide: {.     
a8f0: 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20     /* (double)0 
a900: 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54  In case of SQLIT
a910: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
a920: 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20  POINT... */.    
a930: 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75      if( rA==(dou
a940: 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69  ble)0 ) goto ari
a950: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a960: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
a970: 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20  rB /= rA;.      
a980: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
a990: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20  .      default: 
a9a0: 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20 28  {.        iA = (
a9b0: 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20  i64)rA;.        
a9c0: 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20  iB = (i64)rB;.  
a9d0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
a9e0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
a9f0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
aa00: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
aa10: 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20  ==-1 ) iA = 1;. 
aa20: 20 20 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75         rB = (dou
aa30: 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20  ble)(iB % iA);. 
aa40: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
aa50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64      }.    }.#ifd
aa60: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
aa70: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
aa80: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42    pOut->u.i = rB
aa90: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
aaa0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
aab0: 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69  nt);.#else.    i
aac0: 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  f( sqlite3IsNaN(
aad0: 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  rB) ){.      got
aae0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
aaf0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
ab00: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d   }.    pOut->r =
ab10: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
ab20: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
ab30: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
ab40: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65   (flags & MEM_Re
ab50: 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e 74 69  al)==0 && !bInti
ab60: 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
ab70: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
ab80: 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20  finity(pOut);.  
ab90: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
aba0: 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65   break;..arithme
abb0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
abc0: 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ll:.  sqlite3Vdb
abd0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
abe0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
abf0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65  * Opcode: CollSe
ac00: 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a  q P1 * * P4.**.*
ac10: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
ac20: 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73  r to a CollSeq s
ac30: 74 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e 65  truct. If the ne
ac40: 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65  xt call to a use
ac50: 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72  r function.** or
ac60: 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73   aggregate calls
ac70: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
ac80: 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63  ollSeq(), this c
ac90: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
aca0: 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74  e will.** be ret
acb0: 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75  urned. This is u
acc0: 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c 74  sed by the built
acd0: 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29  -in min(), max()
ace0: 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a   and nullif().**
acf0: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
ad00: 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20 7a  * If P1 is not z
ad10: 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ero, then it is 
ad20: 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
ad30: 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69 6e  a subsequent min
ad40: 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61  () or.** max() a
ad50: 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73 65  ggregate will se
ad60: 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63 75  t to 1 if the cu
ad70: 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74  rrent row is not
ad80: 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a   the minimum or.
ad90: 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65  ** maximum.  The
ada0: 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73 20   P1 register is 
adb0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 30  initialized to 0
adc0: 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
add0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
ade0: 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62  interface used b
adf0: 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
ae00: 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72  tion of the afor
ae10: 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74  ementioned funct
ae20: 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69  ions.** to retri
ae30: 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  eve the collatio
ae40: 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  n sequence set b
ae50: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
ae60: 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a   not available.*
ae70: 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79  * publicly, only
ae80: 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
ae90: 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75  ns defined in fu
aea0: 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nc.c..*/.case OP
aeb0: 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73  _CollSeq: {.  as
aec0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
aed0: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
aee0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
aef0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
af00: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
af10: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b  em[pOp->p1], 0);
af20: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
af30: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63  ./* Opcode: Func
af40: 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34  tion P1 P2 P3 P4
af50: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
af60: 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32   r[P3]=func(r[P2
af70: 5d 2e 2e 29 20 4e 3d 50 35 0a 2a 2a 0a 2a 2a 20  ]..) N=P5.**.** 
af80: 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75  Invoke a user fu
af90: 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20  nction (P4 is a 
afa0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e  pointer to a Fun
afb0: 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20  ction structure 
afc0: 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20  that.** defines 
afd0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69  the function) wi
afe0: 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  th P5 arguments 
aff0: 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
b000: 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75  ter P2 and.** su
b010: 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72  ccessors.  The r
b020: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
b030: 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ction is stored 
b040: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b050: 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d  ** Register P3 m
b060: 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f  ust not be one o
b070: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
b080: 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nputs..**.** P1 
b090: 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d  is a 32-bit bitm
b0a0: 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ask indicating w
b0b0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61  hether or not ea
b0c0: 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  ch argument to t
b0d0: 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  he .** function 
b0e0: 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74  was determined t
b0f0: 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74  o be constant at
b100: 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49   compile time. I
b110: 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  f the first.** a
b120: 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73  rgument was cons
b130: 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20  tant then bit 0 
b140: 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68  of P1 is set. Th
b150: 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  is is used to de
b160: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
b170: 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73  er meta data ass
b180: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75  ociated with a u
b190: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  ser function arg
b1a0: 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a  ument using the.
b1b0: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ** sqlite3_set_a
b1c0: 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79  uxdata() API may
b1d0: 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69   be safely retai
b1e0: 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ned until the ne
b1f0: 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  xt.** invocation
b200: 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   of this opcode.
b210: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
b220: 20 41 67 67 53 74 65 70 20 61 6e 64 20 41 67 67   AggStep and Agg
b230: 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50  Final.*/.case OP
b240: 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69  _Function: {.  i
b250: 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  nt i;.  Mem *pAr
b260: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  g;.  sqlite3_con
b270: 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69  text ctx;.  sqli
b280: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61  te3_value **apVa
b290: 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e  l;.  int n;..  n
b2a0: 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70   = pOp->p5;.  ap
b2b0: 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
b2c0: 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
b2d0: 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61 73 73  || n==0 );.  ass
b2e0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
b2f0: 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
b300: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
b310: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
b320: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
b330: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
b340: 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 61 73 73 65  , pOut);..  asse
b350: 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
b360: 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
b370: 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  2+n<=(p->nMem-p-
b380: 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a  >nCursor)+1) );.
b390: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
b3a0: 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70  3<pOp->p2 || pOp
b3b0: 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20  ->p3>=pOp->p2+n 
b3c0: 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 61 4d 65  );.  pArg = &aMe
b3d0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f  m[pOp->p2];.  fo
b3e0: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
b3f0: 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 73   pArg++){.    as
b400: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
b410: 28 70 41 72 67 29 20 29 3b 0a 20 20 20 20 61 70  (pArg) );.    ap
b420: 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20  Val[i] = pArg;. 
b430: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
b440: 65 28 70 41 72 67 29 3b 0a 20 20 20 20 73 71 6c  e(pArg);.    sql
b450: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
b460: 54 79 70 65 28 70 41 72 67 29 3b 0a 20 20 20 20  Type(pArg);.    
b470: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
b480: 4f 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67 29 3b  Op->p2+i, pArg);
b490: 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
b4a0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
b4b0: 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 63 74 78  FUNCDEF );.  ctx
b4c0: 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  .pFunc = pOp->p4
b4d0: 2e 70 46 75 6e 63 3b 0a 20 20 63 74 78 2e 73 2e  .pFunc;.  ctx.s.
b4e0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
b4f0: 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64  ;.  ctx.s.db = d
b500: 62 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20  b;.  ctx.s.xDel 
b510: 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61  = 0;.  ctx.s.zMa
b520: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e  lloc = 0;.  ctx.
b530: 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74 78 2e  iOp = pc;.  ctx.
b540: 70 56 64 62 65 20 3d 20 70 3b 0a 0a 20 20 2f 2a  pVdbe = p;..  /*
b550: 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c   The output cell
b560: 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76   may already hav
b570: 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63  e a buffer alloc
b580: 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20  ated. Move.  ** 
b590: 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 63  the pointer to c
b5a0: 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20  tx.s so in case 
b5b0: 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  the user-functio
b5c0: 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74  n can use.  ** t
b5d0: 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  he already alloc
b5e0: 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74  ated buffer inst
b5f0: 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e  ead of allocatin
b600: 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a  g a new one..  *
b610: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  /.  sqlite3VdbeM
b620: 65 6d 4d 6f 76 65 28 26 63 74 78 2e 73 2c 20 70  emMove(&ctx.s, p
b630: 4f 75 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  Out);.  MemSetTy
b640: 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20 4d  peFlag(&ctx.s, M
b650: 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74 78  EM_Null);..  ctx
b660: 2e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30  .fErrorOrAux = 0
b670: 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e  ;.  if( ctx.pFun
b680: 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20 53  c->funcFlags & S
b690: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
b6a0: 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72  OLL ){.    asser
b6b0: 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20  t( pOp>aOp );.  
b6c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
b6d0: 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ].p4type==P4_COL
b6e0: 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65  LSEQ );.    asse
b6f0: 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
b700: 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
b710: 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20  ;.    ctx.pColl 
b720: 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f  = pOp[-1].p4.pCo
b730: 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c 61  ll;.  }.  db->la
b740: 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
b750: 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75  wid;.  (*ctx.pFu
b760: 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c  nc->xFunc)(&ctx,
b770: 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49   n, apVal); /* I
b780: 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33  MP: R-24505-2323
b790: 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64  0 */.  lastRowid
b7a0: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
b7b0: 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  ;..  if( db->mal
b7c0: 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20  locFailed ){.   
b7d0: 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68 20   /* Even though 
b7e0: 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20 66  a malloc() has f
b7f0: 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c 65  ailed, the imple
b800: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
b810: 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75 6e  .    ** user fun
b820: 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63  ction may have c
b830: 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65 33  alled an sqlite3
b840: 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66 75  _result_XXX() fu
b850: 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f  nction.    ** to
b860: 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65 2e   return a value.
b870: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
b880: 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e 79  all releases any
b890: 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20 2a   resources.    *
b8a0: 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  * associated wit
b8b0: 68 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e 0a  h such a value..
b8c0: 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
b8d0: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
b8e0: 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f  (&ctx.s);.    go
b8f0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
b900: 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63    /* If the func
b910: 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e  tion returned an
b920: 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e   error, throw an
b930: 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
b940: 69 66 28 20 63 74 78 2e 66 45 72 72 6f 72 4f 72  if( ctx.fErrorOr
b950: 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20 63  Aux ){.    if( c
b960: 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  tx.isError ){.  
b970: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
b980: 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
b990: 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
b9a0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
b9b0: 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 20 20 72  ctx.s));.      r
b9c0: 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b  c = ctx.isError;
b9d0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
b9e0: 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78 44  e3VdbeDeleteAuxD
b9f0: 61 74 61 28 70 2c 20 70 63 2c 20 70 4f 70 2d 3e  ata(p, pc, pOp->
ba00: 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43  p1);.  }..  /* C
ba10: 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f  opy the result o
ba20: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
ba30: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20  nto register P3 
ba40: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
ba50: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26  ChangeEncoding(&
ba60: 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29  ctx.s, encoding)
ba70: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
ba80: 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 26 63 74  emMove(pOut, &ct
ba90: 78 2e 73 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  x.s);.  if( sqli
baa0: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
bab0: 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67 6f  (pOut) ){.    go
bac0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
bad0: 0a 23 69 66 20 30 0a 20 20 2f 2a 20 54 68 65 20  .#if 0.  /* The 
bae0: 61 70 70 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  app-defined func
baf0: 74 69 6f 6e 20 68 61 73 20 64 6f 6e 65 20 73 6f  tion has done so
bb00: 6d 65 74 68 69 6e 67 20 74 68 61 74 20 61 73 20  mething that as 
bb10: 63 61 75 73 65 64 20 74 68 69 73 0a 20 20 2a 2a  caused this.  **
bb20: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78   statement to ex
bb30: 70 69 72 65 2e 20 20 28 50 65 72 68 61 70 73 20  pire.  (Perhaps 
bb40: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c  the function cal
bb50: 6c 65 64 20 73 71 6c 69 74 65 33 5f 65 78 65 63  led sqlite3_exec
bb60: 28 29 0a 20 20 2a 2a 20 77 69 74 68 20 61 20 43  ().  ** with a C
bb70: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
bb80: 65 6d 65 6e 74 2e 29 0a 20 20 2a 2f 0a 20 20 69  ement.).  */.  i
bb90: 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 20  f( p->expired ) 
bba0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52  rc = SQLITE_ABOR
bbb0: 54 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 52 45 47  T;.#endif..  REG
bbc0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
bbd0: 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50  >p3, pOut);.  UP
bbe0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
bbf0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
bc00: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
bc10: 42 69 74 41 6e 64 20 50 31 20 50 32 20 50 33 20  BitAnd P1 P2 P3 
bc20: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
bc30: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b    r[P3]=r[P1]&r[
bc40: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
bc50: 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20  he bit-wise AND 
bc60: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
bc70: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
bc80: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
bc90: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
bca0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
bcb0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
bcc0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
bcd0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
bce0: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20  * Opcode: BitOr 
bcf0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
bd00: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
bd10: 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]|r[P2].**.
bd20: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
bd30: 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76  wise OR of the v
bd40: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
bd50: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
bd60: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
bd70: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
bd80: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
bd90: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
bda0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
bdb0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
bdc0: 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20 50  : ShiftLeft P1 P
bdd0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
bde0: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
bdf0: 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]<<r[P1].**.** 
be00: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
be10: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
be20: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65  ter P2 to the le
be30: 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ft by the.** num
be40: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
be50: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
be60: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
be70: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
be80: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
be90: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
bea0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
beb0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
bec0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
bed0: 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68  pcode: ShiftRigh
bee0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
bef0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
bf00: 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a  3]=r[P2]>>r[P1].
bf10: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
bf20: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
bf30: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
bf40: 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65  the right by the
bf50: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
bf60: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
bf70: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
bf80: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
bf90: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
bfa0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
bfb0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
bfc0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
bfd0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
bfe0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e  */.case OP_BitAn
bff0: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
c000: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c010: 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e  _BITAND, in1, in
c020: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
c030: 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20  OP_BitOr:       
c040: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c050: 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20  me as TK_BITOR, 
c060: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
c070: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c  /.case OP_ShiftL
c080: 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  eft:            
c090: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c0a0: 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  LSHIFT, in1, in2
c0b0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
c0c0: 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20  P_ShiftRight: { 
c0d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c0e0: 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20  e as TK_RSHIFT, 
c0f0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
c100: 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36  /.  i64 iA;.  u6
c110: 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a  4 uA;.  i64 iB;.
c120: 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31    u8 op;..  pIn1
c130: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
c140: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
c150: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
c160: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
c170: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p3];.  if( (pIn1
c180: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
c190: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
c1a0: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
c1b0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
c1c0: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
c1d0: 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69  .  }.  iA = sqli
c1e0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
c1f0: 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71  pIn2);.  iB = sq
c200: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
c210: 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20  e(pIn1);.  op = 
c220: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69  pOp->opcode;.  i
c230: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64  f( op==OP_BitAnd
c240: 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42   ){.    iA &= iB
c250: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70  ;.  }else if( op
c260: 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20  ==OP_BitOr ){.  
c270: 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65    iA |= iB;.  }e
c280: 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b  lse if( iB!=0 ){
c290: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d  .    assert( op=
c2a0: 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c  =OP_ShiftRight |
c2b0: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
c2c0: 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  ft );..    /* If
c2d0: 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e   shifting by a n
c2e0: 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20  egative amount, 
c2f0: 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68  shift in the oth
c300: 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a  er direction */.
c310: 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a      if( iB<0 ){.
c320: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
c330: 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f  _ShiftRight==OP_
c340: 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20  ShiftLeft+1 );. 
c350: 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53       op = 2*OP_S
c360: 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f  hiftLeft + 1 - o
c370: 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42  p;.      iB = iB
c380: 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36  >(-64) ? -iB : 6
c390: 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  4;.    }..    if
c3a0: 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20  ( iB>=64 ){.    
c3b0: 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c    iA = (iA>=0 ||
c3c0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
c3d0: 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20  t) ? 0 : -1;.   
c3e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65   }else{.      me
c3f0: 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73  mcpy(&uA, &iA, s
c400: 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20  izeof(uA));.    
c410: 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69    if( op==OP_Shi
c420: 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20  ftLeft ){.      
c430: 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20    uA <<= iB;.   
c440: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
c450: 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20    uA >>= iB;.   
c460: 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74       /* Sign-ext
c470: 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73  end on a right s
c480: 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69  hift of a negati
c490: 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  ve number */.   
c4a0: 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20       if( iA<0 ) 
c4b0: 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78  uA |= ((((u64)0x
c4c0: 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30  ffffffff)<<32)|0
c4d0: 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36  xffffffff) << (6
c4e0: 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20  4-iB);.      }. 
c4f0: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c       memcpy(&iA,
c500: 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29   &uA, sizeof(iA)
c510: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  );.    }.  }.  p
c520: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20  Out->u.i = iA;. 
c530: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c540: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
c550: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c560: 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50  pcode: AddImm  P
c570: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
c580: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 72  nopsis:  r[P1]=r
c590: 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41  [P1]+P2.** .** A
c5a0: 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  dd the constant 
c5b0: 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P2 to the value 
c5c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
c5d0: 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73  ** The result is
c5e0: 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67   always an integ
c5f0: 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72  er..**.** To for
c600: 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20  ce any register 
c610: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
c620: 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f  , just add 0..*/
c630: 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a  .case OP_AddImm:
c640: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
c650: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
c660: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
c670: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
c680: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
c690: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
c6a0: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
c6b0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
c6c0: 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b  Op->p2;.  break;
c6d0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
c6e0: 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a  ustBeInt P1 P2 *
c6f0: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63   * *.** .** Forc
c700: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
c710: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
c720: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
c730: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
c740: 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P1 is not an in
c750: 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74  teger and cannot
c760: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
c770: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  to an integer.**
c780: 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f   without data lo
c790: 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  ss, then jump im
c7a0: 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c  mediately to P2,
c7b0: 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20   or if P2==0.** 
c7c0: 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  raise an SQLITE_
c7d0: 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69  MISMATCH excepti
c7e0: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  on..*/.case OP_M
c7f0: 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20  ustBeInt: {     
c800: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
c810: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
c820: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
c830: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
c840: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
c850: 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69  _NUMERIC, encodi
c860: 6e 67 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  ng);.  if( (pIn1
c870: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
c880: 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  t)==0 ){.    if(
c890: 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
c8a0: 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
c8b0: 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20  _MISMATCH;.     
c8c0: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
c8d0: 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65  to_error;.    }e
c8e0: 6c 73 65 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  lse{.      pc = 
c8f0: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
c900: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
c910: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c920: 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  In1, MEM_Int);. 
c930: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
c940: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c950: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
c960: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
c970: 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a  lAffinity P1 * *
c980: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65   * *.**.** If re
c990: 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20  gister P1 holds 
c9a0: 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65  an integer conve
c9b0: 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20  rt it to a real 
c9c0: 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  value..**.** Thi
c9d0: 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
c9e0: 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67   when extracting
c9f0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
ca00: 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a  m a column that.
ca10: 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69  ** has REAL affi
ca20: 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75  nity.  Such colu
ca30: 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74  mn values may st
ca40: 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73  ill be stored as
ca50: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f  .** integers, fo
ca60: 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  r space efficien
ca70: 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78  cy, but after ex
ca80: 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74  traction we want
ca90: 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65   them.** to have
caa0: 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c   only a real val
cab0: 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ue..*/.case OP_R
cac0: 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20  ealAffinity: {  
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cae0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
caf0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
cb00: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
cb10: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
cb20: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
cb30: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
cb40: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
cb50: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
cb60: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  f SQLITE_OMIT_CA
cb70: 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  ST./* Opcode: To
cb80: 54 65 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Text P1 * * * *.
cb90: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
cba0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
cbb0: 72 20 50 31 20 74 6f 20 62 65 20 74 65 78 74 2e  r P1 to be text.
cbc0: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
cbd0: 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e   is numeric, con
cbe0: 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72  vert it to a str
cbf0: 69 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ing using the.**
cc00: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 70   equivalent of p
cc10: 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20 76  rintf().  Blob v
cc20: 61 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61 6e  alues are unchan
cc30: 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61  ged and.** are a
cc40: 66 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c 79  fterwards simply
cc50: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
cc60: 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  text..**.** A NU
cc70: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
cc80: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
cc90: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
cca0: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
ccb0: 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20  se OP_ToText: { 
ccc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccd0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
cce0: 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20  O_TEXT, in1 */. 
ccf0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
cd00: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
cd10: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
cd20: 6e 31 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  n1);.  if( pIn1-
cd30: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
cd40: 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 61 73 73  l ) break;.  ass
cd50: 65 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d  ert( MEM_Str==(M
cd60: 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20  EM_Blob>>3) );. 
cd70: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20   pIn1->flags |= 
cd80: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
cd90: 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70  _Blob)>>3;.  app
cda0: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
cdb0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
cdc0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72  , encoding);.  r
cdd0: 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
cde0: 49 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20  In1);.  assert( 
cdf0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
ce00: 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c  M_Str || db->mal
ce10: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 70  locFailed );.  p
ce20: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28  In1->flags &= ~(
ce30: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
ce40: 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65  |MEM_Blob|MEM_Ze
ce50: 72 6f 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ro);.  UPDATE_MA
ce60: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
ce70: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
ce80: 20 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20   Opcode: ToBlob 
ce90: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
cea0: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
ceb0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
cec0: 74 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a  to be a BLOB..**
ced0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
cee0: 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72   numeric, conver
cef0: 74 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67  t it to a string
cf00: 20 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e   first..** Strin
cf10: 67 73 20 61 72 65 20 73 69 6d 70 6c 79 20 72 65  gs are simply re
cf20: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 62  interpreted as b
cf30: 6c 6f 62 73 20 77 69 74 68 20 6e 6f 20 63 68 61  lobs with no cha
cf40: 6e 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e  nge.** to the un
cf50: 64 65 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a  derlying data..*
cf60: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
cf70: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
cf80: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
cf90: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
cfa0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
cfb0: 6f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20  oBlob: {        
cfc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
cfd0: 65 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c  e as TK_TO_BLOB,
cfe0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
cff0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d000: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
d010: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20  gs & MEM_Null ) 
d020: 62 72 65 61 6b 3b 0a 20 20 69 66 28 20 28 70 49  break;.  if( (pI
d030: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d040: 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Blob)==0 ){.    
d050: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
d060: 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  n1, SQLITE_AFF_T
d070: 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  EXT, encoding);.
d080: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
d090: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
d0a0: 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  r || db->mallocF
d0b0: 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d  ailed );.    Mem
d0c0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31  SetTypeFlag(pIn1
d0d0: 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d  , MEM_Blob);.  }
d0e0: 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  else{.    pIn1->
d0f0: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54  flags &= ~(MEM_T
d100: 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f  ypeMask&~MEM_Blo
d110: 62 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  b);.  }.  UPDATE
d120: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
d130: 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n1);.  break;.}.
d140: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75  ./* Opcode: ToNu
d150: 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a  meric P1 * * * *
d160: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
d170: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d180: 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75 6d 65  er P1 to be nume
d190: 72 69 63 20 28 65 69 74 68 65 72 20 61 6e 0a 2a  ric (either an.*
d1a0: 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 66  * integer or a f
d1b0: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75  loating-point nu
d1c0: 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65  mber.).** If the
d1d0: 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f   value is text o
d1e0: 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63  r blob, try to c
d1f0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20  onvert it to an 
d200: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
d210: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
d220: 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e 64 20  ) or atof() and 
d230: 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75  store 0 if no su
d240: 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a  ch conversion .*
d250: 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  * is possible..*
d260: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
d270: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
d280: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
d290: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
d2a0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
d2b0: 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20 20 20  oNumeric: {     
d2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d2d0: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55  same as TK_TO_NU
d2e0: 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20  MERIC, in1 */.  
d2f0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d300: 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p1];.  sqlite3
d310: 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28  VdbeMemNumerify(
d320: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
d330: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
d340: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a  TE_OMIT_CAST */.
d350: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e  ./* Opcode: ToIn
d360: 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  t P1 * * * *.**.
d370: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d380: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d390: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
d3a0: 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76  er.  If.** The v
d3b0: 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c  alue is currentl
d3c0: 79 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c  y a real number,
d3d0: 20 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69   drop its fracti
d3e0: 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66  onal part..** If
d3f0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
d400: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
d410: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
d420: 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e   an integer usin
d430: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
d440: 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e  ent of atoi() an
d450: 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20  d store 0 if no 
d460: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
d470: 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a  is possible..**.
d480: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
d490: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
d4a0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
d4b0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
d4c0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49  ..*/.case OP_ToI
d4d0: 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
d4e0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d4f0: 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31  s TK_TO_INT, in1
d500: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
d510: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
d520: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
d530: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
d540: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
d550: 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
d560: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
d570: 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e  k;.}..#if !defin
d580: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ed(SQLITE_OMIT_C
d590: 41 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  AST) && !defined
d5a0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f  (SQLITE_OMIT_FLO
d5b0: 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20  ATING_POINT)./* 
d5c0: 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50  Opcode: ToReal P
d5d0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
d5e0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
d5f0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
d600: 6f 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20  o be a floating 
d610: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a  point number..**
d620: 20 49 66 20 54 68 65 20 76 61 6c 75 65 20 69 73   If The value is
d630: 20 63 75 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e   currently an in
d640: 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  teger, convert i
d650: 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  t..** If the val
d660: 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c  ue is text or bl
d670: 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65  ob, try to conve
d680: 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65  rt it to an inte
d690: 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ger using the.**
d6a0: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
d6b0: 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20  toi() and store 
d6c0: 30 2e 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63  0.0 if no such c
d6d0: 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73  onversion is pos
d6e0: 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e  sible..**.** A N
d6f0: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
d700: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
d710: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
d720: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
d730: 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b  ase OP_ToReal: {
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d750: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d760: 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a  TO_REAL, in1 */.
d770: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
d780: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
d790: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
d7a0: 49 6e 31 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  In1);.  if( (pIn
d7b0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
d7c0: 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  ull)==0 ){.    s
d7d0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61  qlite3VdbeMemRea
d7e0: 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  lify(pIn1);.  }.
d7f0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
d800: 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
d810: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20  LITE_OMIT_CAST) 
d820: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
d830: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
d840: 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f 2a 20 4f  _POINT) */../* O
d850: 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20  pcode: Lt P1 P2 
d860: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
d870: 70 73 69 73 3a 20 72 5b 50 31 5d 20 3c 20 72 5b  psis: r[P1] < r[
d880: 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P3].**.** Compar
d890: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
d8a0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
d8b0: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
d8c0: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
d8d0: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
d8e0: 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  P2.  .**.** If t
d8f0: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
d900: 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69  NULL bit of P5 i
d910: 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72  s set and either
d920: 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72   reg(P1) or.** r
d930: 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74  eg(P3) is NULL t
d940: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
d950: 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54  p.  If the SQLIT
d960: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a  E_JUMPIFNULL .**
d970: 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68   bit is clear th
d980: 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
d990: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
d9a0: 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  d is NULL..**.**
d9b0: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
d9c0: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
d9d0: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
d9e0: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
d9f0: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
da00: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
da10: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
da20: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
da30: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
da40: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
da50: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
da60: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
da70: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
da80: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
da90: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
daa0: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
dab0: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
dac0: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
dad0: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
dae0: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
daf0: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
db00: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
db10: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
db20: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
db30: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
db40: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
db50: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
db60: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
db70: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
db80: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
db90: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
dba0: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
dbb0: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
dbc0: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
dbd0: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
dbe0: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
dbf0: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
dc00: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
dc10: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
dc20: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
dc30: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
dc40: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
dc50: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
dc60: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
dc70: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
dc80: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
dc90: 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f  4 is  used to do
dca0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
dcb0: 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73    If P4 is not s
dcc0: 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a  pecified then.**
dcd0: 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65   memcmp() is use
dce0: 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  d to compare tex
dcf0: 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f  t string.  If bo
dd00: 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  th values are.**
dd10: 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61   numeric, then a
dd20: 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69   numeric compari
dd30: 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20  son is used. If 
dd40: 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a  the two values.*
dd50: 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65  * are of differe
dd60: 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e  nt types, then n
dd70: 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69  umbers are consi
dd80: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a  dered less than.
dd90: 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73  ** strings and s
dda0: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69  trings are consi
ddb0: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20  dered less than 
ddc0: 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  blobs..**.** If 
ddd0: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
dde0: 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  P2 bit of P5 is 
ddf0: 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74  set, then do not
de00: 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c   jump.  Instead,
de10: 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c  .** store a bool
de20: 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68  ean result (eith
de30: 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e  er 0, or 1, or N
de40: 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72  ULL) in register
de50: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
de60: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
de70: 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50 35  bit is set in P5
de80: 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75  , then NULL valu
de90: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
dea0: 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e  d.** equal to on
deb0: 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69  e another, provi
dec0: 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64 6f  ded that they do
ded0: 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72 20   not have their 
dee0: 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62  MEM_Cleared.** b
def0: 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  it set..*/./* Op
df00: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
df10: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
df20: 73 69 73 3a 20 72 5b 50 31 5d 20 21 3d 20 72 5b  sis: r[P1] != r[
df30: 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77  P3].**.** This w
df40: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
df50: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
df60: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
df70: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
df80: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
df90: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
dfa0: 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75  d P3 are not equ
dfb0: 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  al.  See the Lt 
dfc0: 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64  opcode for.** ad
dfd0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
dfe0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  tion..**.** If S
dff0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
e000: 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74  set in P5 then t
e010: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
e020: 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79  parison is alway
e030: 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65  s either.** true
e040: 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73   or false and is
e050: 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66   never NULL.  If
e060: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
e070: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  re NULL then the
e080: 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f   result.** of co
e090: 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c 73  mparison is fals
e0a0: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
e0b0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
e0c0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
e0d0: 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69   true..** If nei
e0e0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
e0f0: 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20  NULL the result 
e100: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
e110: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
e120: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
e130: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
e140: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f  tted from P5..*/
e150: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
e160: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
e170: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
e180: 20 3d 3d 20 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20   == r[P3].**.** 
e190: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
e1a0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
e1b0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
e1c0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
e1d0: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
e1e0: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
e1f0: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65   P1 and P3 are e
e200: 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65  qual..** See the
e210: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
e220: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e230: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
e240: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
e250: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
e260: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
e270: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
e280: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
e290: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
e2a0: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
e2b0: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
e2c0: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
e2d0: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
e2e0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
e2f0: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
e300: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
e310: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
e320: 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65   false..** If ne
e330: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
e340: 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74   NULL the result
e350: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
e360: 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a  it would be if.*
e370: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  * the SQLITE_NUL
e380: 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d  LEQ flag were om
e390: 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a  itted from P5..*
e3a0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20  /./* Opcode: Le 
e3b0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e3c0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
e3d0: 5d 20 3c 3d 20 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a  ] <= r[P3].**.**
e3e0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
e3f0: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
e400: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
e410: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
e420: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
e430: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
e440: 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P3 is less than 
e450: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
e460: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
e470: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
e480: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
e490: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
e4a0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
e4b0: 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32  Opcode: Gt P1 P2
e4c0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e4d0: 6f 70 73 69 73 3a 20 72 5b 50 31 5d 20 3e 20 72  opsis: r[P1] > r
e4e0: 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P3].**.** This 
e4f0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
e500: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
e510: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
e520: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
e530: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
e540: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
e550: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
e560: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
e570: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
e580: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
e590: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
e5a0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
e5b0: 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50   Opcode: Ge P1 P
e5c0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
e5d0: 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 20 3e 3d  nopsis: r[P1] >=
e5e0: 20 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 69   r[P3].**.** Thi
e5f0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
e600: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e610: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
e620: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
e630: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
e640: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
e650: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
e660: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
e670: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
e680: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
e690: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e6a0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e6b0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
e6c0: 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20   OP_Eq:         
e6d0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
e6e0: 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e   TK_EQ, jump, in
e6f0: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
e700: 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Ne:           
e710: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e720: 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_NE, jump, in1,
e730: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
e740: 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Lt:             
e750: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
e760: 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  LT, jump, in1, i
e770: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65  n3 */.case OP_Le
e780: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
e790: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45  /* same as TK_LE
e7a0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
e7b0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20   */.case OP_Gt: 
e7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e7d0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20   same as TK_GT, 
e7e0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
e7f0: 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20  /.case OP_Ge: { 
e800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e810: 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75  ame as TK_GE, ju
e820: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
e830: 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
e840: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
e850: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
e860: 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73  n of pIn1 agains
e870: 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72  t pIn3 */.  char
e880: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
e890: 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75  /* Affinity to u
e8a0: 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  se for compariso
e8b0: 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  n */.  u16 flags
e8c0: 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  1;         /* Co
e8d0: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
e8e0: 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61  lue of pIn1->fla
e8f0: 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  gs */.  u16 flag
e900: 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s3;         /* C
e910: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
e920: 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c  alue of pIn3->fl
e930: 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ags */..  pIn1 =
e940: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e950: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
e960: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67  pOp->p3];.  flag
e970: 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  s1 = pIn1->flags
e980: 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e  ;.  flags3 = pIn
e990: 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  3->flags;.  if( 
e9a0: 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33  (flags1 | flags3
e9b0: 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  )&MEM_Null ){.  
e9c0: 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68    /* One or both
e9d0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
e9e0: 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f  LL */.    if( pO
e9f0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
ea00: 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f  ULLEQ ){.      /
ea10: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
ea20: 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68  EQ is set (which
ea30: 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65   will only happe
ea40: 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f  n if the operato
ea50: 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50  r is.      ** OP
ea60: 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68  _Eq or OP_Ne) th
ea70: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
ea80: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
ea90: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20  g on whether.   
eaa0: 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74     ** or not bot
eab0: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  h operands are n
eac0: 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ull..      */.  
ead0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
eae0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c  >opcode==OP_Eq |
eaf0: 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
eb00: 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73  P_Ne );.      as
eb10: 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26 20  sert( (flags1 & 
eb20: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20  MEM_Cleared)==0 
eb30: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  );.      if( (fl
eb40: 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  ags1&MEM_Null)!=
eb50: 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61  0.       && (fla
eb60: 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs3&MEM_Null)!=0
eb70: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
eb80: 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d  s3&MEM_Cleared)=
eb90: 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
eba0: 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a      res = 0;  /*
ebb0: 20 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75   Results are equ
ebc0: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73  al */.      }els
ebd0: 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  e{.        res =
ebe0: 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20   1;  /* Results 
ebf0: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f  are not equal */
ec00: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
ec10: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c  se{.      /* SQL
ec20: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c  ITE_NULLEQ is cl
ec30: 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74  ear and at least
ec40: 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20   one operand is 
ec50: 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74  NULL,.      ** t
ec60: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
ec70: 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20  s always NULL.. 
ec80: 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70       ** The jump
ec90: 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
eca0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
ecb0: 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20  LL bit is set.. 
ecc0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
ecd0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
ece0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
ecf0: 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f  .        pc = pO
ed00: 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20 20 7d  p->p2-1;.      }
ed10: 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 35  else if( pOp->p5
ed20: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
ed30: 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75  2 ){.        pOu
ed40: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
ed50: 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53  2];.        MemS
ed60: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
ed70: 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
ed80: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
ed90: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
eda0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
edb0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
edc0: 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65  }else{.    /* Ne
edd0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
ede0: 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d   NULL.  Do a com
edf0: 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20  parison. */.    
ee00: 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  affinity = pOp->
ee10: 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f  p5 & SQLITE_AFF_
ee20: 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66  MASK;.    if( af
ee30: 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20  finity ){.      
ee40: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
ee50: 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  n1, affinity, en
ee60: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61  coding);.      a
ee70: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
ee80: 33 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63  3, affinity, enc
ee90: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 69 66  oding);.      if
eea0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
eeb0: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
eec0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73  ;.    }..    ass
eed0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
eee0: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20  ==P4_COLLSEQ || 
eef0: 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30  pOp->p4.pColl==0
ef00: 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c   );.    ExpandBl
ef10: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 45 78  ob(pIn1);.    Ex
ef20: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a  pandBlob(pIn3);.
ef30: 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65      res = sqlite
ef40: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33  3MemCompare(pIn3
ef50: 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e  , pIn1, pOp->p4.
ef60: 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77  pColl);.  }.  sw
ef70: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
ef80: 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50  e ){.    case OP
ef90: 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Eq:    res = re
efa0: 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s==0;     break;
efb0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a  .    case OP_Ne:
efc0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30      res = res!=0
efd0: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
efe0: 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20   case OP_Lt:    
eff0: 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20  res = res<0;    
f000: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
f010: 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20  e OP_Le:    res 
f020: 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72  = res<=0;     br
f030: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
f040: 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Gt:    res = re
f050: 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s>0;      break;
f060: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
f070: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30      res = res>=0
f080: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;     break;.  }
f090: 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
f0a0: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
f0b0: 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26   ){.    pOut = &
f0c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
f0d0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
f0e0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
f0f0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
f100: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
f110: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
f120: 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54   res;.    REGIST
f130: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
f140: 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  , pOut);.  }else
f150: 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
f160: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
f170: 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61    }..  /* Undo a
f180: 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  ny changes made 
f190: 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  by applyAffinity
f1a0: 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20  () to the input 
f1b0: 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20  registers. */.  
f1c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 28 70  pIn1->flags = (p
f1d0: 49 6e 31 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f  In1->flags&~MEM_
f1e0: 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61  TypeMask) | (fla
f1f0: 67 73 31 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  gs1&MEM_TypeMask
f200: 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73  );.  pIn3->flags
f210: 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26   = (pIn3->flags&
f220: 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
f230: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 54 79 70   (flags3&MEM_Typ
f240: 65 4d 61 73 6b 29 3b 0a 20 20 62 72 65 61 6b 3b  eMask);.  break;
f250: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
f260: 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a  ermutation * * *
f270: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20   P4 *.**.** Set 
f280: 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
f290: 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43  used by the OP_C
f2a0: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20  ompare operator 
f2b0: 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a  to be the array.
f2c0: 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  ** of integers i
f2d0: 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n P4..**.** The 
f2e0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f  permutation is o
f2f0: 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20  nly valid until 
f300: 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70  the next OP_Comp
f310: 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20  are that has.** 
f320: 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  the OPFLAG_PERMU
f330: 54 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35  TE bit set in P5
f340: 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20  . Typically the 
f350: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73  OP_Permutation s
f360: 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20  hould .** occur 
f370: 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f  immediately prio
f380: 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70  r to the OP_Comp
f390: 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  are..*/.case OP_
f3a0: 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20  Permutation: {. 
f3b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
f3c0: 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
f3d0: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
f3e0: 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61  Op->p4.ai );.  a
f3f0: 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70  Permute = pOp->p
f400: 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.ai;.  break;.}
f410: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
f420: 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
f430: 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72   P5.**.** Compar
f440: 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66  e two vectors of
f450: 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
f460: 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
f470: 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a  -1) (call this.*
f480: 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e  * vector "A") an
f490: 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65  d in reg(P2)..re
f4a0: 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29  g(P2+P3-1) ("B")
f4b0: 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75  .  Save the resu
f4c0: 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d  lt of.** the com
f4d0: 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20  parison for use 
f4e0: 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a  by the next OP_J
f4f0: 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a  ump instruct..**
f500: 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
f510: 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
f520: 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
f530: 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70  he order of comp
f540: 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74  arison is.** det
f550: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d  ermined by the m
f560: 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65  ost recent OP_Pe
f570: 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74  rmutation operat
f580: 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f  or.  If the.** O
f590: 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
f5a0: 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  t is clear, then
f5b0: 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f   register are co
f5c0: 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e  mpared in sequen
f5d0: 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a  tial.** order..*
f5e0: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
f5f0: 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
f600: 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
f610: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
f620: 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
f630: 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
f640: 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
f650: 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
f660: 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
f670: 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
f680: 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
f690: 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
f6a0: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
f6b0: 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
f6c0: 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
f6d0: 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
f6e0: 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
f6f0: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
f700: 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
f710: 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
f720: 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
f730: 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
f740: 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
f750: 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
f760: 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
f770: 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74  .  int p1;.  int
f780: 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79   p2;.  const Key
f790: 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
f7a0: 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c    int idx;.  Col
f7b0: 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20  lSeq *pColl;    
f7c0: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
f7d0: 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20  uence to use on 
f7e0: 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69  this term */.  i
f7f0: 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
f800: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
f810: 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
f820: 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70  der */..  if( (p
f830: 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
f840: 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50  PERMUTE)==0 ) aP
f850: 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20  ermute = 0;.  n 
f860: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65  = pOp->p3;.  pKe
f870: 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
f880: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
f890: 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
f8a0: 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
f8b0: 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
f8c0: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
f8d0: 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  p2;.#if SQLITE_D
f8e0: 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
f8f0: 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
f900: 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
f910: 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
f920: 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
f930: 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
f940: 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
f950: 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
f960: 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  x<=(p->nMem-p->n
f970: 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20  Cursor)+1 );.   
f980: 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
f990: 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d   p2+mx<=(p->nMem
f9a0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
f9b0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
f9c0: 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
f9d0: 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  1+n<=(p->nMem-p-
f9e0: 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
f9f0: 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
fa00: 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  && p2+n<=(p->nMe
fa10: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
fa20: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
fa30: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
fa40: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
fa50: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
fa60: 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
fa70: 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
fa80: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
fa90: 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
faa0: 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
fab0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
fac0: 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
fad0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
fae0: 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
faf0: 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
fb00: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
fb10: 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
fb20: 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
fb30: 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   i<pKeyInfo->nFi
fb40: 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
fb50: 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
fb60: 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
fb70: 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
fb80: 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
fb90: 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
fba0: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
fbb0: 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
fbc0: 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
fbd0: 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
fbe0: 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
fbf0: 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
fc00: 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
fc10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
fc20: 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d    }.  aPermute =
fc30: 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
fc40: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
fc50: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
fc60: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
fc70: 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
fc80: 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
fc90: 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
fca0: 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
fcb0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
fcc0: 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
fcd0: 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
fce0: 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
fcf0: 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
fd00: 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
fd10: 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
fd20: 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
fd30: 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
fd40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
fd50: 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
fd60: 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63  pare<0 ){.    pc
fd70: 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a   = pOp->p1 - 1;.
fd80: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d    }else if( iCom
fd90: 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70  pare==0 ){.    p
fda0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
fdb0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63  .  }else{.    pc
fdc0: 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a   = pOp->p3 - 1;.
fdd0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
fde0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
fdf0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
fe00: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
fe10: 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a  r[P1] && r[P2]).
fe20: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
fe30: 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
fe40: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
fe50: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
fe60: 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
fe70: 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
fe80: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
fe90: 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
fea0: 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
feb0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
fec0: 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
fed0: 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
fee0: 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
fef0: 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
ff00: 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
ff10: 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
ff20: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
ff30: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
ff40: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
ff50: 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a  r[P1] || r[P2]).
ff60: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
ff70: 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65  ogical OR of the
ff80: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
ff90: 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
ffa0: 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61  d.** store the a
ffb0: 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65  nswer in registe
ffc0: 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
ffd0: 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
ffe0: 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29  s nonzero (true)
fff0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
10000 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20   is 1 (true).** 
10010 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65  even if the othe
10020 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
10030 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c    A NULL and fal
10040 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a  se or two NULLs.
10050 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f  ** give a NULL o
10060 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
10070 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  P_And:          
10080 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
10090 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_AND, in1, in2,
100a0 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
100b0 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Or: {          
100c0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
100d0 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  _OR, in1, in2, o
100e0 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b  ut3 */.  int v1;
100f0 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72      /* Left oper
10100 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20  and:  0==FALSE, 
10110 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
10120 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  OWN or NULL */. 
10130 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52   int v2;    /* R
10140 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d  ight operand: 0=
10150 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
10160 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
10170 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ULL */..  pIn1 =
10180 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
10190 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
101a0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
101b0 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d  .    v1 = 2;.  }
101c0 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73  else{.    v1 = s
101d0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
101e0 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d  ue(pIn1)!=0;.  }
101f0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
10200 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
10210 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
10220 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32  M_Null ){.    v2
10230 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
10240 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56     v2 = sqlite3V
10250 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
10260 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  )!=0;.  }.  if( 
10270 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
10280 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
10290 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
102a0 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
102b0 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30  ] = { 0, 0, 0, 0
102c0 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20  , 1, 2, 0, 2, 2 
102d0 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
102e0 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
102f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
10300 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
10310 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
10320 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20  [] = { 0, 1, 2, 
10330 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32  1, 1, 1, 2, 1, 2
10340 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
10350 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
10360 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
10370 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
10380 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20  f( v1==2 ){.    
10390 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
103a0 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
103b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
103c0 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20  t->u.i = v1;.   
103d0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
103e0 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
103f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
10400 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50  /* Opcode: Not P
10410 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
10420 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21  nopsis: r[P2]= !
10430 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  r[P1].**.** Inte
10440 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20  rpret the value 
10450 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
10460 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
10470 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  e.  Store the.**
10480 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d   boolean complem
10490 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ent in register 
104a0 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  P2.  If the valu
104b0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
104c0 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
104d0 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f  en a NULL is sto
104e0 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  red in P2..*/.ca
104f0 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20  se OP_Not: {    
10500 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
10510 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69  ame as TK_NOT, i
10520 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
10530 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
10540 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
10550 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10560 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
10570 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
10580 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10590 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
105a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
105b0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
105c0 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65  64(pOut, !sqlite
105d0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
105e0 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1));.  }.  brea
105f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10600 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20   BitNot P1 P2 * 
10610 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
10620 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a   r[P1]= ~r[P1].*
10630 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
10640 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
10650 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20  gister P1 as an 
10660 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20  integer.  Store 
10670 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70  the.** ones-comp
10680 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31  lement of the P1
10690 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
106a0 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20  ster P2.  If P1 
106b0 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20  holds.** a NULL 
106c0 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c  then store a NUL
106d0 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  L in P2..*/.case
106e0 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20   OP_BitNot: {   
106f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
10700 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20  e as TK_BITNOT, 
10710 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  in1, out2 */.  p
10720 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
10730 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
10740 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
10750 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
10760 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
10770 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10780 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
10790 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
107a0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
107b0 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74  t64(pOut, ~sqlit
107c0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
107d0 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65  In1));.  }.  bre
107e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
107f0 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  : Once P1 P2 * *
10800 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 69   *.**.** Check i
10810 66 20 4f 50 5f 4f 6e 63 65 20 66 6c 61 67 20 50  f OP_Once flag P
10820 31 20 69 73 20 73 65 74 2e 20 49 66 20 73 6f 2c  1 is set. If so,
10830 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
10840 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
10850 73 65 2c 0a 2a 2a 20 73 65 74 20 74 68 65 20 66  se,.** set the f
10860 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  lag and fall thr
10870 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
10880 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
10890 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b  .case OP_Once: {
108a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
108b0 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
108c0 28 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e  ( pOp->p1<p->nOn
108d0 63 65 46 6c 61 67 20 29 3b 0a 20 20 69 66 28 20  ceFlag );.  if( 
108e0 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70  p->aOnceFlag[pOp
108f0 2d 3e 70 31 5d 20 29 7b 0a 20 20 20 20 70 63 20  ->p1] ){.    pc 
10900 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
10910 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e  else{.    p->aOn
10920 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20  ceFlag[pOp->p1] 
10930 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
10940 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10950 49 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  If P1 P2 P3 * *.
10960 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
10970 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
10980 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
10990 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65  true.  The value
109a0 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
109b0 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20  d true if it is 
109c0 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d  numeric and non-
109d0 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
109e0 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
109f0 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
10a00 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
10a10 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a   non-zero..*/./*
10a20 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50   Opcode: IfNot P
10a30 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
10a40 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
10a50 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
10a60 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c 73  ister P1 is Fals
10a70 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
10a80 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66   is considered f
10a90 61 6c 73 65 20 69 66 20 69 74 20 68 61 73 20 61  alse if it has a
10aa0 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
10ab0 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
10ac0 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
10ad0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
10ae0 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
10af0 69 73 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65  is zero..*/.case
10b00 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20   OP_If:         
10b10 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
10b20 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in1 */.case OP_
10b30 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
10b40 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
10b50 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70   */.  int c;.  p
10b60 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
10b70 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
10b80 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
10b90 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f  ll ){.    c = pO
10ba0 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p3;.  }else{.
10bb0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
10bc0 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
10bd0 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  T.    c = sqlite
10be0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
10bf0 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20  n1)!=0;.#else.  
10c00 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
10c10 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
10c20 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20  !=0.0;.#endif.  
10c30 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
10c40 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20  e==OP_IfNot ) c 
10c50 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20  = !c;.  }.  if( 
10c60 63 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  c ){.    pc = pO
10c70 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
10c80 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10c90 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32  de: IsNull P1 P2
10ca0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
10cb0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
10cc0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
10cd0 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a   P1 is NULL..*/.
10ce0 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20  case OP_IsNull: 
10cf0 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
10d00 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c  same as TK_ISNUL
10d10 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
10d20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
10d30 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
10d40 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10d50 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
10d60 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
10d70 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
10d80 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
10d90 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  otNull P1 P2 * *
10da0 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
10db0 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
10dc0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
10dd0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a  is not NULL.  .*
10de0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c  /.case OP_NotNul
10df0 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
10e00 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
10e10 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  TNULL, jump, in1
10e20 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
10e30 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
10e40 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
10e50 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
10e60 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
10e70 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
10e80 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10e90 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
10ea0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
10eb0 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50 58 0a  psis:  r[P3]=PX.
10ec0 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
10ed0 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75  the data that cu
10ee0 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
10ef0 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65  o as a structure
10f00 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20   built using.** 
10f10 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  the MakeRecord i
10f20 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65  nstruction.  (Se
10f30 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  e the MakeRecord
10f40 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
10f50 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d  tional.** inform
10f60 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
10f70 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61  format of the da
10f80 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68  ta.)  Extract th
10f90 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a  e P2-th column.*
10fa0 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f  * from this reco
10fb0 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  rd.  If there ar
10fc0 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b  e less that (P2+
10fd0 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e  1) .** values in
10fe0 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74   the record, ext
10ff0 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a  ract a NULL..**.
11000 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74  ** The value ext
11010 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64  racted is stored
11020 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
11030 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f  .**.** If the co
11040 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65  lumn contains fe
11050 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c  wer than P2 fiel
11060 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74  ds, then extract
11070 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a   a NULL.  Or,.**
11080 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   if the P4 argum
11090 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20  ent is a P4_MEM 
110a0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  use the value of
110b0 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
110c0 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c   as.** the resul
110d0 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
110e0 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
110f0 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20  E bit is set on 
11100 50 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70  P5 and P1 is a p
11110 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
11120 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  or,.** then the 
11130 63 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72  cache of the cur
11140 73 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69  sor is reset pri
11150 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67  or to extracting
11160 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20   the column..** 
11170 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c  The first OP_Col
11180 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73  umn against a ps
11190 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72  eudo-table after
111a0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
111b0 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67  e content.** reg
111c0 69 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65  ister has change
111d0 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68  d should have th
111e0 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  is bit set..**.*
111f0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
11200 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
11210 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62  FLAG_TYPEOFARG b
11220 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50  its are set on P
11230 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65  5 when.** the re
11240 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65  sult is guarante
11250 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73  ed to only be us
11260 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
11270 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29  nt of a length()
11280 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20  .** or typeof() 
11290 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63  function, respec
112a0 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61  tively.  The loa
112b0 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c  ding of large bl
112c0 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b  obs can be.** sk
112d0 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68  ipped for length
112e0 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65  () and all conte
112f0 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62  nt loading can b
11300 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79  e skipped for ty
11310 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  peof()..*/.case 
11320 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75  OP_Column: {.  u
11330 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20  32 payloadSize; 
11340 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
11350 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
11360 72 64 20 2a 2f 0a 20 20 69 36 34 20 70 61 79 6c  rd */.  i64 payl
11370 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75  oadSize64; /* Nu
11380 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
11390 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
113a0 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
113b0 20 20 20 20 2f 2a 20 50 31 20 76 61 6c 75 65 20      /* P1 value 
113c0 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f  of the opcode */
113d0 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
113e0 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20        /* column 
113f0 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65  number to retrie
11400 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ve */.  VdbeCurs
11410 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
11420 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
11430 0a 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20 20  .  char *zRec;  
11440 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
11450 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65 63   to complete rec
11460 6f 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74  ord-data */.  Bt
11470 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
11480 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
11490 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
114a0 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Type;        /* 
114b0 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74  aType[i] holds t
114c0 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20  he numeric type 
114d0 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75  of the i-th colu
114e0 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  mn */.  u32 *aOf
114f0 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
11500 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
11510 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
11520 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
11530 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  umn */.  int nFi
11540 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e  eld;        /* n
11550 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
11560 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
11570 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20  .  int len;     
11580 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e        /* The len
11590 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61  gth of the seria
115a0 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74  lized data for t
115b0 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  he column */.  i
115c0 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
115d0 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
115e0 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61  r */.  char *zDa
115f0 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61 72  ta;       /* Par
11600 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
11610 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
11620 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20  .  Mem *pDest;  
11630 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74        /* Where t
11640 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72  o write the extr
11650 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20  acted value */. 
11660 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
11670 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
11680 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
11690 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
116a0 20 75 38 20 2a 7a 49 64 78 3b 20 20 20 20 20 20   u8 *zIdx;      
116b0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
116c0 6f 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 38  o header */.  u8
116d0 20 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20 20 20   *zEndHdr;      
116e0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66   /* Pointer to f
116f0 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20  irst byte after 
11700 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
11710 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20  u32 offset;     
11720 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74     /* Offset int
11730 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20  o the data */.  
11740 75 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20 20  u32 szField;    
11750 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11760 62 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6e  bytes in the con
11770 74 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64 20  tent of a field 
11780 2a 2f 0a 20 20 69 6e 74 20 73 7a 48 64 72 3b 20  */.  int szHdr; 
11790 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
117a0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 73 69  of the header si
117b0 7a 65 20 66 69 65 6c 64 20 61 74 20 73 74 61 72  ze field at star
117c0 74 20 6f 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20  t of record */. 
117d0 20 69 6e 74 20 61 76 61 69 6c 3b 20 20 20 20 20   int avail;     
117e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
117f0 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61   bytes of availa
11800 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33  ble data */.  u3
11810 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  2 t;            
11820 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20   /* A type code 
11830 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20  from the record 
11840 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  header */.  Mem 
11850 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  *pReg;         /
11860 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e  * PseudoTable in
11870 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
11880 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
11890 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
118a0 3b 0a 20 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65  ;.  pC = 0;.  me
118b0 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
118c0 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
118d0 61 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43  assert( p1<p->nC
118e0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
118f0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
11900 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
11910 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
11920 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
11930 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
11940 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
11950 20 70 44 65 73 74 29 3b 0a 20 20 7a 52 65 63 20   pDest);.  zRec 
11960 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20  = 0;..  /* This 
11970 62 6c 6f 63 6b 20 73 65 74 73 20 74 68 65 20 76  block sets the v
11980 61 72 69 61 62 6c 65 20 70 61 79 6c 6f 61 64 53  ariable payloadS
11990 69 7a 65 20 74 6f 20 62 65 20 74 68 65 20 74 6f  ize to be the to
119a0 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20  tal number of.  
119b0 2a 2a 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  ** bytes in the 
119c0 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a  record..  **.  *
119d0 2a 20 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f  * zRec is set to
119e0 20 62 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   be the complete
119f0 20 74 65 78 74 20 6f 66 20 74 68 65 20 72 65 63   text of the rec
11a00 6f 72 64 20 69 66 20 69 74 20 69 73 20 61 76 61  ord if it is ava
11a10 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65  ilable..  ** The
11a20 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64   complete record
11a30 20 74 65 78 74 20 69 73 20 61 6c 77 61 79 73 20   text is always 
11a40 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 73  available for ps
11a50 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a  eudo-tables.  **
11a60 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
11a70 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 63 75  s stored in a cu
11a80 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65  rsor, the comple
11a90 74 65 20 72 65 63 6f 72 64 20 74 65 78 74 0a 20  te record text. 
11aa0 20 2a 2a 20 6d 69 67 68 74 20 62 65 20 61 76 61   ** might be ava
11ab0 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 20 70  ilable in the  p
11ac0 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20  C->aRow cache.  
11ad0 4f 72 20 69 74 20 6d 69 67 68 74 20 6e 6f 74 20  Or it might not 
11ae0 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  be..  ** If the 
11af0 64 61 74 61 20 69 73 20 75 6e 61 76 61 69 6c 61  data is unavaila
11b00 62 6c 65 2c 20 20 7a 52 65 63 20 69 73 20 73 65  ble,  zRec is se
11b10 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a  t to NULL..  **.
11b20 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d    ** We also com
11b30 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  pute the number 
11b40 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
11b50 65 20 72 65 63 6f 72 64 2e 20 20 46 6f 72 20 63  e record.  For c
11b60 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65  ursors,.  ** the
11b70 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
11b80 6e 73 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ns is stored in 
11b90 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 6e  the VdbeCursor.n
11ba0 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74 2e 0a 20  Field element.. 
11bb0 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   */.  pC = p->ap
11bc0 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73 73 65 72  Csr[p1];.  asser
11bd0 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 6e  t( pC!=0 );.#ifn
11be0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
11bf0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61  VIRTUALTABLE.  a
11c00 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62  ssert( pC->pVtab
11c10 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e  Cursor==0 );.#en
11c20 64 69 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43  dif.  pCrsr = pC
11c30 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
11c40 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20   pCrsr!=0 ){.   
11c50 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69   /* The record i
11c60 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 42 2d  s stored in a B-
11c70 54 72 65 65 20 2a 2f 0a 20 20 20 20 72 63 20 3d  Tree */.    rc =
11c80 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
11c90 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
11ca0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
11cb0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
11cc0 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  or;.    if( pC->
11cd0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
11ce0 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30   payloadSize = 0
11cf0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
11d00 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d  pC->cacheStatus=
11d10 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a  =p->cacheCtr ){.
11d20 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a        payloadSiz
11d30 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  e = pC->payloadS
11d40 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52 65 63 20  ize;.      zRec 
11d50 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e 61 52 6f  = (char*)pC->aRo
11d60 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  w;.    }else if(
11d70 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
11d80 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
11d90 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
11da0 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
11db0 3b 0a 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59  ;.      VVA_ONLY
11dc0 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
11dd0 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
11de0 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  , &payloadSize64
11df0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
11e00 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
11e10 3b 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61  ;   /* True beca
11e20 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
11e30 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  eto() call above
11e40 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 73 71 6c   */.      /* sql
11e50 69 74 65 33 42 74 72 65 65 50 61 72 73 65 43 65  ite3BtreeParseCe
11e60 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67 65 74  llPtr() uses get
11e70 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78  Varint32() to ex
11e80 74 72 61 63 74 20 74 68 65 0a 20 20 20 20 20 20  tract the.      
11e90 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c  ** payload size,
11ea0 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73   so it is imposs
11eb0 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64  ible for payload
11ec0 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20  Size64 to be.   
11ed0 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61     ** larger tha
11ee0 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20  n 32 bits. */.  
11ef0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 61 79      assert( (pay
11f00 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c  loadSize64 & SQL
11f10 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75  ITE_MAX_U32)==(u
11f20 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64)payloadSize64
11f30 20 29 3b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61   );.      payloa
11f40 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79  dSize = (u32)pay
11f50 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20  loadSize64;.    
11f60 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
11f70 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
11f80 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
11f90 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 56  Crsr) );.      V
11fa0 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
11fb0 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69  lite3BtreeDataSi
11fc0 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f  ze(pCrsr, &paylo
11fd0 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 61  adSize);.      a
11fe0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
11ff0 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74  E_OK );   /* Dat
12000 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66  aSize() cannot f
12010 61 69 6c 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d  ail */.    }.  }
12020 65 6c 73 65 20 69 66 28 20 41 4c 57 41 59 53 28  else if( ALWAYS(
12030 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
12040 65 67 3e 30 29 20 29 7b 0a 20 20 20 20 70 52 65  eg>0) ){.    pRe
12050 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70 73  g = &aMem[pC->ps
12060 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20  eudoTableReg];. 
12070 20 20 20 69 66 28 20 70 43 2d 3e 6d 75 6c 74 69     if( pC->multi
12080 50 73 65 75 64 6f 20 29 7b 0a 20 20 20 20 20 20  Pseudo ){.      
12090 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
120a0 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c  allowCopy(pDest,
120b0 20 70 52 65 67 2b 70 32 2c 20 4d 45 4d 5f 45 70   pReg+p2, MEM_Ep
120c0 68 65 6d 29 3b 0a 20 20 20 20 20 20 44 65 65 70  hem);.      Deep
120d0 68 65 6d 65 72 61 6c 69 7a 65 28 70 44 65 73 74  hemeralize(pDest
120e0 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  );.      goto op
120f0 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
12100 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
12110 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Reg->flags & MEM
12120 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 61 73 73  _Blob );.    ass
12130 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
12140 70 52 65 67 29 20 29 3b 0a 20 20 20 20 70 61 79  pReg) );.    pay
12150 6c 6f 61 64 53 69 7a 65 20 3d 20 70 52 65 67 2d  loadSize = pReg-
12160 3e 6e 3b 0a 20 20 20 20 7a 52 65 63 20 3d 20 70  >n;.    zRec = p
12170 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 70 43 2d 3e  Reg->z;.    pC->
12180 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 28 70  cacheStatus = (p
12190 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47 5f 43 4c  Op->p5&OPFLAG_CL
121a0 45 41 52 43 41 43 48 45 29 20 3f 20 43 41 43 48  EARCACHE) ? CACH
121b0 45 5f 53 54 41 4c 45 20 3a 20 70 2d 3e 63 61 63  E_STALE : p->cac
121c0 68 65 43 74 72 3b 0a 20 20 20 20 61 73 73 65 72  heCtr;.    asser
121d0 74 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d  t( payloadSize==
121e0 30 20 7c 7c 20 7a 52 65 63 21 3d 30 20 29 3b 0a  0 || zRec!=0 );.
121f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
12200 43 6f 6e 73 69 64 65 72 20 74 68 65 20 72 6f 77  Consider the row
12210 20 74 6f 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20   to be NULL */. 
12220 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
12230 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66   0;.  }..  /* If
12240 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 69 73 20   payloadSize is 
12250 30 2c 20 74 68 65 6e 20 6a 75 73 74 20 73 74 6f  0, then just sto
12260 72 65 20 61 20 4e 55 4c 4c 2e 20 20 54 68 69 73  re a NULL.  This
12270 20 63 61 6e 20 68 61 70 70 65 6e 20 62 65 63 61   can happen beca
12280 75 73 65 20 6f 66 0a 20 20 2a 2a 20 6e 75 6c 6c  use of.  ** null
12290 52 6f 77 20 6f 72 20 62 65 63 61 75 73 65 20 6f  Row or because o
122a0 66 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  f a corrupt data
122b0 62 61 73 65 2e 20 2a 2f 0a 20 20 69 66 28 20 70  base. */.  if( p
122c0 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29 7b  ayloadSize==0 ){
122d0 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
122e0 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e  lag(pDest, MEM_N
122f0 75 6c 6c 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6f  ull);.    goto o
12300 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
12310 7d 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  }.  assert( db->
12320 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
12330 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20 29  MIT_LENGTH]>=0 )
12340 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53  ;.  if( payloadS
12350 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61  ize > (u32)db->a
12360 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
12370 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
12380 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
12390 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20    }..  nField = 
123a0 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 61 73  pC->nField;.  as
123b0 73 65 72 74 28 20 70 32 3c 6e 46 69 65 6c 64 20  sert( p2<nField 
123c0 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61 6e  );..  /* Read an
123d0 64 20 70 61 72 73 65 20 74 68 65 20 74 61 62 6c  d parse the tabl
123e0 65 20 68 65 61 64 65 72 2e 20 20 53 74 6f 72 65  e header.  Store
123f0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
12400 74 68 65 20 70 61 72 73 65 0a 20 20 2a 2a 20 69  the parse.  ** i
12410 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 68  nto the record h
12420 65 61 64 65 72 20 63 61 63 68 65 20 66 69 65 6c  eader cache fiel
12430 64 73 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72  ds of the cursor
12440 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65 20 3d  ..  */.  aType =
12450 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69 66   pC->aType;.  if
12460 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75  ( pC->cacheStatu
12470 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29  s==p->cacheCtr )
12480 7b 0a 20 20 20 20 61 4f 66 66 73 65 74 20 3d 20  {.    aOffset = 
12490 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 7d  pC->aOffset;.  }
124a0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
124b0 28 61 54 79 70 65 29 3b 0a 20 20 20 20 61 76 61  (aType);.    ava
124c0 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  il = 0;.    pC->
124d0 61 4f 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65  aOffset = aOffse
124e0 74 20 3d 20 26 61 54 79 70 65 5b 6e 46 69 65 6c  t = &aType[nFiel
124f0 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c  d];.    pC->payl
12500 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61  oadSize = payloa
12510 64 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63  dSize;.    pC->c
12520 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e  acheStatus = p->
12530 63 61 63 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f  cacheCtr;..    /
12540 2a 20 46 69 67 75 72 65 20 6f 75 74 20 68 6f 77  * Figure out how
12550 20 6d 61 6e 79 20 62 79 74 65 73 20 61 72 65 20   many bytes are 
12560 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  in the header */
12570 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b  .    if( zRec ){
12580 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 7a  .      zData = z
12590 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  Rec;.    }else{.
125a0 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73        if( pC->is
125b0 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 20  Index ){.       
125c0 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29   zData = (char*)
125d0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46  sqlite3BtreeKeyF
125e0 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
125f0 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  il);.      }else
12600 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
12610 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  = (char*)sqlite3
12620 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70  BtreeDataFetch(p
12630 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
12640 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20       }.      /* 
12650 49 66 20 4b 65 79 46 65 74 63 68 28 29 2f 44 61  If KeyFetch()/Da
12660 74 61 46 65 74 63 68 28 29 20 6d 61 6e 61 67 65  taFetch() manage
12670 64 20 74 6f 20 67 65 74 20 74 68 65 20 65 6e 74  d to get the ent
12680 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20  ire payload,.   
12690 20 20 20 2a 2a 20 73 61 76 65 20 74 68 65 20 70     ** save the p
126a0 61 79 6c 6f 61 64 20 69 6e 20 74 68 65 20 70 43  ayload in the pC
126b0 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 54  ->aRow cache.  T
126c0 68 61 74 20 77 69 6c 6c 20 73 61 76 65 20 75 73  hat will save us
126d0 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68   from.      ** h
126e0 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64  aving to make ad
126f0 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74  ditional calls t
12700 6f 20 66 65 74 63 68 20 74 68 65 20 63 6f 6e 74  o fetch the cont
12710 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20  ent portion of. 
12720 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f       ** the reco
12730 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  rd..      */.   
12740 20 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c     assert( avail
12750 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  >=0 );.      if(
12760 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20   payloadSize <= 
12770 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20  (u32)avail ){.  
12780 20 20 20 20 20 20 7a 52 65 63 20 3d 20 7a 44 61        zRec = zDa
12790 74 61 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  ta;.        pC->
127a0 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61 74  aRow = (u8*)zDat
127b0 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  a;.      }else{.
127c0 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
127d0 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
127e0 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20 66    }.    /* The f
127f0 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 20  ollowing assert 
12800 69 73 20 74 72 75 65 20 69 6e 20 61 6c 6c 20 63  is true in all c
12810 61 73 65 73 20 65 78 63 65 70 74 20 77 68 65 6e  ases except when
12820 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61 74 61  .    ** the data
12830 62 61 73 65 20 66 69 6c 65 20 68 61 73 20 62 65  base file has be
12840 65 6e 20 63 6f 72 72 75 70 74 65 64 20 65 78 74  en corrupted ext
12850 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20  ernally..    ** 
12860 20 20 20 61 73 73 65 72 74 28 20 7a 52 65 63 21     assert( zRec!
12870 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79  =0 || avail>=pay
12880 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76 61 69  loadSize || avai
12890 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73  l>=9 ); */.    s
128a0 7a 48 64 72 20 3d 20 67 65 74 56 61 72 69 6e 74  zHdr = getVarint
128b0 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f  32((u8*)zData, o
128c0 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20  ffset);..    /* 
128d0 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72  Make sure a corr
128e0 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73  upt database has
128f0 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e   not given us an
12900 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72   oversize header
12910 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73  ..    ** Do this
12920 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e   now to avoid an
12930 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79   oversize memory
12940 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20   allocation..   
12950 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65 20   **.    ** Type 
12960 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62  entries can be b
12970 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62  etween 1 and 5 b
12980 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20  ytes each.  But 
12990 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20  4 and 5 byte.   
129a0 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f   ** types use so
129b0 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65   much data space
129c0 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20   that there can 
129d0 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64  only be 4096 and
129e0 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68   32 of.    ** th
129f0 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  em, respectively
12a00 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75  .  So the maximu
12a10 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  m header length 
12a20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20  results from a. 
12a30 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70     ** 3-byte typ
12a40 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  e for each of th
12a50 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37  e maximum of 327
12a60 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20  68 columns plus 
12a70 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78 74  three.    ** ext
12a80 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65  ra bytes for the
12a90 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69   header length i
12aa0 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20  tself.  32768*3 
12ab0 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20  + 3 = 98307..   
12ac0 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66 73   */.    if( offs
12ad0 65 74 20 3e 20 39 38 33 30 37 20 29 7b 0a 20 20  et > 98307 ){.  
12ae0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
12af0 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
12b00 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12b10 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a 20  mn_out;.    }.. 
12b20 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65 20 69 6e     /* Compute in
12b30 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20   len the number 
12b40 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
12b50 20 77 65 20 6e 65 65 64 20 74 6f 20 72 65 61 64   we need to read
12b60 20 69 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a 2a   in order.    **
12b70 20 74 6f 20 67 65 74 20 6e 46 69 65 6c 64 20 74   to get nField t
12b80 79 70 65 20 76 61 6c 75 65 73 2e 20 20 6f 66 66  ype values.  off
12b90 73 65 74 20 69 73 20 61 6e 20 75 70 70 65 72 20  set is an upper 
12ba0 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73 2e 20 20  bound on this.  
12bb0 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46 69 65 6c  But.    ** nFiel
12bc0 64 20 6d 69 67 68 74 20 62 65 20 73 69 67 6e 69  d might be signi
12bd0 66 69 63 61 6e 74 6c 79 20 6c 65 73 73 20 74 68  ficantly less th
12be0 61 6e 20 74 68 65 20 74 72 75 65 20 6e 75 6d 62  an the true numb
12bf0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20 20  er of columns.  
12c00 20 20 2a 2a 20 69 6e 20 74 68 65 20 74 61 62 6c    ** in the tabl
12c10 65 2c 20 61 6e 64 20 69 6e 20 74 68 61 74 20 63  e, and in that c
12c20 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64 2b 33 20  ase, 5*nField+3 
12c30 6d 69 67 68 74 20 62 65 20 73 6d 61 6c 6c 65 72  might be smaller
12c40 20 74 68 61 6e 20 6f 66 66 73 65 74 2e 0a 20 20   than offset..  
12c50 20 20 2a 2a 20 57 65 20 77 61 6e 74 20 74 6f 20    ** We want to 
12c60 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20 69 6e 20  minimize len in 
12c70 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69 74 20 74  order to limit t
12c80 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6d  he size of the m
12c90 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 61 6c 6c  emory.    ** all
12ca0 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65 63 69 61  ocation, especia
12cb0 6c 6c 79 20 69 66 20 61 20 63 6f 72 72 75 70 74  lly if a corrupt
12cc0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
12cd0 61 73 20 63 61 75 73 65 64 20 6f 66 66 73 65 74  as caused offset
12ce0 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 6f 76  .    ** to be ov
12cf0 65 72 73 69 7a 65 64 2e 20 4f 66 66 73 65 74 20  ersized. Offset 
12d00 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 39 38  is limited to 98
12d10 33 30 37 20 61 62 6f 76 65 2e 20 20 42 75 74 20  307 above.  But 
12d20 39 38 33 30 37 20 6d 69 67 68 74 0a 20 20 20 20  98307 might.    
12d30 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65 65 64 20  ** still exceed 
12d40 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c  Robson memory al
12d50 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20  location limits 
12d60 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69 67 75 72  on some configur
12d70 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a 20 4f  ations..    ** O
12d80 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74 20 63  n systems that c
12d90 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74 65 20 6c  annot tolerate l
12da0 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  arge memory allo
12db0 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65 6c 64 2a  cations, nField*
12dc0 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69 6c 6c 20  5+3.    ** will 
12dd0 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63 68 20 73  likely be much s
12de0 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20 6e 46 69  maller since nFi
12df0 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20  eld will likely 
12e00 62 65 20 6c 65 73 73 20 74 68 61 6e 0a 20 20 20  be less than.   
12e10 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e 20 20 54   ** 20 or so.  T
12e20 68 69 73 20 69 6e 73 75 72 65 73 20 74 68 61 74  his insures that
12e30 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61   Robson memory a
12e40 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73  llocation limits
12e50 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e 6f 74 20   are.    ** not 
12e60 65 78 63 65 65 64 65 64 20 65 76 65 6e 20 66 6f  exceeded even fo
12e70 72 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  r corrupt databa
12e80 73 65 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a 2f  se files..    */
12e90 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46 69 65 6c  .    len = nFiel
12ea0 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20 69 66 28  d*5 + 3;.    if(
12eb0 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f 66 66 73   len > (int)offs
12ec0 65 74 20 29 20 6c 65 6e 20 3d 20 28 69 6e 74 29  et ) len = (int)
12ed0 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a 20  offset;..    /* 
12ee0 54 68 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f  The KeyFetch() o
12ef0 72 20 44 61 74 61 46 65 74 63 68 28 29 20 61 62  r DataFetch() ab
12f00 6f 76 65 20 61 72 65 20 66 61 73 74 20 61 6e 64  ove are fast and
12f10 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e   will get the en
12f20 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f  tire.    ** reco
12f30 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73  rd header in mos
12f40 74 20 63 61 73 65 73 2e 20 20 42 75 74 20 74 68  t cases.  But th
12f50 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20  ey will fail to 
12f60 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  get the complete
12f70 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68  .    ** record h
12f80 65 61 64 65 72 20 69 66 20 74 68 65 20 72 65 63  eader if the rec
12f90 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65 73 20  ord header does 
12fa0 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e  not fit on a sin
12fb0 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20  gle page.    ** 
12fc0 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20  in the B-Tree.  
12fd0 57 68 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e  When that happen
12fe0 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56 64  s, use sqlite3Vd
12ff0 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29  beMemFromBtree()
13000 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69   to.    ** acqui
13010 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  re the complete 
13020 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20  header text..   
13030 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65   */.    if( !zRe
13040 63 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e 20 29  c && avail<len )
13050 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61  {.      sMem.fla
13060 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 4d  gs = 0;.      sM
13070 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20 20  em.db = 0;.     
13080 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
13090 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
130a0 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70 43 2d  rsr, 0, len, pC-
130b0 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29  >isIndex, &sMem)
130c0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
130d0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
130e0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
130f0 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  umn_out;.      }
13100 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73  .      zData = s
13110 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20  Mem.z;.    }.   
13120 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38 20 2a   zEndHdr = (u8 *
13130 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20 20  )&zData[len];.  
13140 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a 29 26    zIdx = (u8 *)&
13150 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a 20  zData[szHdr];.. 
13160 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65 20 68     /* Scan the h
13170 65 61 64 65 72 20 61 6e 64 20 75 73 65 20 69 74  eader and use it
13180 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65 20   to fill in the 
13190 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66 66  aType[] and aOff
131a0 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72 72  set[].    ** arr
131b0 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d 20 77  ays.  aType[i] w
131c0 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ill contain the 
131d0 74 79 70 65 20 69 6e 74 65 67 65 72 20 66 6f 72  type integer for
131e0 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20 2a 2a   the i-th.    **
131f0 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66 66   column and aOff
13200 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74  set[i] will cont
13210 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74 20 66  ain the offset f
13220 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
13230 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  g.    ** of the 
13240 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20 73 74  record to the st
13250 61 72 74 20 6f 66 20 74 68 65 20 64 61 74 61 20  art of the data 
13260 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63 6f 6c  for the i-th col
13270 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 66  umn.    */.    f
13280 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69 65 6c 64  or(i=0; i<nField
13290 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
132a0 28 20 7a 49 64 78 3c 7a 45 6e 64 48 64 72 20 29  ( zIdx<zEndHdr )
132b0 7b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65  {.        aOffse
132c0 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20  t[i] = offset;. 
132d0 20 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 5b         if( zIdx[
132e0 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20  0]<0x80 ){.     
132f0 20 20 20 20 20 74 20 3d 20 7a 49 64 78 5b 30 5d       t = zIdx[0]
13300 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 49 64 78  ;.          zIdx
13310 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ++;.        }els
13320 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 49 64  e{.          zId
13330 78 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56  x += sqlite3GetV
13340 61 72 69 6e 74 33 32 28 7a 49 64 78 2c 20 26 74  arint32(zIdx, &t
13350 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
13360 20 20 20 20 20 61 54 79 70 65 5b 69 5d 20 3d 20       aType[i] = 
13370 74 3b 0a 20 20 20 20 20 20 20 20 73 7a 46 69 65  t;.        szFie
13380 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ld = sqlite3Vdbe
13390 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
133a0 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ;.        offset
133b0 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20   += szField;.   
133c0 20 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 3c       if( offset<
133d0 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54  szField ){  /* T
133e0 72 75 65 20 69 66 20 6f 66 66 73 65 74 20 6f 76  rue if offset ov
133f0 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20  erflows */.     
13400 20 20 20 20 20 7a 49 64 78 20 3d 20 26 7a 45 6e       zIdx = &zEn
13410 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72  dHdr[1];  /* For
13420 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ces SQLITE_CORRU
13430 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f 77 20  PT return below 
13440 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  */.          bre
13450 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
13460 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
13470 20 20 20 2f 2a 20 49 66 20 69 20 69 73 20 6c 65     /* If i is le
13480 73 73 20 74 68 61 74 20 6e 46 69 65 6c 64 2c 20  ss that nField, 
13490 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 66  then there are f
134a0 65 77 65 72 20 66 69 65 6c 64 73 20 69 6e 20 74  ewer fields in t
134b0 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 72  his.        ** r
134c0 65 63 6f 72 64 20 74 68 61 6e 20 53 65 74 4e 75  ecord than SetNu
134d0 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74  mColumns indicat
134e0 65 64 20 74 68 65 72 65 20 61 72 65 20 63 6f 6c  ed there are col
134f0 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20  umns in the.    
13500 20 20 20 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65      ** table. Se
13510 74 20 74 68 65 20 6f 66 66 73 65 74 20 66 6f 72  t the offset for
13520 20 61 6e 79 20 65 78 74 72 61 20 63 6f 6c 75 6d   any extra colum
13530 6e 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 69  ns not present i
13540 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65  n.        ** the
13550 20 72 65 63 6f 72 64 20 74 6f 20 30 2e 20 54 68   record to 0. Th
13560 69 73 20 74 65 6c 6c 73 20 63 6f 64 65 20 62 65  is tells code be
13570 6c 6f 77 20 74 6f 20 73 74 6f 72 65 20 74 68 65  low to store the
13580 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 0a 20   default value. 
13590 20 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 74 68         ** for th
135a0 65 20 63 6f 6c 75 6d 6e 20 69 6e 73 74 65 61 64  e column instead
135b0 20 6f 66 20 64 65 73 65 72 69 61 6c 69 7a 69 6e   of deserializin
135c0 67 20 61 20 76 61 6c 75 65 20 66 72 6f 6d 20 74  g a value from t
135d0 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
135e0 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 4f     */.        aO
135f0 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b 0a 20 20  ffset[i] = 0;.  
13600 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
13610 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
13620 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
13630 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d    sMem.flags = M
13640 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20 20 2f 2a  EM_Null;..    /*
13650 20 49 66 20 77 65 20 68 61 76 65 20 72 65 61 64   If we have read
13660 20 6d 6f 72 65 20 68 65 61 64 65 72 20 64 61 74   more header dat
13670 61 20 74 68 61 6e 20 77 61 73 20 63 6f 6e 74 61  a than was conta
13680 69 6e 65 64 20 69 6e 20 74 68 65 20 68 65 61 64  ined in the head
13690 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72 20 69 66  er,.    ** or if
136a0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
136b0 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70 65 61  last field appea
136c0 72 73 20 74 6f 20 62 65 20 70 61 73 74 20 74 68  rs to be past th
136d0 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 20 20 20  e end of the.   
136e0 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20 69   ** record, or i
136f0 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  f the end of the
13700 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70 65   last field appe
13710 61 72 73 20 74 6f 20 62 65 20 62 65 66 6f 72 65  ars to be before
13720 20 74 68 65 20 65 6e 64 0a 20 20 20 20 2a 2a 20   the end.    ** 
13730 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 28 77  of the record (w
13740 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64 73 20 70  hen all fields p
13750 72 65 73 65 6e 74 29 2c 20 74 68 65 6e 20 77 65  resent), then we
13760 20 6d 75 73 74 20 62 65 20 64 65 61 6c 69 6e 67   must be dealing
13770 20 0a 20 20 20 20 2a 2a 20 77 69 74 68 20 61 20   .    ** with a 
13780 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
13790 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
137a0 20 28 7a 49 64 78 20 3e 20 7a 45 6e 64 48 64 72   (zIdx > zEndHdr
137b0 29 20 7c 7c 20 28 6f 66 66 73 65 74 20 3e 20 70  ) || (offset > p
137c0 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20  ayloadSize).    
137d0 20 20 20 20 20 7c 7c 20 28 7a 49 64 78 3d 3d 7a       || (zIdx==z
137e0 45 6e 64 48 64 72 20 26 26 20 6f 66 66 73 65 74  EndHdr && offset
137f0 21 3d 70 61 79 6c 6f 61 64 53 69 7a 65 29 20 29  !=payloadSize) )
13800 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
13810 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
13820 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  ;.      goto op_
13830 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
13840 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20  }.  }..  /* Get 
13850 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72  the column infor
13860 6d 61 74 69 6f 6e 2e 20 49 66 20 61 4f 66 66 73  mation. If aOffs
13870 65 74 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65  et[p2] is non-ze
13880 72 6f 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 64  ro, then .  ** d
13890 65 73 65 72 69 61 6c 69 7a 65 20 74 68 65 20 76  eserialize the v
138a0 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65  alue from the re
138b0 63 6f 72 64 2e 20 49 66 20 61 4f 66 66 73 65 74  cord. If aOffset
138c0 5b 70 32 5d 20 69 73 20 7a 65 72 6f 2c 0a 20 20  [p2] is zero,.  
138d0 2a 2a 20 74 68 65 6e 20 74 68 65 72 65 20 61 72  ** then there ar
138e0 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20 66 69 65  e not enough fie
138f0 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
13900 64 20 74 6f 20 73 61 74 69 73 66 79 20 74 68 65  d to satisfy the
13910 0a 20 20 2a 2a 20 72 65 71 75 65 73 74 2e 20 20  .  ** request.  
13920 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73 65  In this case, se
13930 74 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c  t the value NULL
13940 20 6f 72 20 74 6f 20 50 34 20 69 66 20 50 34 20   or to P4 if P4 
13950 69 73 0a 20 20 2a 2a 20 61 20 70 6f 69 6e 74 65  is.  ** a pointe
13960 72 20 74 6f 20 61 20 4d 65 6d 20 6f 62 6a 65 63  r to a Mem objec
13970 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61 4f  t..  */.  if( aO
13980 66 66 73 65 74 5b 70 32 5d 20 29 7b 0a 20 20 20  ffset[p2] ){.   
13990 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
139a0 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66  ITE_OK );.    if
139b0 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20  ( zRec ){.      
139c0 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63  /* This is the c
139d0 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65  ommon case where
139e0 20 74 68 65 20 77 68 6f 6c 65 20 72 6f 77 20 66   the whole row f
139f0 69 74 73 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20  its on a single 
13a00 70 61 67 65 20 2a 2f 0a 20 20 20 20 20 20 56 64  page */.      Vd
13a10 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 44 65  beMemRelease(pDe
13a20 73 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  st);.      sqlit
13a30 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
13a40 28 75 38 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66  (u8 *)&zRec[aOff
13a50 73 65 74 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b  set[p2]], aType[
13a60 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  p2], pDest);.   
13a70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
13a80 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70   This branch hap
13a90 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 74  pens only when t
13aa0 68 65 20 72 6f 77 20 6f 76 65 72 66 6c 6f 77 73  he row overflows
13ab0 20 6f 6e 74 6f 20 6d 75 6c 74 69 70 6c 65 20 70   onto multiple p
13ac0 61 67 65 73 20 2a 2f 0a 20 20 20 20 20 20 74 20  ages */.      t 
13ad0 3d 20 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 20  = aType[p2];.   
13ae0 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20     if( (pOp->p5 
13af0 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  & (OPFLAG_LENGTH
13b00 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ARG|OPFLAG_TYPEO
13b10 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20  FARG))!=0.      
13b20 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28   && ((t>=12 && (
13b30 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70  t&1)==0) || (pOp
13b40 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59  ->p5 & OPFLAG_TY
13b50 50 45 4f 46 41 52 47 29 21 3d 30 29 0a 20 20 20  PEOFARG)!=0).   
13b60 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a     ){.        /*
13b70 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65   Content is irre
13b80 6c 65 76 61 6e 74 20 66 6f 72 20 74 68 65 20 74  levant for the t
13b90 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e  ypeof() function
13ba0 20 61 6e 64 20 66 6f 72 0a 20 20 20 20 20 20 20   and for.       
13bb0 20 2a 2a 20 74 68 65 20 6c 65 6e 67 74 68 28 58   ** the length(X
13bc0 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20  ) function if X 
13bd0 69 73 20 61 20 62 6c 6f 62 2e 20 20 53 6f 20 77  is a blob.  So w
13be0 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20  e might as well 
13bf0 75 73 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 62  use.        ** b
13c00 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74  ogus content rat
13c10 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67  her than reading
13c20 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69   content from di
13c30 73 6b 2e 20 20 4e 55 4c 4c 20 77 6f 72 6b 73 0a  sk.  NULL works.
13c40 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 74          ** for t
13c50 65 78 74 20 61 6e 64 20 62 6c 6f 62 20 61 6e 64  ext and blob and
13c60 20 77 68 61 74 65 76 65 72 20 69 73 20 69 6e 20   whatever is in 
13c70 74 68 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 36  the payloadSize6
13c80 34 20 76 61 72 69 61 62 6c 65 0a 20 20 20 20 20  4 variable.     
13c90 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b 20     ** will work 
13ca0 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67 20 65  for everything e
13cb0 6c 73 65 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  lse. */.        
13cc0 7a 44 61 74 61 20 3d 20 74 3c 31 32 20 3f 20 28  zData = t<12 ? (
13cd0 63 68 61 72 2a 29 26 70 61 79 6c 6f 61 64 53 69  char*)&payloadSi
13ce0 7a 65 36 34 20 3a 20 30 3b 0a 20 20 20 20 20 20  ze64 : 0;.      
13cf0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6c  }else{.        l
13d00 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
13d10 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
13d20 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
13d30 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d  3VdbeMemMove(&sM
13d40 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  em, pDest);.    
13d50 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
13d60 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
13d70 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b  (pCrsr, aOffset[
13d80 70 32 5d 2c 20 6c 65 6e 2c 20 20 70 43 2d 3e 69  p2], len,  pC->i
13d90 73 49 6e 64 65 78 2c 0a 20 20 20 20 20 20 20 20  sIndex,.        
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13db0 20 20 20 20 20 20 20 20 20 20 20 20 20 26 73 4d               &sM
13dc0 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  em);.        if(
13dd0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
13de0 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
13df0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
13e00 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
13e10 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a    zData = sMem.z
13e20 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
13e30 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13e40 6c 47 65 74 28 28 75 38 2a 29 7a 44 61 74 61 2c  lGet((u8*)zData,
13e50 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
13e60 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e 65 6e 63  }.    pDest->enc
13e70 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d   = encoding;.  }
13e80 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 4f  else{.    if( pO
13e90 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
13ea0 4d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  M ){.      sqlit
13eb0 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
13ec0 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d  Copy(pDest, pOp-
13ed0 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74  >p4.pMem, MEM_St
13ee0 61 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65  atic);.    }else
13ef0 7b 0a 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79  {.      MemSetTy
13f00 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45  peFlag(pDest, ME
13f10 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 7d 0a 20  M_Null);.    }. 
13f20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 64   }..  /* If we d
13f30 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
13f40 61 74 65 64 20 73 70 61 63 65 20 74 6f 20 68 6f  ated space to ho
13f50 6c 64 20 74 68 65 20 64 61 74 61 20 28 69 6e 20  ld the data (in 
13f60 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  the.  ** sqlite3
13f70 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
13f80 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74  () call above) t
13f90 68 65 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e  hen transfer con
13fa0 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a  trol of that.  *
13fb0 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
13fc0 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f 76  located space ov
13fd0 65 72 20 74 6f 20 74 68 65 20 70 44 65 73 74 20  er to the pDest 
13fe0 73 74 72 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20  structure..  ** 
13ff0 54 68 69 73 20 70 72 65 76 65 6e 74 73 20 61 20  This prevents a 
14000 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a  memory copy..  *
14010 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61  /.  if( sMem.zMa
14020 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73 73 65  lloc ){.    asse
14030 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d  rt( sMem.z==sMem
14040 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20  .zMalloc );.    
14050 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d  assert( !(pDest-
14060 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
14070 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
14080 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20   !(pDest->flags 
14090 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  & (MEM_Blob|MEM_
140a0 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e  Str)) || pDest->
140b0 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20  z==sMem.z );.   
140c0 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d   pDest->flags &=
140d0 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d   ~(MEM_Ephem|MEM
140e0 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 70 44  _Static);.    pD
140f0 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  est->flags |= ME
14100 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44 65 73  M_Term;.    pDes
14110 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20  t->z = sMem.z;. 
14120 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f     pDest->zMallo
14130 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  c = sMem.zMalloc
14140 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71  ;.  }..  rc = sq
14150 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65  lite3VdbeMemMake
14160 57 72 69 74 65 61 62 6c 65 28 70 44 65 73 74 29  Writeable(pDest)
14170 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  ;..op_column_out
14180 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  :.  UPDATE_MAX_B
14190 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
141a0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
141b0 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
141c0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
141d0 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74   Opcode: Affinit
141e0 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  y P1 P2 * P4 *.*
141f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
14200 6e 69 74 79 28 72 5b 50 31 5d 29 20 4e 3d 50 32  nity(r[P1]) N=P2
14210 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66  .**.** Apply aff
14220 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e  inities to a ran
14230 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65  ge of P2 registe
14240 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  rs starting with
14250 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73   P1..**.** P4 is
14260 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
14270 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
14280 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68  long. The nth ch
14290 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
142a0 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
142b0 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
142c0 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
142d0 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
142e0 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79  he nth.** memory
142f0 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e   cell in the ran
14300 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ge..*/.case OP_A
14310 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e  ffinity: {.  con
14320 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  st char *zAffini
14330 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66  ty;   /* The aff
14340 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
14350 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41  ied */.  char cA
14360 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ff;             
14370 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68    /* A single ch
14380 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e  aracter of affin
14390 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e  ity */..  zAffin
143a0 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
143b0 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
143c0 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73  nity!=0 );.  ass
143d0 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70  ert( zAffinity[p
143e0 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20  Op->p2]==0 );.  
143f0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
14400 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20  ->p1];.  while( 
14410 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e  (cAff = *(zAffin
14420 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20  ity++))!=0 ){.  
14430 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c    assert( pIn1 <
14440 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e  = &p->aMem[(p->n
14450 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d  Mem-p->nCursor)]
14460 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
14470 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
14480 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c   );.    ExpandBl
14490 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 61 70  ob(pIn1);.    ap
144a0 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
144b0 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67  , cAff, encoding
144c0 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
144d0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
144e0 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65  * Opcode: MakeRe
144f0 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34  cord P1 P2 P3 P4
14500 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
14510 72 5b 50 33 5d 3d 72 65 63 28 72 5b 50 31 5d 2e  r[P3]=rec(r[P1].
14520 2e 29 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 43 6f  .) N=P2.**.** Co
14530 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65  nvert P2 registe
14540 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  rs beginning wit
14550 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72  h P1 into the [r
14560 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a  ecord format].**
14570 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72   use as a data r
14580 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62  ecord in a datab
14590 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20  ase table or as 
145a0 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69  a key.** in an i
145b0 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f  ndex.  The OP_Co
145c0 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20  lumn opcode can 
145d0 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72  decode the recor
145e0 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50  d later..**.** P
145f0 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e  4 may be a strin
14600 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61  g that is P2 cha
14610 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54  racters long.  T
14620 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72  he nth character
14630 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
14640 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
14650 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
14660 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
14670 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a  sed for the nth.
14680 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  ** field of the 
14690 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  index key..**.**
146a0 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f   The mapping fro
146b0 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61  m character to a
146c0 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e  ffinity is given
146d0 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41   by the SQLITE_A
146e0 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65  FF_.** macros de
146f0 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49  fined in sqliteI
14700 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  nt.h..**.** If P
14710 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61  4 is NULL then a
14720 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20  ll index fields 
14730 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74  have the affinit
14740 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20  y NONE..*/.case 
14750 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b  OP_MakeRecord: {
14760 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72  .  u8 *zNewRecor
14770 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62  d;        /* A b
14780 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68  uffer to hold th
14790 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e  e data for the n
147a0 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d  ew record */.  M
147b0 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20  em *pRec;       
147c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
147d0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34   record */.  u64
147e0 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20   nData;         
147f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14800 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73   bytes of data s
14810 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
14820 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  dr;             
14830 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
14840 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70  tes of header sp
14850 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ace */.  i64 nBy
14860 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
14870 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65  /* Data space re
14880 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20  quired for this 
14890 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
148a0 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20  nZero;          
148b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
148c0 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
148d0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
148e0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61  ord */.  int nVa
148f0 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  rint;           
14900 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
14910 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a  es in a varint *
14920 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74  /.  u32 serial_t
14930 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79  ype;       /* Ty
14940 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65  pe field */.  Me
14950 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20  m *pData0;      
14960 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69       /* First fi
14970 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e  eld to be combin
14980 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f  ed into the reco
14990 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61  rd */.  Mem *pLa
149a0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
149b0 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20  * Last field of 
149c0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
149d0 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
149e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
149f0 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
14a00 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68  e record */.  ch
14a10 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20  ar *zAffinity;  
14a20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
14a30 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20  nity string for 
14a40 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
14a50 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  int file_format;
14a60 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66         /* File f
14a70 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72  ormat to use for
14a80 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
14a90 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
14aa0 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75        /* Space u
14ab0 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72  sed in zNewRecor
14ac0 64 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  d[] */.  int len
14ad0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14ae0 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66  /* Length of a f
14af0 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73  ield */..  /* As
14b00 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72  suming the recor
14b10 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65  d contains N fie
14b20 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20  lds, the record 
14b30 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a  format looks.  *
14b40 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a  * like this:.  *
14b50 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.  ** ---------
14b60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
14ba0 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20    ** | hdr-size 
14bb0 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20  | type 0 | type 
14bc0 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e  1 | ... | type N
14bd0 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e  -1 | data0 | ...
14be0 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20   | data N-1 | . 
14bf0 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
14c00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
14c40 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69  *.  ** Data(0) i
14c50 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
14c60 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28  ister P1.  Data(
14c70 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65  1) comes from re
14c80 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a  gister P1+1.  **
14c90 20 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20   and so froth.. 
14ca0 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79   **.  ** Each ty
14cb0 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61  pe field is a va
14cc0 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e  rint representin
14cd0 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70  g the serial typ
14ce0 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63  e of the .  ** c
14cf0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74  orresponding dat
14d00 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73  a element (see s
14d10 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
14d20 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a  Type()). The.  *
14d30 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64  * hdr-size field
14d40 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e   is also a varin
14d50 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f  t which is the o
14d60 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
14d70 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66  eginning.  ** of
14d80 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64   the record to d
14d90 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61  ata0..  */.  nDa
14da0 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ta = 0;         
14db0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
14dc0 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
14dd0 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20   */.  nHdr = 0; 
14de0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14df0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68  er of bytes of h
14e00 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20  eader space */. 
14e10 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20   nZero = 0;     
14e20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14e30 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
14e40 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
14e50 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64  cord */.  nField
14e60 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41   = pOp->p1;.  zA
14e70 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
14e80 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  4.z;.  assert( n
14e90 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e  Field>0 && pOp->
14ea0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
14eb0 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d  nField<=(p->nMem
14ec0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
14ed0 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d  ;.  pData0 = &aM
14ee0 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46  em[nField];.  nF
14ef0 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ield = pOp->p2;.
14f00 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61    pLast = &pData
14f10 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66  0[nField-1];.  f
14f20 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e  ile_format = p->
14f30 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
14f40 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69  at;..  /* Identi
14f50 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  fy the output re
14f60 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65  gister */.  asse
14f70 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
14f80 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p1 || pOp->p3>=
14f90 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20  pOp->p1+pOp->p2 
14fa0 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
14fb0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
14fc0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
14fd0 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4c  , pOut);..  /* L
14fe0 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20  oop through the 
14ff0 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69  elements that wi
15000 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72  ll make up the r
15010 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a  ecord to figure.
15020 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63    ** out how muc
15030 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69  h space is requi
15040 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20  red for the new 
15050 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 66  record..  */.  f
15060 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
15070 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
15080 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  c++){.    assert
15090 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
150a0 63 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 41  c) );.    if( zA
150b0 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20  ffinity ){.     
150c0 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
150d0 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70  Rec, zAffinity[p
150e0 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63  Rec-pData0], enc
150f0 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20  oding);.    }.  
15100 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
15110 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70 52  s&MEM_Zero && pR
15120 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20 20  ec->n>0 ){.     
15130 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
15140 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b  xpandBlob(pRec);
15150 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72 69 61  .    }.    seria
15160 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33  l_type = sqlite3
15170 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70  VdbeSerialType(p
15180 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74  Rec, file_format
15190 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c  );.    len = sql
151a0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
151b0 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70  peLen(serial_typ
151c0 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d  e);.    nData +=
151d0 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20 2b   len;.    nHdr +
151e0 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
151f0 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
15200 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66  .    if( pRec->f
15210 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
15220 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79  ){.      /* Only
15230 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c 65   pure zero-fille
15240 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65 20 69  d BLOBs can be i
15250 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f 70 63  nput to this Opc
15260 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57 65  ode..      ** We
15270 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c   do not allow bl
15280 6f 62 73 20 77 69 74 68 20 61 20 70 72 65 66 69  obs with a prefi
15290 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69 6c  x and a zero-fil
152a0 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20 20  led tail. */.   
152b0 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63     nZero += pRec
152c0 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d  ->u.nZero;.    }
152d0 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29 7b 0a  else if( len ){.
152e0 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b        nZero = 0;
152f0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
15300 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61 6c   Add the initial
15310 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20 61   header varint a
15320 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69 7a  nd total the siz
15330 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20 6e  e */.  nHdr += n
15340 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33  Varint = sqlite3
15350 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b  VarintLen(nHdr);
15360 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73  .  if( nVarint<s
15370 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
15380 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e 48 64  nHdr) ){.    nHd
15390 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65  r++;.  }.  nByte
153a0 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a   = nHdr+nData-nZ
153b0 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ero;.  if( nByte
153c0 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
153d0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
153e0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
153f0 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _big;.  }..  /* 
15400 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75  Make sure the ou
15410 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61  tput register ha
15420 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65  s a buffer large
15430 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65   enough to store
15440 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72   .  ** the new r
15450 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75  ecord. The outpu
15460 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d  t register (pOp-
15470 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  >p3) is not allo
15480 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f  wed to.  ** be o
15490 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  ne of the input 
154a0 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75  registers (becau
154b0 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  se the following
154c0 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
154d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
154e0 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72  () could clobber
154f0 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72   the value befor
15500 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20  e it is used).. 
15510 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
15520 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
15530 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30  t, (int)nByte, 0
15540 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
15550 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77  _mem;.  }.  zNew
15560 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70  Record = (u8 *)p
15570 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72  Out->z;..  /* Wr
15580 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a  ite the record *
15590 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e  /.  i = putVarin
155a0 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20  t32(zNewRecord, 
155b0 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52 65  nHdr);.  for(pRe
155c0 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d  c=pData0; pRec<=
155d0 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a  pLast; pRec++){.
155e0 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
155f0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
15600 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69  ialType(pRec, fi
15610 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20  le_format);.    
15620 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32  i += putVarint32
15630 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c  (&zNewRecord[i],
15640 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20   serial_type);  
15650 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
15660 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72 28  pe */.  }.  for(
15670 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
15680 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
15690 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20 64 61  ){  /* serial da
156a0 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 73  ta */.    i += s
156b0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
156c0 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
156d0 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74 65 2d  i], (int)(nByte-
156e0 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66 6f  i), pRec,file_fo
156f0 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73  rmat);.  }.  ass
15700 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b  ert( i==nByte );
15710 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
15720 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
15730 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
15740 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
15750 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
15760 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
15770 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d  = MEM_Blob | MEM
15780 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78 44  _Dyn;.  pOut->xD
15790 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e 5a  el = 0;.  if( nZ
157a0 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  ero ){.    pOut-
157b0 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f  >u.nZero = nZero
157c0 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
157d0 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20  s |= MEM_Zero;. 
157e0 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d   }.  pOut->enc =
157f0 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f   SQLITE_UTF8;  /
15800 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c  * In case the bl
15810 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65  ob is ever conve
15820 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a  rted to text */.
15830 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
15840 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b  (pOp->p3, pOut);
15850 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
15860 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
15870 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
15880 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32  ode: Count P1 P2
15890 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
158a0 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28  is: r[P2]=count(
158b0 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ).**.** Store th
158c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
158d0 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20  ies (an integer 
158e0 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61  value) in the ta
158f0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a  ble or index .**
15900 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
15910 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72  r P1 in register
15920 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53   P2.*/.#ifndef S
15930 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
15940 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f  COUNT.case OP_Co
15950 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  unt: {         /
15960 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
15970 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72  e */.  i64 nEntr
15980 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  y;.  BtCursor *p
15990 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d  Crsr;..  pCrsr =
159a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
159b0 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  1]->pCursor;.  i
159c0 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 29  f( ALWAYS(pCrsr)
159d0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
159e0 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70  ite3BtreeCount(p
159f0 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a  Crsr, &nEntry);.
15a00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e    }else{.    nEn
15a10 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70  try = 0;.  }.  p
15a20 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72  Out->u.i = nEntr
15a30 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  y;.  break;.}.#e
15a40 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
15a50 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20   Savepoint P1 * 
15a60 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65  * P4 *.**.** Ope
15a70 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f  n, release or ro
15a80 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70  llback the savep
15a90 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61  oint named by pa
15aa0 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65  rameter P4, depe
15ab0 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20  nding.** on the 
15ac0 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20  value of P1. To 
15ad0 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70  open a new savep
15ae0 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20  oint, P1==0. To 
15af0 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
15b00 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20   an.** existing 
15b10 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31  savepoint, P1==1
15b20 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  , or to rollback
15b30 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76   an existing sav
15b40 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f  epoint P1==2..*/
15b50 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69  .case OP_Savepoi
15b60 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20  nt: {.  int p1; 
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b80 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
15b90 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a   of P1 operand *
15ba0 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bc0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73      /* Name of s
15bd0 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e  avepoint */.  in
15be0 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70  t nName;.  Savep
15bf0 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61  oint *pNew;.  Sa
15c00 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
15c10 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  int;.  Savepoint
15c20 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53   *pTmp;.  int iS
15c30 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20  avepoint;.  int 
15c40 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  ii;..  p1 = pOp-
15c50 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70  >p1;.  zName = p
15c60 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20  Op->p4.z;..  /* 
15c70 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
15c80 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  p1 parameter is 
15c90 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74  valid. Also that
15ca0 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
15cb0 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61  open.  ** transa
15cc0 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72  ction, then ther
15cd0 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20  e cannot be any 
15ce0 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a  savepoints. .  *
15cf0 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  /.  assert( db->
15d00 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c  pSavepoint==0 ||
15d10 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
15d20 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
15d30 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
15d40 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  GIN||p1==SAVEPOI
15d50 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d  NT_RELEASE||p1==
15d60 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
15d70 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  CK );.  assert( 
15d80 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c  db->pSavepoint |
15d90 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  | db->isTransact
15da0 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ionSavepoint==0 
15db0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65  );.  assert( che
15dc0 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
15dd0 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  (db) );.  assert
15de0 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
15df0 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56  ;..  if( p1==SAV
15e00 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a  EPOINT_BEGIN ){.
15e10 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62      if( db->nVdb
15e20 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
15e30 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70    /* A new savep
15e40 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63  oint cannot be c
15e50 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20  reated if there 
15e60 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65  are active write
15e70 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65   .      ** state
15e80 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e  ments (i.e. open
15e90 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72   read/write incr
15ea0 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e  emental blob han
15eb0 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  dles)..      */.
15ec0 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
15ed0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
15ee0 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
15ef0 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d  open savepoint -
15f00 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
15f10 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
15f20 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
15f30 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
15f40 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
15f50 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74     nName = sqlit
15f60 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65  e3Strlen30(zName
15f70 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
15f80 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
15f90 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68  ABLE.      /* Th
15fa0 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76  is call is Ok ev
15fb0 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70  en if this savep
15fc0 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79  oint is actually
15fd0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20   a transaction. 
15fe0 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
15ff0 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65  t (and therefore
16000 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d   should not prom
16010 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29  pt xSavepoint())
16020 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20   callbacks..    
16030 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20    ** If this is 
16040 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
16050 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
16060 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72  ened, it is guar
16070 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20  anteed.      ** 
16080 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54  that the db->aVT
16090 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20  rans[] array is 
160a0 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20  empty.  */.     
160b0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74   assert( db->aut
160c0 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
160d0 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a  ->nVTrans==0 );.
160e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
160f0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
16100 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
16110 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  GIN,.           
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16130 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
16140 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69  ent+db->nSavepoi
16150 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  nt);.      if( r
16160 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
16170 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
16180 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a  _error;.#endif..
16190 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20        /* Create 
161a0 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  a new savepoint 
161b0 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20  structure. */.  
161c0 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74      pNew = sqlit
161d0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
161e0 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69  , sizeof(Savepoi
161f0 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  nt)+nName+1);.  
16200 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a      if( pNew ){.
16210 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e          pNew->zN
16220 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70  ame = (char *)&p
16230 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20  New[1];.        
16240 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61  memcpy(pNew->zNa
16250 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65  me, zName, nName
16260 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20  +1);.    .      
16270 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
16280 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63   no open transac
16290 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20  tion, then mark 
162a0 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61  this as a specia
162b0 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72  l.        ** "tr
162c0 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
162d0 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20  int". */.       
162e0 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d   if( db->autoCom
162f0 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  mit ){.         
16300 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
16310 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64  = 0;.          d
16320 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
16330 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20  Savepoint = 1;. 
16340 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
16350 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
16360 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20  epoint++;.      
16370 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20    }.    .       
16380 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77   /* Link the new
16390 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20   savepoint into 
163a0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
163b0 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20  dle's list. */. 
163c0 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65         pNew->pNe
163d0 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  xt = db->pSavepo
163e0 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
163f0 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e  >pSavepoint = pN
16400 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77  ew;.        pNew
16410 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
16420 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  = db->nDeferredC
16430 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  ons;.        pNe
16440 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  w->nDeferredImmC
16450 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
16460 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
16470 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
16480 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e  e{.    iSavepoin
16490 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46  t = 0;..    /* F
164a0 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61  ind the named sa
164b0 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72  vepoint. If ther
164c0 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76  e is no such sav
164d0 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a  epoint, then an.
164e0 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20      ** an error 
164f0 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  is returned to t
16500 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20  he user.  */.   
16510 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76   for(.      pSav
16520 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61  epoint = db->pSa
16530 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20  vepoint; .      
16540 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71  pSavepoint && sq
16550 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61  lite3StrICmp(pSa
16560 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20  vepoint->zName, 
16570 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53  zName);.      pS
16580 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
16590 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20  point->pNext.   
165a0 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70   ){.      iSavep
165b0 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  oint++;.    }.  
165c0 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e    if( !pSavepoin
165d0 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
165e0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
165f0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f  zErrMsg, db, "no
16600 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a   such savepoint:
16610 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20   %s", zName);.  
16620 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
16630 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65  ERROR;.    }else
16640 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
16650 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56  ite>0 && p1==SAV
16660 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
16670 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73  {.      /* It is
16680 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
16690 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
166a0 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66  ) a savepoint if
166b0 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20   there are .    
166c0 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74    ** active writ
166d0 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20  e statements..  
166e0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
166f0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
16700 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a  ->zErrMsg, db, .
16710 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
16720 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e  release savepoin
16730 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  t - SQL statemen
16740 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 0a  ts in progress".
16750 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72        );.      r
16760 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
16770 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20  .    }else{..   
16780 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20     /* Determine 
16790 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
167a0 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
167b0 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20  tion savepoint. 
167c0 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20  If so,.      ** 
167d0 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45  and this is a RE
167e0 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74  LEASE command, t
167f0 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  hen the current 
16800 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20  transaction .   
16810 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74     ** is committ
16820 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ed. .      */.  
16830 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61      int isTransa
16840 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69  ction = pSavepoi
16850 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20  nt->pNext==0 && 
16860 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
16870 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  nSavepoint;.    
16880 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74    if( isTransact
16890 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50  ion && p1==SAVEP
168a0 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
168b0 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20          if( (rc 
168c0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
168d0 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
168e0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
168f0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
16900 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
16910 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
16920 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
16930 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
16940 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
16950 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
16960 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
16970 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61  .          db->a
16980 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20  utoCommit = 0;. 
16990 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d           p->rc =
169a0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
169b0 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  Y;.          got
169c0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
169d0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
169e0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
169f0 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b  onSavepoint = 0;
16a00 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d  .        rc = p-
16a10 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  >rc;.      }else
16a20 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70  {.        iSavep
16a30 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  oint = db->nSave
16a40 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69  point - iSavepoi
16a50 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt - 1;.        
16a60 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
16a70 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
16a80 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
16a90 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
16aa0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
16ab0 20 73 71 6c 69 74 65 33 42 74 72 65 65 54 72 69   sqlite3BtreeTri
16ac0 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e  pAllCursors(db->
16ad0 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 53 51 4c  aDb[ii].pBt, SQL
16ae0 49 54 45 5f 41 42 4f 52 54 29 3b 0a 20 20 20 20  ITE_ABORT);.    
16af0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
16b00 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69  }.        for(ii
16b10 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
16b20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
16b30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
16b40 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e  eeSavepoint(db->
16b50 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c  aDb[ii].pBt, p1,
16b60 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
16b70 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
16b80 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
16b90 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
16ba0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
16bb0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
16bc0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
16bd0 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
16be0 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28 64  T_ROLLBACK && (d
16bf0 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
16c00 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d  InternChanges)!=
16c10 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
16c20 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
16c30 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
16c40 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  b);.          sq
16c50 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
16c60 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
16c70 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
16c80 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d  db->flags = (db-
16c90 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f  >flags | SQLITE_
16ca0 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a  InternChanges);.
16cb0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16cc0 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65  }.  .      /* Re
16cd0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
16ce0 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45  her this is a RE
16cf0 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43  LEASE or ROLLBAC
16d00 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a  K, destroy all .
16d10 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
16d20 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64  nts nested insid
16d30 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69  e of the savepoi
16d40 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
16d50 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77  d on. */.      w
16d60 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70  hile( db->pSavep
16d70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74  oint!=pSavepoint
16d80 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70   ){.        pTmp
16d90 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
16da0 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
16db0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70  Savepoint = pTmp
16dc0 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
16dd0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
16de0 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20  b, pTmp);.      
16df0 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
16e00 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
16e10 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61     /* If it is a
16e20 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64   RELEASE, then d
16e30 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70  estroy the savep
16e40 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
16e50 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  ted on .      **
16e60 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61   too. If it is a
16e70 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68   ROLLBACK TO, th
16e80 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65  en set the numbe
16e90 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20  r of deferred . 
16ea0 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69       ** constrai
16eb0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72  nt violations pr
16ec0 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
16ed0 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c  abase to the val
16ee0 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20  ue stored.      
16ef0 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65  ** when the save
16f00 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65  point was create
16f10 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  d.  */.      if(
16f20 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
16f30 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
16f40 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70    assert( pSavep
16f50 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70  oint==db->pSavep
16f60 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  oint );.        
16f70 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
16f80 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
16f90 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
16fa0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53  te3DbFree(db, pS
16fb0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
16fc0 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
16fd0 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
16fe0 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
16ff0 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t--;.        }. 
17000 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
17010 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
17020 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  dCons = pSavepoi
17030 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  nt->nDeferredCon
17040 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  s;.        db->n
17050 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
17060 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
17070 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
17080 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69        }..      i
17090 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
170a0 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  n ){.        rc 
170b0 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
170c0 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69  epoint(db, p1, i
170d0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
170e0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
170f0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
17100 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17110 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
17120 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   }..  break;.}..
17130 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43  /* Opcode: AutoC
17140 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20  ommit P1 P2 * * 
17150 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
17160 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f  database auto-co
17170 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20  mmit flag to P1 
17180 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20  (1 or 0). If P2 
17190 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a  is true, roll.**
171a0 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e   back any curren
171b0 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65  tly active btree
171c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49   transactions. I
171d0 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20  f there are any 
171e0 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61  active.** VMs (a
171f0 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f  part from this o
17200 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c  ne), then a ROLL
17210 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43  BACK fails.  A C
17220 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a  OMMIT fails if.*
17230 2a 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  * there are acti
17240 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f  ve writing VMs o
17250 72 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61  r active VMs tha
17260 74 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63  t use shared cac
17270 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  he..**.** This i
17280 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65  nstruction cause
17290 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74  s the VM to halt
172a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74  ..*/.case OP_Aut
172b0 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74  oCommit: {.  int
172c0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
172d0 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62  it;.  int iRollb
172e0 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f  ack;.  int turnO
172f0 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64 41  nAC;..  desiredA
17300 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d  utoCommit = pOp-
17310 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b  >p1;.  iRollback
17320 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75   = pOp->p2;.  tu
17330 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65 64  rnOnAC = desired
17340 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64  AutoCommit && !d
17350 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  b->autoCommit;. 
17360 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
17370 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
17380 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17390 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
173a0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
173b0 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c  mmit==1 || iRoll
173c0 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73  back==0 );.  ass
173d0 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63  ert( db->nVdbeAc
173e0 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74  tive>0 );  /* At
173f0 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20   least this one 
17400 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a  VM is active */.
17410 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
17420 52 65 61 64 65 72 20 29 3b 0a 0a 23 69 66 20 30  Reader );..#if 0
17430 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20  .  if( turnOnAC 
17440 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20  && iRollback && 
17450 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e  db->nVdbeActive>
17460 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  1 ){.    /* If t
17470 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
17480 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c  implements a ROL
17490 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20  LBACK and other 
174a0 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73  VMs are.    ** s
174b0 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e  till running, an
174c0 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  d a transaction 
174d0 69 73 20 61 63 74 69 76 65 2c 20 72 65 74 75 72  is active, retur
174e0 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
174f0 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61  ating.    ** tha
17500 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
17510 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
17520 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  rst. .    */.   
17530 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
17540 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
17550 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  b, "cannot rollb
17560 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
17570 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
17580 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
17590 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72  rogress");.    r
175a0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
175b0 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
175c0 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26    if( turnOnAC &
175d0 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20  & !iRollback && 
175e0 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
175f0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
17600 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
17610 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d  mplements a COMM
17620 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73  IT and other VMs
17630 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20   are writing.   
17640 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72   ** return an er
17650 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ror indicating t
17660 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
17670 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
17680 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20  first. .    */. 
17690 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
176a0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
176b0 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d   db, "cannot com
176c0 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  mit transaction 
176d0 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
176e0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
176f0 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72  rogress");.    r
17700 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
17710 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73  .  }else if( des
17720 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d  iredAutoCommit!=
17730 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
17740 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62  {.    if( iRollb
17750 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ack ){.      ass
17760 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
17770 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20  Commit==1 );.   
17780 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61     sqlite3Rollba
17790 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45  ckAll(db, SQLITE
177a0 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29  _ABORT_ROLLBACK)
177b0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
177c0 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
177d0 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20  }else if( (rc = 
177e0 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
177f0 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
17800 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
17810 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
17820 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17830 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
17840 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74  = (u8)desiredAut
17850 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69  oCommit;.      i
17860 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
17870 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
17880 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d  SY ){.        p-
17890 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
178a0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
178b0 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65   = (u8)(1-desire
178c0 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20  dAutoCommit);.  
178d0 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
178e0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
178f0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
17900 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
17910 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
17920 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
17930 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  nt==0 );.    sql
17940 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
17950 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28  nts(db);.    if(
17960 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   p->rc==SQLITE_O
17970 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
17980 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20  SQLITE_DONE;.   
17990 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
179a0 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
179b0 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20  .    }.    goto 
179c0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d  vdbe_return;.  }
179d0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
179e0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
179f0 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20  ErrMsg, db,.    
17a00 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74      (!desiredAut
17a10 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74  oCommit)?"cannot
17a20 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63   start a transac
17a30 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72  tion within a tr
17a40 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20  ansaction":(.   
17a50 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29       (iRollback)
17a60 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
17a70 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
17a80 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
17a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17aa0 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
17ab0 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
17ac0 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
17ad0 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
17ae0 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
17af0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
17b00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
17b10 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20  saction P1 P2 * 
17b20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20  * *.**.** Begin 
17b30 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  a transaction.  
17b40 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  The transaction 
17b50 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d  ends when a Comm
17b60 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a  it or Rollback.*
17b70 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f  * opcode is enco
17b80 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64  untered.  Depend
17b90 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f  ing on the ON CO
17ba0 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20  NFLICT setting, 
17bb0 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  the.** transacti
17bc0 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65  on might also be
17bd0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20   rolled back if 
17be0 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  an error is enco
17bf0 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  untered..**.** P
17c00 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
17c10 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
17c20 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
17c30 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
17c40 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
17c50 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
17c60 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
17c70 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
17c80 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
17c90 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
17ca0 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
17cb0 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
17cc0 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
17cd0 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
17ce0 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  *.** If P2 is no
17cf0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77  n-zero, then a w
17d00 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
17d10 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41 20   is started.  A 
17d20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73  RESERVED lock is
17d30 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20  .** obtained on 
17d40 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
17d50 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74  e when a write-t
17d60 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
17d70 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74  arted.  No.** ot
17d80 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20  her process can 
17d90 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72  start another wr
17da0 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
17db0 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73  while this trans
17dc0 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64  action is.** und
17dd0 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67  erway.  Starting
17de0 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
17df0 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65  tion also create
17e00 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
17e10 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65  rnal. A.** write
17e20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73   transaction mus
17e30 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66  t be started bef
17e40 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ore any changes 
17e50 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
17e60 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  he.** database. 
17e70 20 49 66 20 50 32 20 69 73 20 67 72 65 61 74 65   If P2 is greate
17e80 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
17e90 74 6f 20 32 20 74 68 65 6e 20 61 6e 20 45 58 43  to 2 then an EXC
17ea0 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73 0a 2a  LUSIVE lock is.*
17eb0 2a 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 20  * also obtained 
17ec0 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a  on the file..**.
17ed0 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72  ** If a write-tr
17ee0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
17ef0 72 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62  rted and the Vdb
17f00 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  e.usesStmtJourna
17f10 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75  l flag is.** tru
17f20 65 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20  e (this flag is 
17f30 73 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20  set if the Vdbe 
17f40 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20  may modify more 
17f50 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64  than one row and
17f60 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e   may.** throw an
17f70 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
17f80 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ), a statement t
17f90 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61  ransaction may a
17fa0 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a  lso be opened..*
17fb0 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61  * More specifica
17fc0 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  lly, a statement
17fd0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
17fe0 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64  opened iff the d
17ff0 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
18000 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74  ction is current
18010 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f  ly not in autoco
18020 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66  mmit mode, or if
18030 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72   there are other
18040 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65  .** active state
18050 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65  ments. A stateme
18060 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  nt transaction a
18070 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65  llows the change
18080 73 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a  s made by this.*
18090 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c  * VDBE to be rol
180a0 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61  led back after a
180b0 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20  n error without 
180c0 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62  having to roll b
180d0 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72  ack the.** entir
180e0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  e transaction. I
180f0 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e  f no error is en
18100 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73  countered, the s
18110 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
18120 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74  tion.** will aut
18130 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69  omatically commi
18140 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  t when the VDBE 
18150 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  halts..**.** If 
18160 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P2 is zero, then
18170 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20   a read-lock is 
18180 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20  obtained on the 
18190 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
181a0 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61  /.case OP_Transa
181b0 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65  ction: {.  Btree
181c0 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
181d0 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
181e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
181f0 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f  eadOnly==0 || pO
18200 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73  p->p2==0 );.  as
18210 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
18220 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
18230 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
18240 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
18250 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
18260 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
18270 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
18280 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
18290 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21  LITE_QueryOnly)!
182a0 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
182b0 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a  QLITE_READONLY;.
182c0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
182d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
182e0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
182f0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a  [pOp->p1].pBt;..
18300 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
18310 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
18320 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74  eeBeginTrans(pBt
18330 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20  , pOp->p2);.    
18340 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
18350 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  USY ){.      p->
18360 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70  pc = pc;.      p
18370 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
18380 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
18390 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
183a0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
183b0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
183c0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
183d0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
183e0 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f     }..    if( pO
183f0 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73  p->p2 && p->uses
18400 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20  StmtJournal .   
18410 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f    && (db->autoCo
18420 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e  mmit==0 || db->n
18430 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20  VdbeRead>1) .   
18440 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
18450 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
18460 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a  InTrans(pBt) );.
18470 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74        if( p->iSt
18480 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20  atement==0 ){.  
18490 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
184a0 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20  ->nStatement>=0 
184b0 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  && db->nSavepoin
184c0 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  t>=0 );.        
184d0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b  db->nStatement++
184e0 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53  ; .        p->iS
184f0 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e  tatement = db->n
18500 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e  Savepoint + db->
18510 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20  nStatement;.    
18520 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20    }..      rc = 
18530 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
18540 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
18550 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74  NT_BEGIN, p->iSt
18560 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20  atement-1);.    
18570 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
18580 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
18590 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
185a0 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70  BeginStmt(pBt, p
185b0 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20  ->iStatement);. 
185c0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
185d0 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65   Store the curre
185e0 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  nt value of the 
185f0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73  database handles
18600 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
18610 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f  aint.      ** co
18620 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74  unter. If the st
18630 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
18640 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
18650 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20  rolled back,.   
18660 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20     ** the value 
18670 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20  of this counter 
18680 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74  needs to be rest
18690 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20  ored too.  */.  
186a0 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43      p->nStmtDefC
186b0 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
186c0 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70  redCons;.      p
186d0 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e  ->nStmtDefImmCon
186e0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
186f0 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a  dImmCons;.    }.
18700 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
18710 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43  /* Opcode: ReadC
18720 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
18730 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f   *.**.** Read co
18740 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66  okie number P3 f
18750 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20  rom database P1 
18760 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74  and write it int
18770 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
18780 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73  * P3==1 is the s
18790 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
187a0 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P3==2 is the dat
187b0 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
187c0 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P3==3 is the re
187d0 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
187e0 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20  cache size, and 
187f0 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
18800 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20   is.** the main 
18810 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
18820 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64  d P1==1 is the d
18830 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
18840 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65  d to store.** te
18850 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
18860 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74  **.** There must
18870 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20   be a read-lock 
18880 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
18890 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61  (either a transa
188a0 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65  ction.** must be
188b0 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72   started or ther
188c0 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65  e must be an ope
188d0 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65  n cursor) before
188e0 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68  .** executing th
188f0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
18900 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43  */.case OP_ReadC
18910 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20  ookie: {        
18920 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
18930 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
18940 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20  nt iMeta;.  int 
18950 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b  iDb;.  int iCook
18960 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  ie;..  assert( p
18970 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
18980 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a   iDb = pOp->p1;.
18990 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d    iCookie = pOp-
189a0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p3;.  assert( p
189b0 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f  Op->p3<SQLITE_N_
189c0 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20  BTREE_META );.  
189d0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
189e0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
189f0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
18a00 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29  Db[iDb].pBt!=0 )
18a10 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
18a20 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
18a30 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29  DbMask)1)<<iDb))
18a40 21 3d 30 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65  !=0 );..  sqlite
18a50 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62  3BtreeGetMeta(db
18a60 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
18a70 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29  iCookie, (u32 *)
18a80 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d  &iMeta);.  pOut-
18a90 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20  >u.i = iMeta;.  
18aa0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18ab0 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50  ode: SetCookie P
18ac0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
18ad0 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74  * Write the cont
18ae0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
18af0 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64 20  P3 (interpreted 
18b00 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a  as an integer).*
18b10 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75  * into cookie nu
18b20 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62  mber P2 of datab
18b30 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69  ase P1.  P2==1 i
18b40 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  s the schema ver
18b50 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32  sion.  .** P2==2
18b60 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
18b70 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69   format. P2==3 i
18b80 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
18b90 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a  d pager cache .*
18ba0 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  * size, and so f
18bb0 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20  orth.  P1==0 is 
18bc0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
18bd0 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
18be0 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61   is the .** data
18bf0 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
18c00 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72  o store temporar
18c10 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
18c20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  A transaction mu
18c30 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
18c40 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 74  fore executing t
18c50 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
18c60 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65  ase OP_SetCookie
18c70 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33  : {       /* in3
18c80 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20   */.  Db *pDb;. 
18c90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
18ca0 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
18cb0 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
18cc0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
18cd0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
18ce0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
18cf0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
18d00 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
18d10 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73  >p1))!=0 );.  as
18d20 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
18d30 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  y==0 );.  pDb = 
18d40 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
18d50 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
18d60 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ->pBt!=0 );.  as
18d70 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
18d80 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
18d90 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
18da0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
18db0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74  Op->p3];.  sqlit
18dc0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
18dd0 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20  ify(pIn3);.  /* 
18de0 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69  See note about i
18df0 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e  ndex shifting on
18e00 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a   OP_ReadCookie *
18e10 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
18e20 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28  BtreeUpdateMeta(
18e30 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70  pDb->pBt, pOp->p
18e40 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e  2, (int)pIn3->u.
18e50 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  i);.  if( pOp->p
18e60 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
18e70 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
18e80 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
18e90 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
18ea0 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
18eb0 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
18ec0 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  ly */.    pDb->p
18ed0 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
18ee0 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e  ookie = (int)pIn
18ef0 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e  3->u.i;.    db->
18f00 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
18f10 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20  InternChanges;. 
18f20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
18f30 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46  p2==BTREE_FILE_F
18f40 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20  ORMAT ){.    /* 
18f50 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69  Record changes i
18f60 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  n the file forma
18f70 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  t */.    pDb->pS
18f80 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
18f90 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75  at = (u8)pIn3->u
18fa0 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  .i;.  }.  if( pO
18fb0 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p1==1 ){.    
18fc0 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
18fd0 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  l prepared state
18fe0 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74  ments whenever t
18ff0 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
19000 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69  .    ** schema i
19010 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b  s changed.  Tick
19020 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20  et #1644 */.    
19030 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
19040 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
19050 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  db);.    p->expi
19060 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  red = 0;.  }.  b
19070 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
19080 64 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69 65  de: VerifyCookie
19090 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
190a0 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61  .** Check the va
190b0 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61  lue of global da
190c0 74 61 62 61 73 65 20 70 61 72 61 6d 65 74 65 72  tabase parameter
190d0 20 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a 2a   number 0 (the.*
190e0 2a 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  * schema version
190f0 29 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20  ) and make sure 
19100 69 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50  it is equal to P
19110 32 20 61 6e 64 20 74 68 61 74 20 74 68 65 0a 2a  2 and that the.*
19120 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * generation cou
19130 6e 74 65 72 20 6f 6e 20 74 68 65 20 6c 6f 63 61  nter on the loca
19140 6c 20 73 63 68 65 6d 61 20 70 61 72 73 65 20 65  l schema parse e
19150 71 75 61 6c 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  quals P3..**.** 
19160 50 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  P1 is the databa
19170 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  se number which 
19180 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69  is 0 for the mai
19190 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  n database file.
191a0 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65  ** and 1 for the
191b0 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65   file holding te
191c0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61  mporary tables a
191d0 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e  nd some higher n
191e0 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78  umber.** for aux
191f0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73  iliary databases
19200 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b  ..**.** The cook
19210 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76  ie changes its v
19220 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68  alue whenever th
19230 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
19240 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68  a changes..** Th
19250 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
19260 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77  used to detect w
19270 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f  hen that the coo
19280 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a  kie has changed.
19290 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  ** and that the 
192a0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
192b0 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20  needs to reread 
192c0 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  the schema..**.*
192d0 2a 20 45 69 74 68 65 72 20 61 20 74 72 61 6e 73  * Either a trans
192e0 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  action needs to 
192f0 68 61 76 65 20 62 65 65 6e 20 73 74 61 72 74 65  have been starte
19300 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20  d or an OP_Open 
19310 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65  needs.** to be e
19320 78 65 63 75 74 65 64 20 28 74 6f 20 65 73 74 61  xecuted (to esta
19330 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63  blish a read loc
19340 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f  k) before this o
19350 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f  pcode is.** invo
19360 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ked..*/.case OP_
19370 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a  VerifyCookie: {.
19380 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
19390 6e 74 20 69 47 65 6e 3b 0a 20 20 42 74 72 65 65  nt iGen;.  Btree
193a0 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
193b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
193c0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
193d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
193e0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
193f0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
19400 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73  >p1))!=0 );.  as
19410 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
19420 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
19430 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
19440 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
19450 52 65 61 64 65 72 20 29 3b 0a 20 20 70 42 74 20  Reader );.  pBt 
19460 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
19470 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20 70 42  1].pBt;.  if( pB
19480 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
19490 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
194a0 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  , BTREE_SCHEMA_V
194b0 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26  ERSION, (u32 *)&
194c0 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e  iMeta);.    iGen
194d0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
194e0 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65  p1].pSchema->iGe
194f0 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73  neration;.  }els
19500 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d  e{.    iGen = iM
19510 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  eta = 0;.  }.  i
19520 66 28 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70  f( iMeta!=pOp->p
19530 32 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e  2 || iGen!=pOp->
19540 70 33 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p3 ){.    sqlite
19550 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
19560 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
19570 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
19580 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
19590 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
195a0 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
195b0 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
195c0 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
195d0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
195e0 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
195f0 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
19600 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
19610 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
19620 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
19630 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
19640 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
19650 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
19660 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
19670 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
19680 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
19690 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
196a0 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
196b0 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
196c0 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
196d0 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
196e0 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
196f0 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
19700 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
19710 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
19720 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
19730 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
19740 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
19750 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
19760 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
19770 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
19780 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
19790 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
197a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
197b0 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
197c0 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
197d0 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
197e0 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
197f0 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
19800 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
19810 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
19820 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
19830 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
19840 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
19850 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
19860 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
19870 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
19880 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
19890 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
198a0 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
198b0 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
198c0 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
198d0 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
198e0 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
198f0 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 65 78      }..    p->ex
19900 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72  pired = 1;.    r
19910 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  c = SQLITE_SCHEM
19920 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  A;.  }.  break;.
19930 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
19940 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
19950 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
19960 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
19970 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
19980 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
19990 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
199a0 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
199b0 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
199c0 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
199d0 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
199e0 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
199f0 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
19a00 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
19a10 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
19a20 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
19a30 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
19a40 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
19a50 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
19a60 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
19a70 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
19a80 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
19a90 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
19aa0 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
19ab0 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
19ac0 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
19ad0 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
19ae0 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
19af0 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
19b00 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
19b10 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
19b20 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
19b30 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
19b40 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
19b50 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
19b60 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
19b70 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
19b80 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
19b90 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
19ba0 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
19bb0 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
19bc0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
19bd0 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
19be0 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
19bf0 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
19c00 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
19c10 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
19c20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
19c30 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
19c40 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
19c50 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
19c60 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
19c70 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
19c80 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
19c90 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
19ca0 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
19cb0 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
19cc0 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
19cd0 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
19ce0 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
19cf0 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
19d00 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
19d10 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
19d20 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
19d30 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
19d40 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
19d50 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
19d60 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
19d70 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
19d80 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
19d90 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
19da0 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
19db0 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
19dc0 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
19dd0 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
19de0 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
19df0 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
19e00 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
19e10 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
19e20 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
19e30 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
19e40 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
19e50 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
19e60 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
19e70 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
19e80 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
19e90 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
19ea0 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
19eb0 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
19ec0 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
19ed0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
19ee0 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
19ef0 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57  * See also OpenW
19f00 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  rite..*/./* Opco
19f10 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
19f20 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
19f30 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
19f40 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
19f50 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
19f60 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
19f70 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
19f80 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
19f90 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
19fa0 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
19fb0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
19fc0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
19fd0 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
19fe0 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
19ff0 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1a000 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1a010 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1a020 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1a030 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1a040 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1a050 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1a060 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1a070 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
1a080 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
1a090 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
1a0a0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
1a0b0 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
1a0c0 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
1a0d0 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1a0e0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1a0f0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1a100 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
1a110 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
1a120 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1a130 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
1a140 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
1a150 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
1a160 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
1a170 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
1a180 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
1a190 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
1a1a0 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
1a1b0 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
1a1c0 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
1a1d0 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
1a1e0 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
1a1f0 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
1a200 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
1a210 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
1a220 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
1a230 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
1a240 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
1a250 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
1a260 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
1a270 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
1a280 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20  _OpenRead:.case 
1a290 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a  OP_OpenWrite: {.
1a2a0 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1a2b0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1a2c0 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69  o;.  int p2;.  i
1a2d0 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72  nt iDb;.  int wr
1a2e0 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
1a2f0 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  X;.  VdbeCursor 
1a300 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62  *pCur;.  Db *pDb
1a310 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f  ;..  assert( (pO
1a320 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50 32  p->p5&(OPFLAG_P2
1a330 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c  ISREG|OPFLAG_BUL
1a340 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70 35 20  KCSR))==pOp->p5 
1a350 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1a360 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1a370 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70  nWrite || pOp->p
1a380 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  5==0 );.  assert
1a390 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1a3a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1a3b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1a3c0 52 65 61 64 20 7c 7c 20 70 2d 3e 72 65 61 64 4f  Read || p->readO
1a3d0 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  nly==0 );..  if(
1a3e0 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
1a3f0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
1a400 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b 3b  BORT;.    break;
1a410 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
1a420 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d   0;.  pKeyInfo =
1a430 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e   0;.  p2 = pOp->
1a440 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  p2;.  iDb = pOp-
1a450 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p3;.  assert( i
1a460 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1a470 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1a480 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
1a490 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
1a4a0 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70  <iDb))!=0 );.  p
1a4b0 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
1a4c0 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e  b];.  pX = pDb->
1a4d0 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pBt;.  assert( p
1a4e0 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  X!=0 );.  if( pO
1a4f0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1a500 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77  enWrite ){.    w
1a510 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61  rFlag = 1;.    a
1a520 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
1a530 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
1a540 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
1a550 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d   if( pDb->pSchem
1a560 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c  a->file_format <
1a570 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1a580 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20  Format ){.      
1a590 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1a5a0 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63  ormat = pDb->pSc
1a5b0 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1a5c0 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  t;.    }.  }else
1a5d0 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30  {.    wrFlag = 0
1a5e0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1a5f0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49  >p5 & OPFLAG_P2I
1a600 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65  SREG ){.    asse
1a610 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20  rt( p2>0 );.    
1a620 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e  assert( p2<=(p->
1a630 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
1a640 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26   );.    pIn2 = &
1a650 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73  aMem[p2];.    as
1a660 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1a670 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73  (pIn2) );.    as
1a680 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
1a690 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
1a6a0 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
1a6b0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1a6c0 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d  (pIn2);.    p2 =
1a6d0 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b   (int)pIn2->u.i;
1a6e0 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76  .    /* The p2 v
1a6f0 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65  alue always come
1a700 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f  s from a prior O
1a710 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
1a720 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20  code and.    ** 
1a730 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c  that opcode will
1a740 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20   always set the 
1a750 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72  p2 value to 2 or
1a760 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61   more or else fa
1a770 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  il..    ** If th
1a780 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75  ere were a failu
1a790 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64  re, the prepared
1a7a0 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
1a7b0 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20   have halted.   
1a7c0 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68   ** before reach
1a7d0 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
1a7e0 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28  tion. */.    if(
1a7f0 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b   NEVER(p2<2) ) {
1a800 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
1a810 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
1a820 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1a830 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1a840 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
1a850 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1a860 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70  KEYINFO ){.    p
1a870 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1a880 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  4.pKeyInfo;.    
1a890 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20  pKeyInfo->enc = 
1a8a0 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20  ENC(p->db);.    
1a8b0 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66  nField = pKeyInf
1a8c0 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e  o->nField+pKeyIn
1a8d0 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d  fo->nXField;.  }
1a8e0 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34  else if( pOp->p4
1a8f0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1a900 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  {.    nField = p
1a910 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20  Op->p4.i;.  }.  
1a920 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1a930 3d 30 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 61  =0 );.  pCur = a
1a940 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1a950 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64   pOp->p1, nField
1a960 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28  , iDb, 1);.  if(
1a970 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20   pCur==0 ) goto 
1a980 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e  no_mem;.  pCur->
1a990 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1a9a0 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  Cur->isOrdered =
1a9b0 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   1;.  rc = sqlit
1a9c0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
1a9d0 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b  , p2, wrFlag, pK
1a9e0 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43  eyInfo, pCur->pC
1a9f0 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e  ursor);.  pCur->
1aa00 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49  pKeyInfo = pKeyI
1aa10 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  nfo;.  assert( O
1aa20 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42  PFLAG_BULKCSR==B
1aa30 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b  TREE_BULKLOAD );
1aa40 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  .  sqlite3BtreeC
1aa50 75 72 73 6f 72 48 69 6e 74 73 28 70 43 75 72 2d  ursorHints(pCur-
1aa60 3e 70 43 75 72 73 6f 72 2c 20 28 70 4f 70 2d 3e  >pCursor, (pOp->
1aa70 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  p5 & OPFLAG_BULK
1aa80 43 53 52 29 29 3b 0a 0a 20 20 2f 2a 20 53 69 6e  CSR));..  /* Sin
1aa90 63 65 20 69 74 20 70 65 72 66 6f 72 6d 73 20 6e  ce it performs n
1aaa0 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  o memory allocat
1aab0 69 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f  ion or IO, the o
1aac0 6e 6c 79 20 76 61 6c 75 65 20 74 68 61 74 0a 20  nly value that. 
1aad0 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
1aae0 43 75 72 73 6f 72 28 29 20 6d 61 79 20 72 65 74  Cursor() may ret
1aaf0 75 72 6e 20 69 73 20 53 51 4c 49 54 45 5f 4f 4b  urn is SQLITE_OK
1ab00 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72  . */.  assert( r
1ab10 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
1ab20 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
1ab30 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
1ab40 20 61 6e 64 20 69 73 49 6e 64 65 78 20 76 61 72   and isIndex var
1ab50 69 61 62 6c 65 73 2e 20 50 72 65 76 69 6f 75 73  iables. Previous
1ab60 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a   versions of.  *
1ab70 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f  * SQLite used to
1ab80 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f   check if the ro
1ab90 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65  ot-page flags we
1aba0 72 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20  re sane at this 
1abb0 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72  point.  ** and r
1abc0 65 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63  eport database c
1abd0 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65  orruption if the
1abe0 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20  y were not, but 
1abf0 74 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20  this check has. 
1ac00 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20   ** since moved 
1ac10 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c  into the btree l
1ac20 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43  ayer.  */  .  pC
1ac30 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  ur->isTable = pO
1ac40 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45  p->p4type!=P4_KE
1ac50 59 49 4e 46 4f 3b 0a 20 20 70 43 75 72 2d 3e 69  YINFO;.  pCur->i
1ac60 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e  sIndex = !pCur->
1ac70 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b  isTable;.  break
1ac80 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1ac90 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
1aca0 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53   P2 * P4 P5.** S
1acb0 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e  ynopsis: nColumn
1acc0 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P2.**.** Open a
1acd0 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
1ace0 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  o a transient ta
1acf0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
1ad00 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65  or is always ope
1ad10 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65  ned read/write e
1ad20 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d  ven if .** the m
1ad30 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
1ad40 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20  read-only.  The 
1ad50 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62  ephemeral.** tab
1ad60 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75  le is deleted au
1ad70 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e  tomatically when
1ad80 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
1ad90 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  losed..**.** P2 
1ada0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1adb0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1adc0 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e  ephemeral table.
1add0 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70  .** The cursor p
1ade0 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65  oints to a BTree
1adf0 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20   table if P4==0 
1ae00 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69  and to a BTree i
1ae10 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73  ndex.** if P4 is
1ae20 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69   not 0.  If P4 i
1ae30 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70  s not NULL, it p
1ae40 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e  oints to a KeyIn
1ae50 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  fo structure.** 
1ae60 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
1ae70 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20   format of keys 
1ae80 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a  in the index..**
1ae90 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d  .** The P5 param
1aea0 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61  eter can be a ma
1aeb0 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f  sk of the BTREE_
1aec0 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a  * flags defined.
1aed0 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20  ** in btree.h.  
1aee0 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74  These flags cont
1aef0 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74  rol aspects of t
1af00 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a  he operation of.
1af10 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54  ** the btree.  T
1af20 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f  he BTREE_OMIT_JO
1af30 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f  URNAL and BTREE_
1af40 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65  SINGLE flags are
1af50 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61  .** added automa
1af60 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f  tically..*/./* O
1af70 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69  pcode: OpenAutoi
1af80 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20  ndex P1 P2 * P4 
1af90 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e  *.** Synopsis: n
1afa0 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20  Column=P2.**.** 
1afb0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1afc0 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50  s the same as OP
1afd0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20  _OpenEphemeral. 
1afe0 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66   It has a.** dif
1aff0 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64  ferent name to d
1b000 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75  istinguish its u
1b010 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61  se.  Tables crea
1b020 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20  ted using.** by 
1b030 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
1b040 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74   be used for aut
1b050 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
1b060 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20  ed transient.** 
1b070 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73  indices in joins
1b080 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1b090 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73  nAutoindex: .cas
1b0a0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
1b0b0 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  al: {.  VdbeCurs
1b0c0 6f 72 20 2a 70 43 78 3b 0a 20 20 73 74 61 74 69  or *pCx;.  stati
1b0d0 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46  c const int vfsF
1b0e0 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51  lags = .      SQ
1b0f0 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52  LITE_OPEN_READWR
1b100 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ITE |.      SQLI
1b110 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c  TE_OPEN_CREATE |
1b120 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1b130 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20  EN_EXCLUSIVE |. 
1b140 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1b150 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c  _DELETEONCLOSE |
1b160 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1b170 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b  EN_TRANSIENT_DB;
1b180 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1b190 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p1>=0 );.  pCx 
1b1a0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1b1b0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1b1c0 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20  ->p2, -1, 1);.  
1b1d0 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1b1e0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1b1f0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1b200 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b210 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20  eOpen(db->pVfs, 
1b220 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74  0, db, &pCx->pBt
1b230 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
1b240 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45             BTREE
1b250 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20  _OMIT_JOURNAL | 
1b260 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70  BTREE_SINGLE | p
1b270 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73  Op->p5, vfsFlags
1b280 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
1b290 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
1b2a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1b2b0 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70  eginTrans(pCx->p
1b2c0 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66  Bt, 1);.  }.  if
1b2d0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1b2e0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74  ){.    /* If a t
1b2f0 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
1b300 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
1b310 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
1b320 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  .    ** sqlite3B
1b330 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1b340 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  ) with the BTREE
1b350 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65  _BLOBKEY flag be
1b360 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
1b370 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
1b380 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
1b390 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
1b3a0 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
1b3b0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1b3c0 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
1b3d0 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42  oot-page 1 (an B
1b3e0 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65  LOB_INTKEY table
1b3f0 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
1b400 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  ( pOp->p4.pKeyIn
1b410 66 6f 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  fo ){.      int 
1b420 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
1b430 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1b440 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1b450 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b460 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1b470 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e  e(pCx->pBt, &pgn
1b480 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  o, BTREE_BLOBKEY
1b490 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20   | pOp->p5); .  
1b4a0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1b4b0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1b4c0 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d   assert( pgno==M
1b4d0 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a  ASTER_ROOT+1 );.
1b4e0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1b4f0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1b500 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20  pCx->pBt, pgno, 
1b510 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  1, .            
1b520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b530 20 20 20 20 28 4b 65 79 49 6e 66 6f 2a 29 70 4f      (KeyInfo*)pO
1b540 70 2d 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e 70 43  p->p4.z, pCx->pC
1b550 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  ursor);.        
1b560 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1b570 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1b580 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70  ;.        pCx->p
1b590 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45  KeyInfo->enc = E
1b5a0 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20  NC(p->db);.     
1b5b0 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73   }.      pCx->is
1b5c0 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d  Table = 0;.    }
1b5d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
1b5e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1b5f0 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41  sor(pCx->pBt, MA
1b600 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c  STER_ROOT, 1, 0,
1b610 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a   pCx->pCursor);.
1b620 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62        pCx->isTab
1b630 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  le = 1;.    }.  
1b640 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72  }.  pCx->isOrder
1b650 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42  ed = (pOp->p5!=B
1b660 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b  TREE_UNORDERED);
1b670 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20  .  pCx->isIndex 
1b680 3d 20 21 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b  = !pCx->isTable;
1b690 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1b6a0 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70  Opcode: SorterOp
1b6b0 65 6e 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  en P1 P2 * P4 *.
1b6c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f  ** Synopsis: nCo
1b6d0 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68  lumn=P2.**.** Th
1b6e0 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
1b6f0 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  like OP_OpenEphe
1b700 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61  meral except tha
1b710 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20  t it opens.** a 
1b720 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20  transient index 
1b730 74 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63  that is specific
1b740 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f  ally designed to
1b750 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74   sort large.** t
1b760 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65  ables using an e
1b770 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f  xternal merge-so
1b780 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2f  rt algorithm..*/
1b790 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f  .case OP_SorterO
1b7a0 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
1b7b0 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 70 43 78  sor *pCx;..  pCx
1b7c0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1b7d0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1b7e0 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20  p->p2, -1, 1);. 
1b7f0 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1b800 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1b810 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70  ->pKeyInfo = pOp
1b820 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
1b830 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1b840 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29  enc = ENC(p->db)
1b850 3b 0a 20 20 70 43 78 2d 3e 69 73 53 6f 72 74 65  ;.  pCx->isSorte
1b860 72 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  r = 1;.  rc = sq
1b870 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49  lite3VdbeSorterI
1b880 6e 69 74 28 64 62 2c 20 70 43 78 29 3b 0a 20 20  nit(db, pCx);.  
1b890 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1b8a0 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20  ode: OpenPseudo 
1b8b0 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
1b8c0 20 53 79 6e 6f 70 73 69 73 3a 20 63 6f 6e 74 65   Synopsis: conte
1b8d0 6e 74 20 69 6e 20 72 5b 50 32 5d 2e 2e 20 4e 3d  nt in r[P2].. N=
1b8e0 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P3.**.** Open a 
1b8f0 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20  new cursor that 
1b900 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65  points to a fake
1b910 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
1b920 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  ains a single.**
1b930 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54   row of data.  T
1b940 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
1b950 61 74 20 6f 6e 65 20 72 6f 77 20 69 6e 20 74 68  at one row in th
1b960 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d  e content of mem
1b970 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ory.** register 
1b980 50 32 20 77 68 65 6e 20 50 35 3d 3d 30 2e 20 20  P2 when P5==0.  
1b990 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1b9a0 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65  cursor P1 become
1b9b0 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
1b9c0 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20  he .** MEM_Blob 
1b9d0 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65  content containe
1b9e0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
1b9f0 2e 20 20 57 68 65 6e 20 50 35 3d 3d 31 2c 20 74  .  When P5==1, t
1ba00 68 65 6e 20 74 68 65 0a 2a 2a 20 72 6f 77 20 69  hen the.** row i
1ba10 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  s represented by
1ba20 20 50 33 20 63 6f 6e 73 65 63 75 74 69 76 65 20   P3 consecutive 
1ba30 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e  registers beginn
1ba40 69 6e 67 20 77 69 74 68 20 50 32 2e 0a 2a 2a 0a  ing with P2..**.
1ba50 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c  ** A pseudo-tabl
1ba60 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69  e created by thi
1ba70 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
1ba80 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c   to hold a singl
1ba90 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20  e.** row output 
1baa0 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20  from the sorter 
1bab0 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20  so that the row 
1bac0 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65  can be decompose
1bad0 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69  d into.** indivi
1bae0 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69  dual columns usi
1baf0 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ng the OP_Column
1bb00 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50   opcode.  The OP
1bb10 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a  _Column opcode.*
1bb20 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75  * is the only cu
1bb30 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74  rsor opcode that
1bb40 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73   works with a ps
1bb50 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
1bb60 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62  * P3 is the numb
1bb70 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
1bb80 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74  the records that
1bb90 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
1bba0 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f  by.** the pseudo
1bbb0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
1bbc0 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b  OP_OpenPseudo: {
1bbd0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1bbe0 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1bbf0 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70  Op->p1>=0 );.  p
1bc00 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1bc10 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1bc20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b  pOp->p3, -1, 0);
1bc30 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1bc40 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1bc50 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1bc60 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61  .  pCx->pseudoTa
1bc70 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32  bleReg = pOp->p2
1bc80 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65  ;.  pCx->isTable
1bc90 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49   = 1;.  pCx->isI
1bca0 6e 64 65 78 20 3d 20 30 3b 0a 20 20 70 43 78 2d  ndex = 0;.  pCx-
1bcb0 3e 6d 75 6c 74 69 50 73 65 75 64 6f 20 3d 20 70  >multiPseudo = p
1bcc0 4f 70 2d 3e 70 35 3b 0a 20 20 62 72 65 61 6b 3b  Op->p5;.  break;
1bcd0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
1bce0 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lose P1 * * * *.
1bcf0 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75  **.** Close a cu
1bd00 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20  rsor previously 
1bd10 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49  opened as P1.  I
1bd20 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63  f P1 is not.** c
1bd30 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74  urrently open, t
1bd40 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1bd50 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  is a no-op..*/.c
1bd60 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a  ase OP_Close: {.
1bd70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1bd80 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1bd90 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1bda0 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43  sqlite3VdbeFreeC
1bdb0 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73  ursor(p, p->apCs
1bdc0 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70  r[pOp->p1]);.  p
1bdd0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1bde0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
1bdf0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
1be00 6b 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20  kGe P1 P2 P3 P4 
1be10 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1be20 65 79 3d 72 5b 50 33 5d 2e 2e 20 4e 3d 50 34 0a  ey=r[P3].. N=P4.
1be30 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1be40 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1be50 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1be60 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1be70 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1be80 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1be90 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74  register P3 as t
1bea0 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73  he key.  If curs
1beb0 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1bec0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1bed0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1bee0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1bef0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1bf00 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1bf10 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1bf20 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1bf30 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1bf40 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1bf50 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1bf60 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1bf70 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1bf80 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
1bf90 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1bfa0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1bfb0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1bfc0 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e  .** greater than
1bfd0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1bfe0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1bff0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1c000 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1c010 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1c020 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69   NotFound, Disti
1c030 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65  nct, SeekLt, See
1c040 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGt, SeekLe.*/./
1c050 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 74  * Opcode: SeekGt
1c060 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1c070 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1c080 72 5b 50 33 5d 2e 2e 20 4e 3d 50 34 0a 2a 2a 0a  r[P3].. N=P4.**.
1c090 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1c0a0 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1c0b0 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1c0c0 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1c0d0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1c0e0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1c0f0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1c100 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1c110 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1c120 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1c130 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1c140 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1c150 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1c160 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1c170 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1c180 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1c190 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1c1a0 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1c1b0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
1c1c0 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
1c1d0 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
1c1e0 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
1c1f0 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1c200 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72  re no records gr
1c210 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74  eater than .** t
1c220 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1c230 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1c240 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1c250 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1c260 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
1c270 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53  tinct, SeekLt, S
1c280 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
1c290 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1c2a0 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Lt P1 P2 P3 P4 *
1c2b0 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b   .** Synopsis: k
1c2c0 65 79 3d 72 5b 50 33 5d 2e 2e 20 4e 3d 50 34 0a  ey=r[P3].. N=P4.
1c2d0 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1c2e0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1c2f0 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1c300 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1c310 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1c320 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1c330 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1c340 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1c350 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1c360 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1c370 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1c380 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1c390 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1c3a0 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1c3b0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1c3c0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1c3d0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1c3e0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1c3f0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1c400 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
1c410 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
1c420 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1c430 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1c440 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73  e no records les
1c450 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  s than .** the k
1c460 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1c470 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1c480 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65   to P2..**.** Se
1c490 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1c4a0 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63  otFound, Distinc
1c4b0 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  t, SeekGt, SeekG
1c4c0 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  e, SeekLe.*/./* 
1c4d0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50  Opcode: SeekLe P
1c4e0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1c4f0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1c500 50 33 5d 2e 2e 20 4e 3d 50 34 0a 2a 2a 0a 2a 2a  P3].. N=P4.**.**
1c510 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1c520 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1c530 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1c540 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1c550 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1c560 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1c570 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1c580 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1c590 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1c5a0 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1c5b0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1c5c0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1c5d0 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1c5e0 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1c5f0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1c600 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1c610 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1c620 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
1c630 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
1c640 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1c650 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
1c660 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1c670 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1c680 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1c690 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e  ds .** less than
1c6a0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1c6b0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1c6c0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1c6d0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1c6e0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1c6f0 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69   NotFound, Disti
1c700 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  nct, SeekGt, See
1c710 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63  kGe, SeekLt.*/.c
1c720 61 73 65 20 4f 50 5f 53 65 65 6b 4c 74 3a 20 20  ase OP_SeekLt:  
1c730 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1c740 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1c750 65 65 6b 4c 65 3a 20 20 20 20 20 20 20 20 20 2f  eekLe:         /
1c760 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1c770 61 73 65 20 4f 50 5f 53 65 65 6b 47 65 3a 20 20  ase OP_SeekGe:  
1c780 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1c790 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1c7a0 65 65 6b 47 74 3a 20 7b 20 20 20 20 20 20 20 2f  eekGt: {       /
1c7b0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1c7c0 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
1c7d0 6f 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  oc;.  VdbeCursor
1c7e0 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64   *pC;.  Unpacked
1c7f0 52 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20  Record r;.  int 
1c800 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b  nField;.  i64 iK
1c810 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ey;      /* The 
1c820 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20  rowid we are to 
1c830 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73  seek to */..  as
1c840 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1c850 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1c860 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1c870 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29  rt( pOp->p2!=0 )
1c880 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1c890 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1c8a0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1c8b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
1c8c0 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
1c8d0 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1c8e0 65 65 6b 4c 65 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekLe == OP_Seek
1c8f0 4c 74 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  Lt+1 );.  assert
1c900 28 20 4f 50 5f 53 65 65 6b 47 65 20 3d 3d 20 4f  ( OP_SeekGe == O
1c910 50 5f 53 65 65 6b 4c 74 2b 32 20 29 3b 0a 20 20  P_SeekLt+2 );.  
1c920 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1c930 74 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 33  t == OP_SeekLt+3
1c940 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1c950 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
1c960 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e   if( ALWAYS(pC->
1c970 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20  pCursor!=0) ){. 
1c980 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63     oc = pOp->opc
1c990 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  ode;.    pC->nul
1c9a0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 69 66  lRow = 0;.    if
1c9b0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  ( pC->isTable ){
1c9c0 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e  .      /* The in
1c9d0 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20  put value in P3 
1c9e0 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20  might be of any 
1c9f0 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72  type: integer, r
1ca00 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20  eal, string,.   
1ca10 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e     ** blob, or N
1ca20 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65  ULL.  But it nee
1ca30 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  ds to be an inte
1ca40 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61  ger before we ca
1ca50 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68  n do.      ** th
1ca60 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72  e seek, so cover
1ca70 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 20 20 70  t it. */.      p
1ca80 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
1ca90 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61 70 70 6c  >p3];.      appl
1caa0 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
1cab0 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 69 4b  (pIn3);.      iK
1cac0 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
1cad0 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a  IntValue(pIn3);.
1cae0 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1caf0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20  sValid = 0;..   
1cb00 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
1cb10 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20  value could not 
1cb20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
1cb30 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74  o an integer wit
1cb40 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a 20 6c 6f  hout.      ** lo
1cb50 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
1cb60 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20  n, then special 
1cb70 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65  processing is re
1cb80 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20  quired... */.   
1cb90 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1cba0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
1cbb0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  0 ){.        if(
1cbc0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1cbd0 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
1cbe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
1cbf0 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e  the P3 value can
1cc00 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
1cc10 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f   into any kind o
1cc20 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20  f a number,.    
1cc30 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
1cc40 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f  e seek is not po
1cc50 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20  ssible, so jump 
1cc60 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20  to P2 */.       
1cc70 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1cc80 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 62  - 1;.          b
1cc90 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
1cca0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 77 65          /* If we
1ccb0 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
1ccc0 74 2c 20 74 68 65 6e 20 74 68 65 20 50 33 20 76  t, then the P3 v
1ccd0 61 6c 75 65 20 6d 75 73 74 20 62 65 20 61 20 66  alue must be a f
1cce0 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20 20 20 20  loating.        
1ccf0 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e  ** point number.
1cd00 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
1cd10 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  rt( (pIn3->flags
1cd20 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21 3d 30 20   & MEM_Real)!=0 
1cd30 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20  );..        if( 
1cd40 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49  iKey==SMALLEST_I
1cd50 4e 54 36 34 20 26 26 20 28 70 49 6e 33 2d 3e 72  NT64 && (pIn3->r
1cd60 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 7c 7c  <(double)iKey ||
1cd70 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29 7b 0a 20   pIn3->r>0) ){. 
1cd80 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1cd90 50 33 20 76 61 6c 75 65 20 69 73 20 74 6f 6f 20  P3 value is too 
1cda0 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e 69 74 75  large in magnitu
1cdb0 64 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73  de to be express
1cdc0 65 64 20 61 73 20 61 6e 0a 20 20 20 20 20 20 20  ed as an.       
1cdd0 20 20 20 2a 2a 20 69 6e 74 65 67 65 72 2e 20 2a     ** integer. *
1cde0 2f 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 20  /.          res 
1cdf0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 69  = 1;.          i
1ce00 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a  f( pIn3->r<0 ){.
1ce10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
1ce20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b  oc>=OP_SeekGe ){
1ce30 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
1ce40 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGe || oc==O
1ce50 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20  P_SeekGt );.    
1ce60 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
1ce70 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74  qlite3BtreeFirst
1ce80 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1ce90 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  es);.           
1cea0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1ceb0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1cec0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
1cee0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1cef0 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f             if( o
1cf00 63 3c 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 20  c<=OP_SeekLe ){ 
1cf10 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1cf20 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLt || oc==OP
1cf30 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20  _SeekLe );.     
1cf40 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
1cf50 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
1cf60 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1cf70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
1cf80 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1cf90 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1cfa0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1cfb0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1cfc0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1cfd0 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
1cfe0 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f           pc = pO
1cff0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
1d000 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1d010 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
1d020 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d 3d 4f 50  }else if( oc==OP
1d030 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f  _SeekLt || oc==O
1d040 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20 20 20  P_SeekGe ){.    
1d050 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65        /* Use the
1d060 20 63 65 69 6c 69 6e 67 28 29 20 66 75 6e 63 74   ceiling() funct
1d070 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72  ion to convert r
1d080 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20  eal->int */.    
1d090 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
1d0a0 72 20 3e 20 28 64 6f 75 62 6c 65 29 69 4b 65 79  r > (double)iKey
1d0b0 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20 20 20 20   ) iKey++;.     
1d0c0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1d0d0 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 66      /* Use the f
1d0e0 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69 6f 6e 20  loor() function 
1d0f0 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d  to convert real-
1d100 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  >int */.        
1d110 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
1d120 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d 3d 4f  _SeekLe || oc==O
1d130 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20  P_SeekGt );.    
1d140 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
1d150 72 20 3c 20 28 64 6f 75 62 6c 65 29 69 4b 65 79  r < (double)iKey
1d160 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20 20 20 20   ) iKey--;.     
1d170 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 0a 20 20     }.      } .  
1d180 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1d190 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1d1a0 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1d1b0 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30   0, (u64)iKey, 0
1d1c0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
1d1d0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1d1e0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
1d1f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1d200 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
1d210 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b     if( res==0 ){
1d220 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  .        pC->row
1d230 69 64 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a 20  idIsValid = 1;. 
1d240 20 20 20 20 20 20 20 70 43 2d 3e 6c 61 73 74 52         pC->lastR
1d250 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20  owid = iKey;.   
1d260 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
1d270 20 20 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70        nField = p
1d280 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20  Op->p4.i;.      
1d290 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1d2a0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
1d2b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e  .      assert( n
1d2c0 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 20  Field>0 );.     
1d2d0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1d2e0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
1d2f0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
1d300 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 20  6)nField;..     
1d310 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e   /* The next lin
1d320 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74  e of code comput
1d330 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f  es as follows, o
1d340 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20  nly faster:.    
1d350 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f    **   if( oc==O
1d360 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d  P_SeekGt || oc==
1d370 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20  OP_SeekLe ){.   
1d380 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67     **     r.flag
1d390 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43  s = UNPACKED_INC
1d3a0 52 4b 45 59 3b 0a 20 20 20 20 20 20 2a 2a 20 20  RKEY;.      **  
1d3b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2a 2a   }else{.      **
1d3c0 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30       r.flags = 0
1d3d0 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d 0a 20  ;.      **   }. 
1d3e0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 2e       */.      r.
1d3f0 66 6c 61 67 73 20 3d 20 28 75 38 29 28 55 4e 50  flags = (u8)(UNP
1d400 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 2a 20  ACKED_INCRKEY * 
1d410 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65  (1 & (oc - OP_Se
1d420 65 6b 4c 74 29 29 29 3b 0a 20 20 20 20 20 20 61  ekLt)));.      a
1d430 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1d440 65 6b 47 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d  ekGt || r.flags=
1d450 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45  =UNPACKED_INCRKE
1d460 59 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  Y );.      asser
1d470 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 65  t( oc!=OP_SeekLe
1d480 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50   || r.flags==UNP
1d490 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b  ACKED_INCRKEY );
1d4a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1d4b0 63 21 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20  c!=OP_SeekGe || 
1d4c0 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 20 20  r.flags==0 );.  
1d4d0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1d4e0 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 72 2e 66  OP_SeekLt || r.f
1d4f0 6c 61 67 73 3d 3d 30 20 29 3b 0a 0a 20 20 20 20  lags==0 );..    
1d500 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
1d510 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
1d520 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1d530 20 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f       { int i; fo
1d540 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
1d550 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
1d560 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
1d570 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
1d580 69 66 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42  if.      ExpandB
1d590 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20  lob(r.aMem);.   
1d5a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1d5b0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1d5c0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1d5d0 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
1d5e0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1d5f0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1d600 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1d610 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1d620 20 20 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72     }.      pC->r
1d630 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1d640 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64  .    }.    pC->d
1d650 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1d660 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
1d670 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1d680 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c  TALE;.#ifdef SQL
1d690 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c  ITE_TEST.    sql
1d6a0 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
1d6b0 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  t++;.#endif.    
1d6c0 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47  if( oc>=OP_SeekG
1d6d0 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  e ){  assert( oc
1d6e0 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f  ==OP_SeekGe || o
1d6f0 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a  c==OP_SeekGt );.
1d700 20 20 20 20 20 20 69 66 28 20 72 65 73 3c 30 20        if( res<0 
1d710 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
1d720 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a  ==OP_SeekGt) ){.
1d730 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1d740 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
1d750 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1d760 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
1d770 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1d780 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1d790 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70  error;.        p
1d7a0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1d7b0 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
1d7c0 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
1d7d0 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
1d7e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
1d7f0 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
1d800 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
1d810 4c 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Le );.      if( 
1d820 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res>0 || (res==0
1d830 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   && oc==OP_SeekL
1d840 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  t) ){.        rc
1d850 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
1d860 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72  revious(pC->pCur
1d870 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1d880 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1d890 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1d8a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1d8b0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  .        pC->row
1d8c0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1d8d0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1d8e0 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74      /* res might
1d8f0 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63   be negative bec
1d900 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69  ause the table i
1d910 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20  s empty.  Check 
1d920 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65  to.        ** se
1d930 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65  e if this is the
1d940 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a   case..        *
1d950 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  /.        res = 
1d960 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28  sqlite3BtreeEof(
1d970 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1d980 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
1d990 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1d9a0 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  0 );.    if( res
1d9b0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1d9c0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1d9d0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
1d9e0 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77  * This happens w
1d9f0 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74  hen attempting t
1da00 6f 20 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74  o open the sqlit
1da10 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a  e3_master table.
1da20 20 20 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20      ** for read 
1da30 61 63 63 65 73 73 20 72 65 74 75 72 6e 73 20 53  access returns S
1da40 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20  QLITE_EMPTY. In 
1da50 74 68 69 73 20 63 61 73 65 20 61 6c 77 61 79 73  this case always
1da60 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65  .    ** take the
1da70 20 6a 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65   jump (since the
1da80 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1da90 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e  s in the table).
1daa0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d  .    */.    pc =
1dab0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1dac0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1dad0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31   Opcode: Seek P1
1dae0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
1daf0 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72  opsis:  intkey=r
1db00 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P2].**.** P1 is
1db10 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63   an open table c
1db20 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20  ursor and P2 is 
1db30 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e  a rowid integer.
1db40 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72    Arrange.** for
1db50 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74   P1 to move so t
1db60 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1db70 20 74 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e   the rowid given
1db80 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P2..**.** Th
1db90 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  is is actually a
1dba0 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20   deferred seek. 
1dbb0 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c   Nothing actuall
1dbc0 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a  y happens until.
1dbd0 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  ** the cursor is
1dbe0 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20   used to read a 
1dbf0 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61  record.  That wa
1dc00 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a  y, if no reads.*
1dc10 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65  * occur, no unne
1dc20 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70  cessary I/O happ
1dc30 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ens..*/.case OP_
1dc40 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e  Seek: {    /* in
1dc50 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
1dc60 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
1dc70 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1dc80 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1dc90 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1dca0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1dcb0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1dcc0 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
1dcd0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20  pC->pCursor!=0) 
1dce0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1dcf0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1dd00 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1dd10 30 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61  0;.    pIn2 = &a
1dd20 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
1dd30 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
1dd40 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  et = sqlite3Vdbe
1dd50 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
1dd60 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1dd70 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43  alid = 0;.    pC
1dd80 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1dd90 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
1dda0 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f  k;.}.  ../* Opco
1ddb0 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20  de: Found P1 P2 
1ddc0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1ddd0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 5d 2e 2e  sis: key=r[P3]..
1dde0 20 4e 3d 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50   N=P4.**.** If P
1ddf0 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
1de00 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1de10 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1de20 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
1de30 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
1de40 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
1de50 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
1de60 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
1de70 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
1de80 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43   record..**.** C
1de90 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
1dea0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
1deb0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
1dec0 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
1ded0 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72  nd P4.** is a pr
1dee0 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72  efix of any entr
1def0 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a  y in P1 then a j
1df00 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
1df10 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c  2 and.** P1 is l
1df20 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1df30 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  the matching ent
1df40 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ry..**.** See al
1df50 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  so: NotFound, No
1df60 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69  Conflict, NotExi
1df70 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f  sts. SeekGe.*/./
1df80 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75  * Opcode: NotFou
1df90 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
1dfa0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1dfb0 79 3d 72 5b 50 33 5d 20 4e 3d 50 34 0a 2a 2a 0a  y=r[P3] N=P4.**.
1dfc0 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
1dfd0 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
1dfe0 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
1dff0 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
1e000 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
1e010 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1e020 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
1e030 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
1e040 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
1e050 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
1e060 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  ** .** Cursor P1
1e070 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
1e080 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
1e090 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
1e0a0 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
1e0b0 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66   is not the pref
1e0c0 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20  ix of any entry 
1e0d0 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d  in P1 then a jum
1e0e0 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e  p is made to P2.
1e0f0 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73    If P1 .** does
1e100 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72   contain an entr
1e110 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d  y whose prefix m
1e120 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34  atches the P3/P4
1e130 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e   record then con
1e140 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68  trol.** falls th
1e150 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1e160 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e  t instruction an
1e170 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  d P1 is left poi
1e180 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20  nting at the.** 
1e190 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
1e1a0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1e1b0 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
1e1c0 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a  , NoConflict.*/.
1e1d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e  /* Opcode: NoCon
1e1e0 66 6c 69 63 74 20 50 31 20 50 32 20 50 33 20 50  flict P1 P2 P3 P
1e1f0 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  4 *.**.** If P4=
1e200 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
1e210 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1e220 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1e230 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
1e240 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
1e250 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
1e260 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
1e270 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
1e280 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
1e290 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
1e2a0 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1e2b0 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1e2c0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1e2d0 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1e2e0 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  d P4.** contains
1e2f0 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c   any NULL value,
1e300 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1e310 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c  y to P2.  If all
1e320 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a   terms of the.**
1e330 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d   record are not-
1e340 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63  NULL then a chec
1e350 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74  k is done to det
1e360 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f  ermine if any ro
1e370 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69  w in the.** P1 i
1e380 6e 64 65 78 20 62 74 72 65 65 20 68 61 73 20 61  ndex btree has a
1e390 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72   matching key pr
1e3a0 65 66 69 78 2e 20 20 49 66 20 74 68 65 72 65 20  efix.  If there 
1e3b0 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20  are no matches, 
1e3c0 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  jump.** immediat
1e3d0 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74  ely to P2.  If t
1e3e0 68 65 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c  here is a match,
1e3f0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e   fall through an
1e400 64 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a  d leave the P1.*
1e410 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  * cursor pointin
1e420 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e  g to the matchin
1e430 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  g row..**.** Thi
1e440 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69  s opcode is simi
1e450 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75  lar to OP_NotFou
1e460 6e 64 20 77 69 74 68 20 74 68 65 20 65 78 63 65  nd with the exce
1e470 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a  ptions that the.
1e480 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77  ** branch is alw
1e490 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79  ays taken if any
1e4a0 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 65 61   part of the sea
1e4b0 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73  rch key input is
1e4c0 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   NULL..**.** See
1e4d0 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
1e4e0 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
1e4f0 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43  s.*/.case OP_NoC
1e500 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20  onflict:     /* 
1e510 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1e520 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20  e OP_NotFound:  
1e530 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1e540 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75  3 */.case OP_Fou
1e550 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
1e560 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1e570 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  nt alreadyExists
1e580 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64  ;.  int ii;.  Vd
1e590 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1e5a0 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20  int res;.  char 
1e5b0 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b  *pFree;.  Unpack
1e5c0 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65  edRecord *pIdxKe
1e5d0 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  y;.  UnpackedRec
1e5e0 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54  ord r;.  char aT
1e5f0 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69  empRec[ROUND8(si
1e600 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63  zeof(UnpackedRec
1e610 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d  ord)) + sizeof(M
1e620 65 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69 66  em)*3 + 7];..#if
1e630 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1e640 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1e650 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e!=OP_NoConflict
1e660 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64   ) sqlite3_found
1e670 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1e680 0a 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74  ..  alreadyExist
1e690 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  s = 0;.  assert(
1e6a0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1e6b0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1e6c0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1e6d0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1e6e0 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70  NT32 );.  pC = p
1e6f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1e700 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1e710 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  0 );.  pIn3 = &a
1e720 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1e730 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70  if( ALWAYS(pC->p
1e740 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 0a 20  Cursor!=0) ){.. 
1e750 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1e760 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20  sTable==0 );.   
1e770 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30   if( pOp->p4.i>0
1e780 20 29 7b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79   ){.      r.pKey
1e790 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
1e7a0 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69  nfo;.      r.nFi
1e7b0 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
1e7c0 70 34 2e 69 3b 0a 20 20 20 20 20 20 72 2e 61 4d  p4.i;.      r.aM
1e7d0 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65  em = pIn3;.#ifde
1e7e0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1e7f0 20 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f       { int i; fo
1e800 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
1e810 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
1e820 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
1e830 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
1e840 69 66 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  if.      r.flags
1e850 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46   = UNPACKED_PREF
1e860 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  IX_MATCH;.      
1e870 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20  pIdxKey = &r;.  
1e880 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
1e890 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  IdxKey = sqlite3
1e8a0 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65  VdbeAllocUnpacke
1e8b0 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20  dRecord(.       
1e8c0 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c     pC->pKeyInfo,
1e8d0 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f   aTempRec, sizeo
1e8e0 66 28 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46  f(aTempRec), &pF
1e8f0 72 65 65 0a 20 20 20 20 20 20 29 3b 20 0a 20 20  ree.      ); .  
1e900 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d      if( pIdxKey=
1e910 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1e920 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1e930 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1e940 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20  M_Blob );.      
1e950 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66  assert( (pIn3->f
1e960 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29  lags & MEM_Zero)
1e970 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a 65 72 6f 62  ==0 );  /* zerob
1e980 6c 6f 62 73 20 61 6c 72 65 61 64 79 20 65 78 70  lobs already exp
1e990 61 6e 64 65 64 20 2a 2f 0a 20 20 20 20 20 20 73  anded */.      s
1e9a0 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
1e9b0 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49  Unpack(pC->pKeyI
1e9c0 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49  nfo, pIn3->n, pI
1e9d0 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b  n3->z, pIdxKey);
1e9e0 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 2d 3e  .      pIdxKey->
1e9f0 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45  flags |= UNPACKE
1ea00 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a  D_PREFIX_MATCH;.
1ea10 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f      }.    if( pO
1ea20 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
1ea30 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20  Conflict ){.    
1ea40 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f    /* For the OP_
1ea50 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64  NoConflict opcod
1ea60 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  e, take the jump
1ea70 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20   if any of the. 
1ea80 20 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69       ** input fi
1ea90 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73  elds are NULL, s
1eaa0 69 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74  ince any key wit
1eab0 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f  h a NULL will no
1eac0 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 66 6c  t.      ** confl
1ead0 69 63 74 20 2a 2f 0a 20 20 20 20 20 20 66 6f 72  ict */.      for
1eae0 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65  (ii=0; ii<r.nFie
1eaf0 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  ld; ii++){.     
1eb00 20 20 20 69 66 28 20 72 2e 61 4d 65 6d 5b 69 69     if( r.aMem[ii
1eb10 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
1eb20 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ll ){.          
1eb30 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1eb40 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;.          brea
1eb50 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
1eb60 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72     }.    }.    r
1eb70 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1eb80 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1eb90 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78  C->pCursor, pIdx
1eba0 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29  Key, 0, 0, &res)
1ebb0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
1ebc0 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  4.i==0 ){.      
1ebd0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
1ebe0 2c 20 70 46 72 65 65 29 3b 0a 20 20 20 20 7d 0a  , pFree);.    }.
1ebf0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1ec00 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62  TE_OK ){.      b
1ec10 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
1ec20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
1ec30 28 72 65 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43  (res==0);.    pC
1ec40 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c  ->nullRow = 1-al
1ec50 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 20  readyExists;.   
1ec60 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1ec70 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
1ec80 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1ec90 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
1eca0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1ecb0 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20  e==OP_Found ){. 
1ecc0 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78     if( alreadyEx
1ecd0 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d  ists ) pc = pOp-
1ece0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p2 - 1;.  }else
1ecf0 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65 61  {.    if( !alrea
1ed00 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20  dyExists ) pc = 
1ed10 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1ed20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1ed30 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74  Opcode: NotExist
1ed40 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
1ed50 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
1ed60 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50  ey=r[P3].**.** P
1ed70 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
1ed80 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20  f a cursor open 
1ed90 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  on an SQL table 
1eda0 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65  btree (with inte
1edb0 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50  ger.** keys).  P
1edc0 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  3 is an integer 
1edd0 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f  rowid.  If P1 do
1ede0 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  es not contain a
1edf0 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20   record with.** 
1ee00 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
1ee10 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1ee20 6f 20 50 32 2e 20 20 49 66 20 50 31 20 64 6f 65  o P2.  If P1 doe
1ee30 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  s contain a reco
1ee40 72 64 0a 2a 2a 20 77 69 74 68 20 72 6f 77 69 64  rd.** with rowid
1ee50 20 50 33 20 74 68 65 6e 20 6c 65 61 76 65 20 74   P3 then leave t
1ee60 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  he cursor pointi
1ee70 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72  ng at that recor
1ee80 64 20 61 6e 64 20 66 61 6c 6c 0a 2a 2a 20 74 68  d and fall.** th
1ee90 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1eea0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
1eeb0 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46  *.** The OP_NotF
1eec0 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66  ound opcode perf
1eed0 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
1eee0 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78  eration on index
1eef0 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68   btrees.** (with
1ef00 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69   arbitrary multi
1ef10 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a  -value keys)..**
1ef20 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1ef30 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  und, NotFound, N
1ef40 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61 73  oConflict.*/.cas
1ef50 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
1ef60 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1ef70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43  , in3 */.  VdbeC
1ef80 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
1ef90 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1efa0 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69  int res;.  u64 i
1efb0 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26  Key;..  pIn3 = &
1efc0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1efd0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1efe0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1eff0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1f000 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1f010 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1f020 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1f030 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1f040 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1f050 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1f060 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
1f070 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
1f080 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  eg==0 );.  pCrsr
1f090 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
1f0a0 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72    if( ALWAYS(pCr
1f0b0 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 65  sr!=0) ){.    re
1f0c0 73 20 3d 20 30 3b 0a 20 20 20 20 69 4b 65 79 20  s = 0;.    iKey 
1f0d0 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn3->u.i;.   
1f0e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f0f0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1f100 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c  (pCrsr, 0, iKey,
1f110 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70   0, &res);.    p
1f120 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70  C->lastRowid = p
1f130 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 70 43  In3->u.i;.    pC
1f140 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1f150 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20   res==0 ?1:0;.  
1f160 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1f170 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
1f180 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1f190 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 64 65  TALE;.    pC->de
1f1a0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1f1b0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 21 3d 30  ;.    if( res!=0
1f1c0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1f1d0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1f1e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
1f1f0 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b  widIsValid==0 );
1f200 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 73  .    }.    pC->s
1f210 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b  eekResult = res;
1f220 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
1f230 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68   This happens wh
1f240 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20 74 6f  en an attempt to
1f250 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63 75 72   open a read cur
1f260 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20 20 20  sor on the .    
1f270 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ** sqlite_master
1f280 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73 20 53   table returns S
1f290 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20 20 20  QLITE_EMPTY..   
1f2a0 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   */.    pc = pOp
1f2b0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73  ->p2 - 1;.    as
1f2c0 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
1f2d0 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20  sValid==0 );.   
1f2e0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1f2f0 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 0;.  }.  break
1f300 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1f310 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a  Sequence P1 P2 *
1f320 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1f330 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
1f340 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
1f350 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
1f360 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
1f370 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
1f380 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
1f390 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
1f3a0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
1f3b0 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1f3c0 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
1f3d0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
1f3e0 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
1f3f0 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
1f400 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
1f410 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
1f420 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
1f430 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
1f440 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1f450 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1f460 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
1f470 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29  sr[pOp->p1]!=0 )
1f480 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1f490 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1f4a0 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20  ]->seqCount++;. 
1f4b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
1f4c0 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20  pcode: NewRowid 
1f4d0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
1f4e0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
1f4f0 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20  rowid.**.** Get 
1f500 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65  a new integer re
1f510 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b  cord number (a.k
1f520 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64  .a "rowid") used
1f530 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61   as the key to a
1f540 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72   table..** The r
1f550 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
1f560 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
1f570 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20  sed as a key in 
1f580 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
1f590 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f  table that curso
1f5a0 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20  r P1 points to. 
1f5b0 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
1f5c0 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65  number is writte
1f5d0 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20  n.** written to 
1f5e0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
1f5f0 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20  ** If P3>0 then 
1f600 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P3 is a register
1f610 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
1f620 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20  me of this VDBE 
1f630 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74  that holds .** t
1f640 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69  he largest previ
1f650 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20  ously generated 
1f660 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e  record number. N
1f670 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
1f680 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f  bers are.** allo
1f690 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74  wed to be less t
1f6a0 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
1f6b0 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
1f6c0 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
1f6d0 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49  mum, .** an SQLI
1f6e0 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73  TE_FULL error is
1f6f0 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20   generated. The 
1f700 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P3 register is u
1f710 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
1f720 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  '.** generated r
1f730 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68  ecord number. Th
1f740 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20  is P3 mechanism 
1f750 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  is used to help 
1f760 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  implement the.**
1f770 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66   AUTOINCREMENT f
1f780 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
1f790 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20  OP_NewRowid: {  
1f7a0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1f7b0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
1f7c0 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20   i64 v;         
1f7d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
1f7e0 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64  ew rowid */.  Vd
1f7f0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
1f800 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f       /* Cursor o
1f810 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74  f table to get t
1f820 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
1f830 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
1f840 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
1f850 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33  lt of an sqlite3
1f860 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
1f870 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20   int cnt;       
1f880 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
1f890 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  er to limit the 
1f8a0 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68  number of search
1f8b0 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  es */.  Mem *pMe
1f8c0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  m;             /
1f8d0 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1f8e0 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64  ng largest rowid
1f8f0 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45   for AUTOINCREME
1f900 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  NT */.  VdbeFram
1f910 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f  e *pFrame;     /
1f920 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  * Root frame of 
1f930 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30  VDBE */..  v = 0
1f940 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61  ;.  res = 0;.  a
1f950 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1f960 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1f970 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1f980 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1f990 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1f9a0 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45  C!=0 );.  if( NE
1f9b0 56 45 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d  VER(pC->pCursor=
1f9c0 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  =0) ){.    /* Th
1f9d0 65 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a  e zero initializ
1f9e0 61 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61  ation above is a
1f9f0 6c 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65  ll that is neede
1fa00 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  d */.  }else{.  
1fa10 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f    /* The next ro
1fa20 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75  wid or record nu
1fa30 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20  mber (different 
1fa40 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61  terms for the sa
1fa50 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29  me.    ** thing)
1fa60 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20   is obtained in 
1fa70 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72  a two-step algor
1fa80 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
1fa90 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74   ** First we att
1faa0 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
1fab0 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
1fac0 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20  g rowid and add 
1fad0 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68  one.    ** to th
1fae0 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  at.  But if the 
1faf0 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
1fb00 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64   rowid is alread
1fb10 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20  y the maximum.  
1fb20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e    ** positive in
1fb30 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74  teger, we have t
1fb40 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  o fall through t
1fb50 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20  o the second.   
1fb60 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69   ** probabilisti
1fb70 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20  c algorithm.    
1fb80 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65  **.    ** The se
1fb90 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69  cond algorithm i
1fba0 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f  s to select a ro
1fbb0 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  wid at random an
1fbc0 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  d see if.    ** 
1fbd0 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  it already exist
1fbe0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
1fbf0 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   If it does not 
1fc00 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20  exist, we have. 
1fc10 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e     ** succeeded.
1fc20 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20    If the random 
1fc30 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74  rowid does exist
1fc40 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65  , we select a ne
1fc50 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64  w one.    ** and
1fc60 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74   try again, up t
1fc70 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20  o 100 times..   
1fc80 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
1fc90 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a  pC->isTable );..
1fca0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32  #ifdef SQLITE_32
1fcb0 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65  BIT_ROWID.#   de
1fcc0 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30  fine MAX_ROWID 0
1fcd0 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a  x7fffffff.#else.
1fce0 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70      /* Some comp
1fcf0 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  ilers complain a
1fd00 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f  bout constants o
1fd10 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66  f the form 0x7ff
1fd20 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20  fffffffffffff.. 
1fd30 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d     ** Others com
1fd40 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66  plain about 0x7f
1fd50 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c  fffffffffffffffL
1fd60 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  L.  The followin
1fd70 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20  g macro seems.  
1fd80 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20    ** to provide 
1fd90 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69  the constant whi
1fda0 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f  le making all co
1fdb0 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20  mpilers happy.. 
1fdc0 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65     */.#   define
1fdd0 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34   MAX_ROWID  (i64
1fde0 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66  )( (((u64)0x7fff
1fdf0 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36  ffff)<<32) | (u6
1fe00 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23  4)0xffffffff ).#
1fe10 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21  endif..    if( !
1fe20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1fe30 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  id ){.      v = 
1fe40 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 43  sqlite3BtreeGetC
1fe50 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1fe60 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 69  Cursor);.      i
1fe70 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20  f( v==0 ){.     
1fe80 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1fe90 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75  treeLast(pC->pCu
1fea0 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1feb0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1fec0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1fed0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1fee0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1fef0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1ff00 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
1ff10 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20      v = 1;   /* 
1ff20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30  IMP: R-61914-480
1ff30 37 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 65  74 */.        }e
1ff40 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 61  lse{.          a
1ff50 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
1ff60 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
1ff70 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b  (pC->pCursor) );
1ff80 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
1ff90 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
1ffa0 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
1ffb0 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20   &v);.          
1ffc0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
1ffd0 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61  TE_OK );   /* Ca
1ffe0 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77  nnot fail follow
1fff0 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20  ing BtreeLast() 
20000 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  */.          if(
20010 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b   v>=MAX_ROWID ){
20020 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 43 2d  .            pC-
20030 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
20040 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = 1;.          }
20050 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
20060 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a    v++;   /* IMP:
20070 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a   R-29538-34987 *
20080 2f 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  /.          }.  
20090 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
200a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
200b0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
200c0 4e 54 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  NT.      if( pOp
200d0 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 20 20  ->p3 ){.        
200e0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
200f0 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
20100 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
20110 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
20120 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
20130 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
20140 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ){.          for
20150 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
20160 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
20170 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
20180 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
20190 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
201a0 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
201b0 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
201c0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73   */.          as
201d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
201e0 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
201f0 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20           pMem = 
20200 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
20210 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
20220 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
20230 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
20240 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
20250 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
20260 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
20270 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
20280 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
20290 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20  .          pMem 
202a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
202b0 3b 0a 20 20 20 20 20 20 20 20 20 20 6d 65 6d 41  ;.          memA
202c0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
202d0 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 7d  pMem);.        }
202e0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
202f0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d   memIsValid(pMem
20300 29 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 52 45  ) );..        RE
20310 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
20320 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ->p3, pMem);.   
20330 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
20340 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d  MemIntegerify(pM
20350 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  em);.        ass
20360 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
20370 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
20380 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68  );  /* mem(P3) h
20390 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20  olds an integer 
203a0 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  */.        if( p
203b0 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f  Mem->u.i==MAX_RO
203c0 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61  WID || pC->useRa
203d0 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
203e0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
203f0 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d  TE_FULL;   /* IM
20400 50 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38  P: R-12275-61338
20410 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 67 6f   */.          go
20420 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
20430 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d  error;.        }
20440 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3c 70  .        if( v<p
20450 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20  Mem->u.i+1 ){.  
20460 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d          v = pMem
20470 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20  ->u.i + 1;.     
20480 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65     }.        pMe
20490 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20  m->u.i = v;.    
204a0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
204b0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
204c0 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
204d0 3e 70 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f  >pCursor, v<MAX_
204e0 52 4f 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29  ROWID ? v+1 : 0)
204f0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
20500 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
20510 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  id ){.      /* I
20520 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
20530 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20  : R-07677-41881 
20540 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52  If the largest R
20550 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f  OWID is equal to
20560 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61   the.      ** la
20570 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69  rgest possible i
20580 6e 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30  nteger (92233720
20590 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65  36854775807) the
205a0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  n the database. 
205b0 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73       ** engine s
205c0 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f  tarts picking po
205d0 73 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65  sitive candidate
205e0 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f   ROWIDs at rando
205f0 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a  m until.      **
20600 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68   it finds one th
20610 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  at is not previo
20620 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20  usly used. */.  
20630 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20640 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65  >p3==0 );  /* We
20650 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61   cannot be in ra
20660 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20  ndom rowid mode 
20670 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20  if this is.     
20680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20690 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55          ** an AU
206a0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
206b0 65 2e 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f  e. */.      /* o
206c0 6e 20 74 68 65 20 66 69 72 73 74 20 61 74 74 65  n the first atte
206d0 6d 70 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f  mpt, simply do o
206e0 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65  ne more than pre
206f0 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76  vious */.      v
20700 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
20710 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f      v &= (MAX_RO
20720 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75  WID>>1); /* ensu
20730 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65  re doesn't go ne
20740 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20  gative */.      
20750 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e  v++; /* ensure n
20760 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20  on-zero */.     
20770 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20   cnt = 0;.      
20780 77 68 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20  while(   ((rc = 
20790 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
207a0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
207b0 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
207c0 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  v,.             
207d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207f0 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53      0, &res))==S
20800 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20  QLITE_OK).      
20810 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30        && (res==0
20820 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
20830 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20   (++cnt<100)){. 
20840 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73         /* collis
20850 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65  ion - try anothe
20860 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a  r random rowid *
20870 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  /.        sqlite
20880 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a  3_randomness(siz
20890 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20  eof(v), &v);.   
208a0 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29       if( cnt<5 )
208b0 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  {.          /* t
208c0 72 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f  ry "small" rando
208d0 6d 20 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65  m rowids for the
208e0 20 69 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74   initial attempt
208f0 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76  s */.          v
20900 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20   &= 0xffffff;.  
20910 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
20920 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58         v &= (MAX
20930 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65  _ROWID>>1); /* e
20940 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f  nsure doesn't go
20950 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20   negative */.   
20960 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76       }.        v
20970 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f  ++; /* ensure no
20980 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n-zero */.      
20990 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  }.      if( rc==
209a0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
209b0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
209c0 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
209d0 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32     /* IMP: R-382
209e0 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20  19-53002 */.    
209f0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
20a00 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
20a10 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
20a20 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56  t( v>0 );  /* EV
20a30 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20  : R-40812-03570 
20a40 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  */.    }.    pC-
20a50 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
20a60 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  0;.    pC->defer
20a70 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
20a80 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
20a90 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
20aa0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
20ab0 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
20ac0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
20ad0 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34  sert P1 P2 P3 P4
20ae0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
20af0 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61   intkey=r[P3] da
20b00 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57  ta=r[P2].**.** W
20b10 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e  rite an entry in
20b20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20  to the table of 
20b30 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65  cursor P1.  A ne
20b40 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72  w entry is.** cr
20b50 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73  eated if it does
20b60 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73  n't already exis
20b70 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f  t or the data fo
20b80 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a  r an existing.**
20b90 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72   entry is overwr
20ba0 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61  itten.  The data
20bb0 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45   is the value ME
20bc0 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e  M_Blob stored in
20bd0 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d   register.** num
20be0 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20  ber P2. The key 
20bf0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
20c00 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65  ister P3. The ke
20c10 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d  y must.** be a M
20c20 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  EM_Int..**.** If
20c30 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
20c40 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69  NGE flag of P5 i
20c50 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
20c60 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
20c70 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
20c80 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
20c90 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c  t).  If the OPFL
20ca0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61  AG_LASTROWID fla
20cb0 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a  g of P5 is set,.
20cc0 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73  ** then rowid is
20cd0 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73   stored for subs
20ce0 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79  equent return by
20cf0 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
20d00 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
20d10 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74  d() function (ot
20d20 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e  herwise it is un
20d30 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a  modified)..**.**
20d40 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55   If the OPFLAG_U
20d50 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
20d60 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  g of P5 is set a
20d70 6e 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  nd if the result
20d80 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20   of.** the last 
20d90 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28  seek operation (
20da0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61  OP_NotExists) wa
20db0 73 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65  s a success, the
20dc0 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74  n this.** operat
20dd0 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74  ion will not att
20de0 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
20df0 20 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77   appropriate row
20e00 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a   before doing.**
20e10 20 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20   the insert but 
20e20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65  will instead ove
20e30 72 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74  rwrite the row t
20e40 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69  hat the cursor i
20e50 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70  s.** currently p
20e60 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65  ointing to.  Pre
20e70 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69  sumably, the pri
20e80 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  or OP_NotExists 
20e90 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c  opcode.** has al
20ea0 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64  ready positioned
20eb0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72   the cursor corr
20ec0 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20  ectly.  This is 
20ed0 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a  an optimization.
20ee0 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70  ** that boosts p
20ef0 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76  erformance by av
20f00 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74  oiding redundant
20f10 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   seeks..**.** If
20f20 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
20f30 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
20f40 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  , then this opco
20f50 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  de is part of an
20f60 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61  .** UPDATE opera
20f70 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65  tion.  Otherwise
20f80 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73   (if the flag is
20f90 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69   clear) then thi
20fa0 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70  s opcode.** is p
20fb0 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  art of an INSERT
20fc0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65   operation.  The
20fd0 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f   difference is o
20fe0 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f  nly important to
20ff0 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68  .** the update h
21000 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d  ook..**.** Param
21010 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e  eter P4 may poin
21020 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f  t to a string co
21030 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
21040 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d  le-name, or.** m
21050 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69  ay be NULL. If i
21060 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  t is not NULL, t
21070 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68  hen the update-h
21080 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33  ook .** (sqlite3
21090 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  .xUpdateCallback
210a0 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c  ) is invoked fol
210b0 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73  lowing a success
210c0 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a  ful insert..**.*
210d0 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a  * (WARNING/TODO:
210e0 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75   If P1 is a pseu
210f0 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32  do-cursor and P2
21100 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a   is dynamically.
21110 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68  ** allocated, th
21120 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20  en ownership of 
21130 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  P2 is transferre
21140 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d  d to the pseudo-
21150 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65  cursor.** and re
21160 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65  gister P2 become
21170 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66  s ephemeral.  If
21180 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
21190 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76  hanged, the.** v
211a0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
211b0 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68   P2 will then ch
211c0 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65  ange.  Make sure
211d0 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a   this does not.*
211e0 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62  * cause any prob
211f0 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69  lems.).**.** Thi
21200 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
21210 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c  ly works on tabl
21220 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
21230 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
21240 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69  ** for indices i
21250 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a  s OP_IdxInsert..
21260 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  */./* Opcode: In
21270 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33  sertInt P1 P2 P3
21280 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
21290 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64  is:  intkey=P3 d
212a0 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
212b0 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74  This works exact
212c0 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72  ly like OP_Inser
212d0 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  t except that th
212e0 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20  e key is the.** 
212f0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33  integer value P3
21300 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20  , not the value 
21310 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73  of the integer s
21320 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
21330 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
21340 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f  _Insert: .case O
21350 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20  P_InsertInt: {. 
21360 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20   Mem *pData;    
21370 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
21380 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20  olding data for 
21390 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
213a0 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d   inserted */.  M
213b0 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20  em *pKey;       
213c0 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
213d0 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68  ding key  for th
213e0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36  e record */.  i6
213f0 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20  4 iKey;         
21400 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52  /* The integer R
21410 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20  OWID or key for 
21420 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
21430 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56   inserted */.  V
21440 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
21450 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61   /* Cursor to ta
21460 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69  ble into which i
21470 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e  nsert is written
21480 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b   */.  int nZero;
21490 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
214a0 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20  r of zero-bytes 
214b0 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69  to append */.  i
214c0 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20  nt seekResult;  
214d0 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72   /* Result of pr
214e0 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66  ior seek or 0 if
214f0 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c   no USESEEKRESUL
21500 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73  T flag */.  cons
21510 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a  t char *zDb;  /*
21520 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d   database name -
21530 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64   used by the upd
21540 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f  ate hook */.  co
21550 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20  nst char *zTbl; 
21560 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20  /* Table name - 
21570 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 64 61  used by the opda
21580 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74  te hook */.  int
21590 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f   op;           /
215a0 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64  * Opcode for upd
215b0 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45  ate hook: SQLITE
215c0 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54  _UPDATE or SQLIT
215d0 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70  E_INSERT */..  p
215e0 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Data = &aMem[pOp
215f0 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
21600 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
21610 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
21620 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  r );.  assert( m
21630 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29  emIsValid(pData)
21640 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
21650 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
21660 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
21670 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
21680 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
21690 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
216a0 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
216b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
216c0 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53  Table );.  REGIS
216d0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
216e0 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66  2, pData);..  if
216f0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
21700 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  P_Insert ){.    
21710 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pKey = &aMem[pOp
21720 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
21730 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
21740 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
21750 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
21760 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20  id(pKey) );.    
21770 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
21780 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20  Op->p3, pKey);. 
21790 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e     iKey = pKey->
217a0 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  u.i;.  }else{.  
217b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
217c0 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
217d0 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20  Int );.    iKey 
217e0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a  = pOp->p3;.  }..
217f0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
21800 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
21810 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
21820 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
21830 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
21840 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  ) db->lastRowid 
21850 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b  = lastRowid = iK
21860 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  ey;.  if( pData-
21870 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
21880 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e  l ){.    pData->
21890 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61  z = 0;.    pData
218a0 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  ->n = 0;.  }else
218b0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
218c0 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  ata->flags & (ME
218d0 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20  M_Blob|MEM_Str) 
218e0 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73  );.  }.  seekRes
218f0 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20  ult = ((pOp->p5 
21900 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
21910 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
21920 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20  ekResult : 0);. 
21930 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
21940 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
21950 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74      nZero = pDat
21960 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65  a->u.nZero;.  }e
21970 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d  lse{.    nZero =
21980 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
21990 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52  3BtreeSetCachedR
219a0 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
219b0 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  , 0);.  rc = sql
219c0 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
219d0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
219e0 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20  iKey,.          
219f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a00 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d  pData->z, pData-
21a10 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20  >n, nZero,.     
21a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a30 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f       pOp->p5 & O
21a40 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65  PFLAG_APPEND, se
21a50 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20  ekResult.  );.  
21a60 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
21a70 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65   = 0;.  pC->defe
21a80 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
21a90 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
21aa0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
21ab0 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
21ac0 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
21ad0 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
21ae0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
21af0 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65  K && db->xUpdate
21b00 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
21b10 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62  >p4.z ){.    zDb
21b20 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
21b30 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a  Db].zName;.    z
21b40 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
21b50 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d  .    op = ((pOp-
21b60 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
21b70 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
21b80 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
21b90 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73  INSERT);.    ass
21ba0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
21bb0 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   );.    db->xUpd
21bc0 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
21bd0 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20  pUpdateArg, op, 
21be0 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29  zDb, zTbl, iKey)
21bf0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
21c00 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a  ->iDb>=0 );.  }.
21c10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
21c20 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31  pcode: Delete P1
21c30 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
21c40 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f   Delete the reco
21c50 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20  rd at which the 
21c60 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72  P1 cursor is cur
21c70 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e  rently pointing.
21c80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  .**.** The curso
21c90 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70  r will be left p
21ca0 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65  ointing at eithe
21cb0 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68  r the next or th
21cc0 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65  e previous.** re
21cd0 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c  cord in the tabl
21ce0 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74  e. If it is left
21cf0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
21d00 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68   next record, th
21d10 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e  en.** the next N
21d20 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
21d30 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e  will be a no-op.
21d40 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b    Hence it is OK
21d50 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20   to delete.** a 
21d60 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
21d70 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e  in an Next loop.
21d80 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
21d90 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
21da0 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20  g of P2 is set, 
21db0 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
21dc0 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
21dd0 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
21de0 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a  erwise not)..**.
21df0 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62  ** P1 must not b
21e00 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  e pseudo-table. 
21e10 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20   It has to be a 
21e20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a  real table with.
21e30 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  ** multiple rows
21e40 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
21e50 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
21e60 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  it is the name o
21e70 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
21e80 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69   P1 is.** pointi
21e90 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61  ng to.  The upda
21ea0 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te hook will be 
21eb0 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65  invoked, if it e
21ec0 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20  xists..** If P4 
21ed0 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e  is not NULL then
21ee0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
21ef0 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f  ust have been po
21f00 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e  sitioned.** usin
21f10 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72  g OP_NotFound pr
21f20 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20  ior to invoking 
21f30 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
21f40 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20  case OP_Delete: 
21f50 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20  {.  i64 iKey;.  
21f60 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
21f70 0a 20 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61  .  iKey = 0;.  a
21f80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
21f90 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
21fa0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
21fb0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
21fc0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
21fd0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
21fe0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
21ff0 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c   );  /* Only val
22000 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c  id for real tabl
22010 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62  es, no pseudotab
22020 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20  les */..  /* If 
22030 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
22040 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
22050 20 73 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65   set iKey to the
22060 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20   rowid of the.  
22070 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c  ** row being del
22080 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  eted..  */.  if(
22090 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
220a0 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
220b0 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  z ){.    assert(
220c0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
220d0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
220e0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 3b 20  rowidIsValid ); 
220f0 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20 73 65   /* lastRowid se
22100 74 20 62 79 20 70 72 65 76 69 6f 75 73 20 4f 50  t by previous OP
22110 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20  _NotFound */.   
22120 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74   iKey = pC->last
22130 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  Rowid;.  }..  /*
22140 20 54 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f   The OP_Delete o
22150 70 63 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c  pcode always fol
22160 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78  lows an OP_NotEx
22170 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20  ists or OP_Last 
22180 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d  or.  ** OP_Colum
22190 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61  n on the same ta
221a0 62 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20  ble without any 
221b0 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72  intervening oper
221c0 61 74 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a  ations that.  **
221d0 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69   might move or i
221e0 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63 75  nvalidate the cu
221f0 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72  rsor.  Hence cur
22200 73 6f 72 20 70 43 20 69 73 20 61 6c 77 61 79 73  sor pC is always
22210 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74   pointing.  ** t
22220 6f 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20  o the row to be 
22230 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
22240 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
22250 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74  rMoveto() operat
22260 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69  ion.  ** below i
22270 73 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70  s always a no-op
22280 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c   and cannot fail
22290 2e 20 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69  .  We will run i
222a0 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68  t anyhow, though
222b0 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20  ,.  ** to guard 
222c0 61 67 61 69 6e 73 74 20 66 75 74 75 72 65 20 63  against future c
222d0 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f  hanges to the co
222e0 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20  de generator..  
222f0 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43  **/.  assert( pC
22300 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22310 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
22320 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
22330 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
22340 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
22350 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
22360 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
22370 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
22380 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70  SetCachedRowid(p
22390 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a  C->pCursor, 0);.
223a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
223b0 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43  reeDelete(pC->pC
223c0 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61  ursor);.  pC->ca
223d0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
223e0 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
223f0 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
22400 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
22410 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
22420 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
22430 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
22440 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
22450 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
22460 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70  *zDb = db->aDb[p
22470 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
22480 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
22490 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
224a0 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
224b0 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
224c0 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
224d0 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62  DELETE, zDb, zTb
224e0 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  l, iKey);.    as
224f0 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
22500 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   );.  }.  if( pO
22510 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p2 & OPFLAG_N
22520 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
22530 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  nge++;.  break;.
22540 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  }./* Opcode: Res
22550 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20  etCount * * * * 
22560 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  *.**.** The valu
22570 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20  e of the change 
22580 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65  counter is copie
22590 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
225a0 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e  e handle.** chan
225b0 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75  ge counter (retu
225c0 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65  rned by subseque
225d0 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69  nt calls to sqli
225e0 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a  te3_changes())..
225f0 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20  ** Then the VMs 
22600 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20  internal change 
22610 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74  counter resets t
22620 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  o 0..** This is 
22630 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
22640 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73  programs..*/.cas
22650 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a  e OP_ResetCount:
22660 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   {.  sqlite3Vdbe
22670 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
22680 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d  ->nChange);.  p-
22690 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
226a0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
226b0 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61  ode: SorterCompa
226c0 72 65 20 50 31 20 50 32 20 50 33 0a 2a 2a 20 53  re P1 P2 P3.** S
226d0 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b 65 79  ynopsis:  if key
226e0 28 50 31 29 21 3d 72 5b 50 33 5d 20 67 6f 74 6f  (P1)!=r[P3] goto
226f0 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
22700 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
22710 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
22720 6e 20 63 6f 6d 70 61 72 65 73 20 74 68 65 20 72  n compares the r
22730 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 0a 2a  ecord blob in .*
22740 2a 20 72 65 67 69 73 74 65 72 20 50 33 20 77 69  * register P3 wi
22750 74 68 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  th the entry tha
22760 74 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72  t the sorter cur
22770 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  sor currently po
22780 69 6e 74 73 20 74 6f 2e 0a 2a 2a 20 49 66 2c 20  ints to..** If, 
22790 65 78 63 6c 75 64 69 6e 67 20 74 68 65 20 72 6f  excluding the ro
227a0 77 69 64 20 66 69 65 6c 64 73 20 61 74 20 74 68  wid fields at th
227b0 65 20 65 6e 64 2c 20 74 68 65 20 74 77 6f 20 72  e end, the two r
227c0 65 63 6f 72 64 73 20 61 72 65 20 61 20 6d 61 74  ecords are a mat
227d0 63 68 2c 0a 2a 2a 20 66 61 6c 6c 20 74 68 72 6f  ch,.** fall thro
227e0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
227f0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 4f 74 68  instruction. Oth
22800 65 72 77 69 73 65 2c 20 6a 75 6d 70 20 74 6f 20  erwise, jump to 
22810 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a  instruction P2..
22820 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
22830 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64  rCompare: {.  Vd
22840 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
22850 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d  int res;..  pC =
22860 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22870 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
22880 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
22890 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
228a0 2d 3e 70 33 5d 3b 0a 20 20 72 63 20 3d 20 73 71  ->p3];.  rc = sq
228b0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43  lite3VdbeSorterC
228c0 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c  ompare(pC, pIn3,
228d0 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 65   &res);.  if( re
228e0 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
228f0 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
22900 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63  reak;.};../* Opc
22910 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20  ode: SorterData 
22920 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
22930 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
22940 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
22950 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
22960 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72   the current sor
22970 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72  ter data for sor
22980 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  ter cursor P1..*
22990 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
229a0 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
229b0 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75  rsor *pC;..  pOu
229c0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
229d0 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  2];.  pC = p->ap
229e0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
229f0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f  assert( pC->isSo
22a00 72 74 65 72 20 29 3b 0a 20 20 72 63 20 3d 20 73  rter );.  rc = s
22a10 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
22a20 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29  Rowkey(pC, pOut)
22a30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
22a40 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61   Opcode: RowData
22a50 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
22a60 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
22a70 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
22a80 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
22a90 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
22aa0 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72 73  ow data for curs
22ab0 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
22ac0 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
22ad0 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
22ae0 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73  .  .** It is jus
22af0 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  t copied onto th
22b00 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78  e P2 register ex
22b10 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
22b20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
22b30 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
22b40 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
22b50 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
22b60 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
22b70 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
22b80 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
22b90 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
22ba0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
22bb0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  /./* Opcode: Row
22bc0 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Key P1 P2 * * *.
22bd0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
22be0 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69  2]=key.**.** Wri
22bf0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
22c00 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
22c10 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72   row key for cur
22c20 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
22c30 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
22c40 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
22c50 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20  a.  .** The key 
22c60 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  is copied onto t
22c70 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 65  he P3 register e
22c80 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
22c90 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
22ca0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
22cb0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
22cc0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
22cd0 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
22ce0 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
22cf0 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
22d00 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
22d10 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
22d20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65  */.case OP_RowKe
22d30 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  y:.case OP_RowDa
22d40 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
22d50 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
22d60 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32  or *pCrsr;.  u32
22d70 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a   n;.  i64 n64;..
22d80 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
22d90 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p2];.  memAb
22da0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
22db0 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65  Out);..  /* Note
22dc0 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64   that RowKey and
22dd0 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61   RowData are rea
22de0 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20  lly exactly the 
22df0 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  same instruction
22e00 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
22e10 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22e20 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22e30 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22e40 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22e50 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74  sert( pC->isSort
22e60 65 72 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  er==0 );.  asser
22e70 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c  t( pC->isTable |
22e80 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
22e90 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61  P_RowData );.  a
22ea0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49 6e 64  ssert( pC->isInd
22eb0 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ex || pOp->opcod
22ec0 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b  e==OP_RowData );
22ed0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
22ee0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
22ef0 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a  ->nullRow==0 );.
22f00 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
22f10 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
22f20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
22f30 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
22f40 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
22f50 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
22f60 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
22f70 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
22f80 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50   );..  /* The OP
22f90 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52  _RowKey and OP_R
22fa0 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61  owData opcodes a
22fb0 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f  lways follow OP_
22fc0 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a  NotExists or.  *
22fd0 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e  * OP_Rewind/Op_N
22fe0 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65  ext with no inte
22ff0 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74  rvening instruct
23000 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
23010 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20  invalidate.  ** 
23020 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
23030 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ce the following
23040 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
23050 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20  orMoveto() call 
23060 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61  is always.  ** a
23070 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e   no-op and can n
23080 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74 20  ever fail.  But 
23090 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20 70  we leave it in p
230a0 6c 61 63 65 20 61 73 20 61 20 73 61 66 65 74 79  lace as a safety
230b0 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
230c0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
230d0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  eto==0 );.  rc =
230e0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
230f0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
23100 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
23110 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
23120 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
23130 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69  or;..  if( pC->i
23140 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 61 73  sIndex ){.    as
23150 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61 62  sert( !pC->isTab
23160 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e  le );.    VVA_ON
23170 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
23180 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
23190 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61  sr, &n64);.    a
231a0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
231b0 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72  E_OK );    /* Tr
231c0 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  ue because of Cu
231d0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
231e0 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69  l above */.    i
231f0 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69  f( n64>db->aLimi
23200 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
23210 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
23220 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
23230 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32    }.    n = (u32
23240 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  )n64;.  }else{. 
23250 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d     VVA_ONLY(rc =
23260 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  ) sqlite3BtreeDa
23270 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e  taSize(pCrsr, &n
23280 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
23290 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
232a0 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29     /* DataSize()
232b0 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a   cannot fail */.
232c0 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64      if( n>(u32)d
232d0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
232e0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
232f0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
23300 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _big;.    }.  }.
23310 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
23320 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e  eMemGrow(pOut, n
23330 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  , 0) ){.    goto
23340 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70   no_mem;.  }.  p
23350 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65  Out->n = n;.  Me
23360 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
23370 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20  t, MEM_Blob);.  
23380 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  if( pC->isIndex 
23390 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
233a0 74 65 33 42 74 72 65 65 4b 65 79 28 70 43 72 73  te3BtreeKey(pCrs
233b0 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
233c0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
233d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
233e0 65 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20  eData(pCrsr, 0, 
233f0 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d  n, pOut->z);.  }
23400 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
23410 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20  QLITE_UTF8;  /* 
23420 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62  In case the blob
23430 20 69 73 20 65 76 65 72 20 63 61 73 74 20 74 6f   is ever cast to
23440 20 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54   text */.  UPDAT
23450 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
23460 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
23470 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
23480 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
23490 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
234a0 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74  ]=rowid.**.** St
234b0 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  ore in register 
234c0 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
234d0 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ich is the key o
234e0 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
234f0 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20  y that.** P1 is 
23500 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
23510 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e  to..**.** P1 can
23520 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72   be either an or
23530 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20  dinary table or 
23540 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
23550 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a    There used to.
23560 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65  ** be a separate
23570 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64   OP_VRowid opcod
23580 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76  e for use with v
23590 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62  irtual tables, b
235a0 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f  ut this.** one o
235b0 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20  pcode now works 
235c0 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74  for both table t
235d0 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ypes..*/.case OP
235e0 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  _Rowid: {       
235f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
23600 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
23610 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
23620 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c  ;.  i64 v;.  sql
23630 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
23640 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
23650 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
23660 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  e;..  assert( pO
23670 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
23680 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
23690 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
236a0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
236b0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
236c0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
236d0 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c  udoTableReg==0 |
236e0 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b  | pC->nullRow );
236f0 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52  .  if( pC->nullR
23700 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  ow ){.    pOut->
23710 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
23720 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
23730 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66  else if( pC->def
23740 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20  erredMoveto ){. 
23750 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74     v = pC->movet
23760 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66  oTarget;.#ifndef
23770 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
23780 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73  TUALTABLE.  }els
23790 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43  e if( pC->pVtabC
237a0 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74  ursor ){.    pVt
237b0 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75  ab = pC->pVtabCu
237c0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20  rsor->pVtab;.   
237d0 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
237e0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61  ->pModule;.    a
237f0 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
23800 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63  xRowid );.    rc
23810 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77   = pModule->xRow
23820 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73  id(pC->pVtabCurs
23830 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c  or, &v);.    sql
23840 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
23850 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
23860 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
23870 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
23880 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20  LE */.  }else{. 
23890 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70     assert( pC->p
238a0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
238b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
238c0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
238d0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
238e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
238f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28  o_error;.    if(
23900 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
23910 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 70  d ){.      v = p
23920 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  C->lastRowid;.  
23930 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
23940 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
23950 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72  KeySize(pC->pCur
23960 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20  sor, &v);.      
23970 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
23980 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77  TE_OK );  /* Alw
23990 61 79 73 20 73 6f 20 62 65 63 61 75 73 65 20 6f  ays so because o
239a0 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  f CursorMoveto()
239b0 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 7d 0a   above */.    }.
239c0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
239d0 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
239e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
239f0 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Row P1 * * * *.*
23a00 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75  *.** Move the cu
23a10 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c  rsor P1 to a nul
23a20 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43  l row.  Any OP_C
23a30 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73  olumn operations
23a40 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77  .** that occur w
23a50 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20  hile the cursor 
23a60 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72  is on the null r
23a70 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a  ow will always.*
23a80 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a  * write a NULL..
23a90 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52  */.case OP_NullR
23aa0 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ow: {.  VdbeCurs
23ab0 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
23ac0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
23ad0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
23ae0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
23af0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
23b00 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
23b10 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   );.  pC->nullRo
23b20 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77  w = 1;.  pC->row
23b30 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
23b40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
23b50 72 73 6f 72 20 7c 7c 20 70 43 2d 3e 70 56 74 61  rsor || pC->pVta
23b60 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  bCursor );.  if(
23b70 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a   pC->pCursor ){.
23b80 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
23b90 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
23ba0 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
23bb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23bc0 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20  ode: Last P1 P2 
23bd0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
23be0 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
23bf0 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
23c00 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
23c10 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
23c20 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
23c30 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
23c40 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
23c50 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
23c60 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
23c70 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
23c80 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
23c90 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
23ca0 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
23cb0 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
23cc0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
23cd0 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
23ce0 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
23cf0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
23d00 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
23d10 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
23d20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
23d30 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
23d40 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
23d50 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
23d60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23d70 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23d80 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
23d90 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
23da0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23db0 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
23dc0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
23dd0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 66 28    res = 0;.  if(
23de0 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30   ALWAYS(pCrsr!=0
23df0 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
23e00 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
23e10 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d  Crsr, &res);.  }
23e20 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
23e30 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e   (u8)res;.  pC->
23e40 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
23e50 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   0;.  pC->rowidI
23e60 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
23e70 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
23e80 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
23e90 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  f( pOp->p2>0 && 
23ea0 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
23eb0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
23ec0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
23ed0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31   Opcode: Sort P1
23ee0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
23ef0 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
23f00 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
23f10 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65  e thing as OP_Re
23f20 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74  wind except that
23f30 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74  .** it increment
23f40 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s an undocumente
23f50 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  d global variabl
23f60 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69  e used for testi
23f70 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e  ng..**.** Sortin
23f80 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65  g is accomplishe
23f90 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63  d by writing rec
23fa0 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74  ords into a sort
23fb0 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68  ing index,.** th
23fc0 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61  en rewinding tha
23fd0 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79  t index and play
23fe0 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d  ing it back from
23ff0 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a   beginning to.**
24000 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68   end.  We use th
24010 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65  e OP_Sort opcode
24020 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52   instead of OP_R
24030 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a  ewind to do the.
24040 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20  ** rewinding so 
24050 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20  that the global 
24060 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65  variable will be
24070 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64   incremented and
24080 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74  .** regression t
24090 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69  ests can determi
240a0 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
240b0 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  t the optimizer 
240c0 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20  is.** correctly 
240d0 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73  optimizing out s
240e0 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  orts..*/.case OP
240f0 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20  _SorterSort:    
24100 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
24110 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20  OP_Sort: {      
24120 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66    /* jump */.#if
24130 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
24140 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63    sqlite3_sort_c
24150 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65  ount++;.  sqlite
24160 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d  3_search_count--
24170 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43  ;.#endif.  p->aC
24180 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
24190 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b  MTSTATUS_SORT]++
241a0 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
241b0 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69  ugh into OP_Rewi
241c0 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  nd */.}./* Opcod
241d0 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20  e: Rewind P1 P2 
241e0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
241f0 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
24200 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
24210 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
24220 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
24230 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
24240 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20   first entry in 
24250 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
24260 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
24270 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
24280 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
24290 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
242a0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
242b0 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
242c0 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
242d0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
242e0 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
242f0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
24300 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
24310 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
24320 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20   OP_Rewind: {   
24330 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
24340 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
24350 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
24360 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
24370 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24380 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
24390 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
243a0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
243b0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
243c0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
243d0 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74  sert( pC->isSort
243e0 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  er==(pOp->opcode
243f0 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29  ==OP_SorterSort)
24400 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20   );.  res = 1;. 
24410 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
24420 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
24430 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
24440 65 77 69 6e 64 28 64 62 2c 20 70 43 2c 20 26 72  ewind(db, pC, &r
24450 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  es);.  }else{.  
24460 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
24470 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72  ursor;.    asser
24480 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20  t( pCrsr );.    
24490 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
244a0 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72  eFirst(pCrsr, &r
244b0 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46  es);.    pC->atF
244c0 69 72 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31  irst = res==0 ?1
244d0 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65  :0;.    pC->defe
244e0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
244f0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
24500 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
24510 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  E;.    pC->rowid
24520 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d  IsValid = 0;.  }
24530 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
24540 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65   (u8)res;.  asse
24550 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  rt( pOp->p2>0 &&
24560 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20   pOp->p2<p->nOp 
24570 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
24580 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
24590 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
245a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
245b0 20 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20   Next P1 P2 * * 
245c0 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65  P5.**.** Advance
245d0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
245e0 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
245f0 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74  the next key/dat
24600 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
24610 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
24620 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
24630 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65  o more key/value
24640 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
24650 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
24660 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
24670 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
24680 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76  f the cursor adv
24690 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73  ance was success
246a0 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
246b0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
246c0 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
246d0 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
246e0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
246f0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
24700 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c  ..**.** P4 is al
24710 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f  ways of type P4_
24720 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e  ADVANCE. The fun
24730 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f  ction pointer po
24740 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  ints to.** sqlit
24750 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a  e3BtreeNext()..*
24760 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f  *.** If P5 is po
24770 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a  sitive and the j
24780 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68  ump is taken, th
24790 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72  en event counter
247a0 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20  .** number P5-1 
247b0 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
247c0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63  statement is inc
247d0 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
247e0 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a  See also: Prev.*
247f0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
24800 76 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a  v P1 P2 * * P5.*
24810 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72  *.** Back up cur
24820 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
24830 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
24840 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74  previous key/dat
24850 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
24860 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
24870 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
24880 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61   previous key/va
24890 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
248a0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
248b0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
248c0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
248d0 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
248e0 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65  backup was succe
248f0 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
24900 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
24910 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
24920 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
24930 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
24940 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
24950 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  le..**.** P4 is 
24960 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
24970 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
24980 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
24990 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
249a0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
249b0 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  s()..**.** If P5
249c0 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
249d0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
249e0 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
249f0 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
24a00 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
24a10 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
24a20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
24a30 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
24a40 72 4e 65 78 74 3a 20 20 20 20 2f 2a 20 6a 75 6d  rNext:    /* jum
24a50 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65  p */.case OP_Pre
24a60 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  v:          /* j
24a70 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
24a80 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ext: {        /*
24a90 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
24aa0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
24ab0 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
24ac0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
24ad0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
24ae0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
24af0 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65  Op->p5<ArraySize
24b00 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b  (p->aCounter) );
24b10 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
24b20 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
24b30 20 70 43 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72   pC==0 ){.    br
24b40 65 61 6b 3b 20 20 2f 2a 20 53 65 65 20 74 69 63  eak;  /* See tic
24b50 6b 65 74 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d  ket #2273 */.  }
24b60 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
24b70 73 53 6f 72 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f  sSorter==(pOp->o
24b80 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
24b90 4e 65 78 74 29 20 29 3b 0a 20 20 69 66 28 20 69  Next) );.  if( i
24ba0 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
24bb0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
24bc0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
24bd0 72 4e 65 78 74 20 29 3b 0a 20 20 20 20 72 63 20  rNext );.    rc 
24be0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
24bf0 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20  terNext(db, pC, 
24c00 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  &res);.  }else{.
24c10 20 20 20 20 2f 2a 20 72 65 73 20 3d 20 31 3b 20      /* res = 1; 
24c20 2f 2f 20 41 6c 77 61 79 73 20 69 6e 69 74 69 61  // Always initia
24c30 6c 69 7a 65 64 20 62 79 20 74 68 65 20 78 41 64  lized by the xAd
24c40 76 61 6e 63 65 28 29 20 63 61 6c 6c 20 2a 2f 0a  vance() call */.
24c50 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
24c60 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
24c70 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
24c80 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a   pC->pCursor );.
24c90 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
24ca0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74  >opcode!=OP_Next
24cb0 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
24cc0 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
24cd0 65 65 4e 65 78 74 20 29 3b 0a 20 20 20 20 61 73  eeNext );.    as
24ce0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
24cf0 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f  e!=OP_Prev || pO
24d00 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
24d10 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
24d20 69 6f 75 73 20 29 3b 0a 20 20 20 20 72 63 20 3d  ious );.    rc =
24d30 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
24d40 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
24d50 72 65 73 29 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e  res);.  }.  pC->
24d60 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
24d70 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  s;.  pC->cacheSt
24d80 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
24d90 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  LE;.  if( res==0
24da0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
24db0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 70 2d  ->p2 - 1;.    p-
24dc0 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70  >aCounter[pOp->p
24dd0 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c  5]++;.#ifdef SQL
24de0 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c  ITE_TEST.    sql
24df0 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
24e00 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a  t++;.#endif.  }.
24e10 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
24e20 69 64 20 3d 20 30 3b 0a 20 20 67 6f 74 6f 20 63  id = 0;.  goto c
24e30 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
24e40 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
24e50 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
24e60 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e  2 P3 * P5.** Syn
24e70 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d  opsis: key=r[P2]
24e80 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
24e90 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20  P2 holds an SQL 
24ea0 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
24eb0 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
24ec0 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
24ed0 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
24ee0 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
24ef0 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e  y.** into the in
24f00 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f  dex P1.  Data fo
24f10 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
24f20 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  il..**.** P3 is 
24f30 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76  a flag that prov
24f40 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74  ides a hint to t
24f50 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  he b-tree layer 
24f60 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73  that this.** ins
24f70 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  ert is likely to
24f80 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a   be an append..*
24f90 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
24fa0 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
24fb0 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54   for indices.  T
24fc0 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
24fd0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
24fe0 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e   tables is OP_In
24ff0 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sert..*/.case OP
25000 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20  _SorterInsert:  
25010 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63       /* in2 */.c
25020 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74  ase OP_IdxInsert
25030 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
25040 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
25050 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
25060 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
25070 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68  nKey;.  const ch
25080 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73  ar *zKey;..  ass
25090 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
250a0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
250b0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
250c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
250d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
250e0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
250f0 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70  pC->isSorter==(p
25100 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
25110 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a  orterInsert) );.
25120 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
25130 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
25140 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  t( pIn2->flags &
25150 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70   MEM_Blob );.  p
25160 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
25170 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53  or;.  if( ALWAYS
25180 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20  (pCrsr!=0) ){.  
25190 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
251a0 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20  Table==0 );.    
251b0 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
251c0 70 49 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 72  pIn2);.    if( r
251d0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
251e0 20 20 20 20 20 20 69 66 28 20 69 73 53 6f 72 74        if( isSort
251f0 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 20 20  er(pC) ){.      
25200 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
25210 62 65 53 6f 72 74 65 72 57 72 69 74 65 28 64 62  beSorterWrite(db
25220 2c 20 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20  , pC, pIn2);.   
25230 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
25240 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e    nKey = pIn2->n
25250 3b 0a 20 20 20 20 20 20 20 20 7a 4b 65 79 20 3d  ;.        zKey =
25260 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20   pIn2->z;.      
25270 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
25280 72 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c  reeInsert(pCrsr,
25290 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c   zKey, nKey, "",
252a0 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20   0, 0, pOp->p3, 
252b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 28 70  .            ((p
252c0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
252d0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
252e0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
252f0 3a 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20  : 0).           
25300 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
25310 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
25320 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
25330 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74       pC->cacheSt
25340 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
25350 4c 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  LE;.      }.    
25360 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
25370 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
25380 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
25390 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
253a0 20 6b 65 79 3d 72 5b 50 32 5d 2e 2e 0a 2a 2a 0a   key=r[P2]...**.
253b0 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
253c0 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
253d0 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
253e0 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
253f0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
25400 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
25410 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
25420 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
25430 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
25440 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
25450 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
25460 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
25470 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
25480 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
25490 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
254a0 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
254b0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
254c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
254d0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
254e0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
254f0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
25500 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
25510 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
25520 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
25530 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
25540 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
25550 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
25560 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
25570 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  sor;.  if( ALWAY
25580 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20  S(pCrsr!=0) ){. 
25590 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
255a0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
255b0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
255c0 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72  6)pOp->p3;.    r
255d0 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20  .flags = 0;.    
255e0 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
255f0 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20  Op->p2];.#ifdef 
25600 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
25610 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
25620 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
25630 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
25640 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
25650 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
25660 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
25670 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
25680 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c  ed(pCrsr, &r, 0,
25690 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
256a0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
256b0 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20   && res==0 ){.  
256c0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
256d0 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73  BtreeDelete(pCrs
256e0 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73  r);.    }.    as
256f0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
25700 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
25710 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
25720 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
25730 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
25740 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
25750 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
25760 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
25770 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
25780 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
25790 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
257a0 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
257b0 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
257c0 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74  e record at.** t
257d0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
257e0 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20  dex key pointed 
257f0 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  to by cursor P1.
25800 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73    This integer s
25810 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20  hould be.** the 
25820 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
25830 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63  le entry to whic
25840 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74  h this index ent
25850 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a  ry points..**.**
25860 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64   See also: Rowid
25870 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f  , MakeRecord..*/
25880 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
25890 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
258a0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
258b0 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72 73  ease */.  BtCurs
258c0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62  or *pCrsr;.  Vdb
258d0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
258e0 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73  64 rowid;..  ass
258f0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
25900 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
25910 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
25920 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
25930 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
25940 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
25950 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 70  pC->pCursor;.  p
25960 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
25970 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 41 4c 57  _Null;.  if( ALW
25980 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b  AYS(pCrsr!=0) ){
25990 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
259a0 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
259b0 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 4e  o(pC);.    if( N
259c0 45 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20  EVER(rc) ) goto 
259d0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
259e0 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  or;.    assert( 
259f0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
25a00 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  to==0 );.    ass
25a10 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
25a20 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  ==0 );.    if( !
25a30 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
25a40 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
25a50 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62  3VdbeIdxRowid(db
25a60 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29  , pCrsr, &rowid)
25a70 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
25a80 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
25a90 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
25aa0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
25ab0 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4f 75 74      }.      pOut
25ac0 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20  ->u.i = rowid;. 
25ad0 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
25ae0 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
25af0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
25b00 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
25b10 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GE P1 P2 P3 P4 P
25b20 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
25b30 65 79 3d 72 5b 50 33 5d 20 4e 3d 50 34 0a 2a 2a  ey=r[P3] N=P4.**
25b40 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
25b50 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
25b60 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
25b70 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
25b80 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
25b90 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44   omits the ROWID
25ba0 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
25bb0 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
25bc0 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
25bd0 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
25be0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
25bf0 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52  , ignoring the R
25c00 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
25c10 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
25c20 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
25c30 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
25c40 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
25c50 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
25c60 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
25c70 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
25c80 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
25c90 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
25ca0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
25cb0 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68  non-zero then th
25cc0 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69  e key value is i
25cd0 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65  ncreased by an e
25ce0 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72  psilon .** prior
25cf0 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   to the comparis
25d00 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20 74  on.  This make t
25d10 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
25d20 69 6b 65 20 49 64 78 47 54 20 65 78 63 65 70 74  ike IdxGT except
25d30 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65 20  .** that if the 
25d40 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74 65  key from registe
25d50 72 20 50 33 20 69 73 20 61 20 70 72 65 66 69 78  r P3 is a prefix
25d60 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20 74   of the key in t
25d70 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  he cursor,.** th
25d80 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
25d90 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f 75  e whereas it wou
25da0 6c 64 20 62 65 20 74 72 75 65 20 77 69 74 68 20  ld be true with 
25db0 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  IdxGT..*/./* Opc
25dc0 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32  ode: IdxLT P1 P2
25dd0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
25de0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 5d  opsis: key=r[P3]
25df0 20 4e 3d 50 34 0a 2a 2a 0a 2a 2a 20 54 68 65 20   N=P4.**.** The 
25e00 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
25e10 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
25e20 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
25e30 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
25e40 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
25e50 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  he ROWID.  Compa
25e60 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
25e70 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
25e80 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
25e90 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
25ea0 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
25eb0 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20  ng the ROWID on 
25ec0 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
25ed0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
25ee0 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73  dex entry is les
25ef0 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
25f00 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74  alue then jump t
25f10 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69  o P2..** Otherwi
25f20 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
25f30 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
25f40 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
25f50 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
25f60 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61   then the key va
25f70 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64  lue is increased
25f80 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70   by an epsilon p
25f90 72 69 6f 72 20 0a 2a 2a 20 74 6f 20 74 68 65 20  rior .** to the 
25fa0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69  comparison.  Thi
25fb0 73 20 6d 61 6b 65 73 20 74 68 65 20 6f 70 63 6f  s makes the opco
25fc0 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78  de work like Idx
25fd0 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  LE..*/.case OP_I
25fe0 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f  dxLT:          /
25ff0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
26000 50 5f 49 64 78 47 45 3a 20 7b 20 20 20 20 20 20  P_IdxGE: {      
26010 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
26020 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
26030 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
26040 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20  ckedRecord r;.. 
26050 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
26060 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
26070 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
26080 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
26090 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
260a0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
260b0 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
260c0 64 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  d );.  if( ALWAY
260d0 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  S(pC->pCursor!=0
260e0 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
260f0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
26100 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73  eto==0 );.    as
26110 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
26120 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29   || pOp->p5==1 )
26130 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
26140 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
26150 54 33 32 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65  T32 );.    r.pKe
26160 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
26170 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
26180 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
26190 34 2e 69 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  4.i;.    if( pOp
261a0 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 72 2e  ->p5 ){.      r.
261b0 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44  flags = UNPACKED
261c0 5f 49 4e 43 52 4b 45 59 20 7c 20 55 4e 50 41 43  _INCRKEY | UNPAC
261d0 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
261e0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
261f0 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50     r.flags = UNP
26200 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54  ACKED_PREFIX_MAT
26210 43 48 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 2e  CH;.    }.    r.
26220 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
26230 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
26240 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
26250 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
26260 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
26270 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
26280 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
26290 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
262a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
262b0 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 70  eIdxKeyCompare(p
262c0 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20  C, &r, &res);.  
262d0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
262e0 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  e==OP_IdxLT ){. 
262f0 20 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b       res = -res;
26300 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
26310 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
26320 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20  pcode==OP_IdxGE 
26330 29 3b 0a 20 20 20 20 20 20 72 65 73 2b 2b 3b 0a  );.      res++;.
26340 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 65      }.    if( re
26350 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20  s>0 ){.      pc 
26360 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a  = pOp->p2 - 1 ;.
26370 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
26380 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26390 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20 50   Destroy P1 P2 P
263a0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  3 * *.**.** Dele
263b0 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74  te an entire dat
263c0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
263d0 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20  ndex whose root 
263e0 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74 61  page in the data
263f0 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20  base.** file is 
26400 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a  given by P1..**.
26410 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
26420 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73 20  ng destroyed is 
26430 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
26440 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d  base file if P3=
26450 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31  =0.  If.** P3==1
26460 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
26470 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
26480 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
26490 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
264a0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
264b0 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
264c0 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
264d0 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
264e0 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f  E..**.** If AUTO
264f0 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65  VACUUM is enable
26500 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73  d then it is pos
26510 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68  sible that anoth
26520 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  er root page.** 
26530 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69  might be moved i
26540 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65  nto the newly de
26550 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20  leted root page 
26560 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
26570 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67   all.** root pag
26580 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74  es contiguous at
26590 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
265a0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  f the database. 
265b0 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76   The former.** v
265c0 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74  alue of the root
265d0 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64   page that moved
265e0 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65 66   - its value bef
265f0 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63  ore the move occ
26600 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74  urred -.** is st
26610 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
26620 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65   P2.  If no page
26630 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61   .** movement wa
26640 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63 61  s required (beca
26650 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62 65  use the table be
26660 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73 20  ing dropped was 
26670 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20  already .** the 
26680 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20  last one in the 
26690 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61  database) then a
266a0 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20   zero is stored 
266b0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
266c0 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
266d0 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68 65   is disabled the
266e0 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
266f0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
26700 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
26710 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65  o: Clear.*/.case
26720 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20   OP_Destroy: {  
26730 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
26740 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69  lease */.  int i
26750 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e  Moved;.  int iCn
26760 74 3b 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  t;.  Vdbe *pVdbe
26770 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20  ;.  int iDb;..  
26780 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
26790 6e 6c 79 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65  nly==0 );.#ifnde
267a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
267b0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e  RTUALTABLE.  iCn
267c0 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64  t = 0;.  for(pVd
267d0 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56  be=db->pVdbe; pV
267e0 64 62 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64  dbe; pVdbe = pVd
267f0 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20  be->pNext){.    
26800 69 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63  if( pVdbe->magic
26810 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e  ==VDBE_MAGIC_RUN
26820 20 26 26 20 70 56 64 62 65 2d 3e 62 49 73 52 65   && pVdbe->bIsRe
26830 61 64 65 72 20 0a 20 20 20 20 20 26 26 20 70 56  ader .     && pV
26840 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f  dbe->inVtabMetho
26850 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63  d<2 && pVdbe->pc
26860 3e 3d 30 20 0a 20 20 20 20 29 7b 0a 20 20 20 20  >=0 .    ){.    
26870 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a    iCnt++;.    }.
26880 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74    }.#else.  iCnt
26890 20 3d 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64   = db->nVdbeRead
268a0 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d  ;.#endif.  pOut-
268b0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
268c0 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20  l;.  if( iCnt>1 
268d0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
268e0 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70  TE_LOCKED;.    p
268f0 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
26900 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73  OE_Abort;.  }els
26910 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70  e{.    iDb = pOp
26920 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74  ->p3;.    assert
26930 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20  ( iCnt==1 );.   
26940 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
26950 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
26960 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30  ask)1)<<iDb))!=0
26970 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
26980 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62  ite3BtreeDropTab
26990 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  le(db->aDb[iDb].
269a0 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69  pBt, pOp->p1, &i
269b0 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74  Moved);.    pOut
269c0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
269d0 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
269e0 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64   = iMoved;.#ifnd
269f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
26a00 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66  UTOVACUUM.    if
26a10 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
26a20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a  && iMoved!=0 ){.
26a30 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f        sqlite3Roo
26a40 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69  tPageMoved(db, i
26a50 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d  Db, iMoved, pOp-
26a60 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41  >p1);.      /* A
26a70 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70  ll OP_Destroy op
26a80 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f  erations occur o
26a90 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65  n the same btree
26aa0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
26ab0 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  ( resetSchemaOnF
26ac0 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74  ault==0 || reset
26ad0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69  SchemaOnFault==i
26ae0 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65  Db+1 );.      re
26af0 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
26b00 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a   = iDb+1;.    }.
26b10 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
26b20 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26b30 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33  : Clear P1 P2 P3
26b40 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
26b50 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  l contents of th
26b60 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
26b70 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
26b80 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20  root page.** in 
26b90 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
26ba0 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
26bb0 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44  .  But, unlike D
26bc0 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a  estroy, do not.*
26bd0 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62  * remove the tab
26be0 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d  le or index from
26bf0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
26c00 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  le..**.** The ta
26c10 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20  ble being clear 
26c20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
26c30 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
26c40 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32  P2==0.  If.** P2
26c50 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
26c60 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
26c70 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
26c80 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
26c90 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
26ca0 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
26cb0 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
26cc0 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
26cd0 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ABLE..**.** If t
26ce0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e  he P3 value is n
26cf0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
26d00 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64  e table referred
26d10 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a   to must be an.*
26d20 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28  * intkey table (
26d30 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f  an SQL table, no
26d40 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20  t an index). In 
26d50 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f  this case the ro
26d60 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75  w change .** cou
26d70 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
26d80 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
26d90 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
26da0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
26db0 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73  ed. .** If P3 is
26dc0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
26dd0 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ro, then the val
26de0 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ue stored in reg
26df0 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61  ister P3 is.** a
26e00 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  lso incremented 
26e10 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
26e20 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
26e30 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
26e40 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
26e50 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73  : Destroy.*/.cas
26e60 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20  e OP_Clear: {.  
26e70 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20  int nChange;. . 
26e80 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20   nChange = 0;.  
26e90 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
26ea0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  nly==0 );.  asse
26eb0 72 74 28 20 70 4f 70 2d 3e 70 31 21 3d 31 20 29  rt( pOp->p1!=1 )
26ec0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
26ed0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
26ee0 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
26ef0 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20  p2))!=0 );.  rc 
26f00 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
26f10 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
26f20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
26f30 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
26f40 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
26f50 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
26f60 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
26f70 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
26f80 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
26f90 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
26fa0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
26fb0 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
26fc0 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
26fd0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
26fe0 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
26ff0 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b  3]);.      aMem[
27000 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20  pOp->p3].u.i += 
27010 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20  nChange;.    }. 
27020 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
27030 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
27040 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20  Table P1 P2 * * 
27050 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
27060 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31  [P2]=root iDb=P1
27070 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
27080 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74  a new table in t
27090 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
270a0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
270b0 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
270c0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
270d0 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
270e0 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
270f0 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
27100 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
27110 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
27120 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
27130 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
27140 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  r P2.**.** The d
27150 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
27160 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e  n a table and an
27170 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20   index is this: 
27180 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a   A table must.**
27190 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69   have a 4-byte i
271a0 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63  nteger key and c
271b0 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72  an have arbitrar
271c0 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65  y data.  An inde
271d0 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69  x.** has an arbi
271e0 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f  trary key but no
271f0 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   data..**.** See
27200 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64   also: CreateInd
27210 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ex.*/./* Opcode:
27220 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20   CreateIndex P1 
27230 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
27240 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74  psis: r[P2]=root
27250 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c   iDb=P1.**.** Al
27260 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64  locate a new ind
27270 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ex in the main d
27280 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
27290 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
272a0 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
272b0 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
272c0 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
272d0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
272e0 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74  f.** P1>1.  Writ
272f0 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  e the root page 
27300 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
27310 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20  w table into.** 
27320 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
27330 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  ** See documenta
27340 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74  tion on OP_Creat
27350 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74  eTable for addit
27360 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
27370 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  n..*/.case OP_Cr
27380 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20  eateIndex:      
27390 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
273a0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65  erelease */.case
273b0 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a   OP_CreateTable:
273c0 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
273d0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
273e0 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20  /.  int pgno;.  
273f0 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20  int flags;.  Db 
27400 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20  *pDb;..  pgno = 
27410 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
27420 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27430 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
27440 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
27450 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
27460 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29  sk)1)<<pOp->p1))
27470 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
27480 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
27490 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
274a0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
274b0 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
274c0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
274d0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65  ->opcode==OP_Cre
274e0 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  ateTable ){.    
274f0 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45  /* flags = BTREE
27500 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20  _INTKEY; */.    
27510 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
27520 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  TKEY;.  }else{. 
27530 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
27540 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20  _BLOBKEY;.  }.  
27550 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
27560 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62  eCreateTable(pDb
27570 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c  ->pBt, &pgno, fl
27580 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  ags);.  pOut->u.
27590 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61  i = pgno;.  brea
275a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
275b0 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20   ParseSchema P1 
275c0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
275d0 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c  ead and parse al
275e0 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
275f0 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  he SQLITE_MASTER
27600 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61   table of databa
27610 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61  se P1.** that ma
27620 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  tch the WHERE cl
27630 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20  ause P4. .**.** 
27640 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
27650 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74  kes the parser t
27660 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76  o create a new v
27670 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a  irtual machine,.
27680 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65  ** then runs the
27690 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
276a0 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75  hine.  It is thu
276b0 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f  s a re-entrant o
276c0 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
276d0 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b  P_ParseSchema: {
276e0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f  .  int iDb;.  co
276f0 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65  nst char *zMaste
27700 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  r;.  char *zSql;
27710 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
27720 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20  Data;..  /* Any 
27730 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
27740 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20  nt that invokes 
27750 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
27760 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20   hold mutexes.  
27770 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65  ** on every btre
27780 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70 72  e.  This is a pr
27790 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20 69  erequisite for i
277a0 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71  nvoking .  ** sq
277b0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
277c0 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66  k()..  */.#ifdef
277d0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
277e0 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64  for(iDb=0; iDb<d
277f0 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a  b->nDb; iDb++){.
27800 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d      assert( iDb=
27810 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72  =1 || sqlite3Btr
27820 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d  eeHoldsMutex(db-
27830 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29  >aDb[iDb].pBt) )
27840 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
27850 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
27860 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
27870 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
27880 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48 61  ;.  assert( DbHa
27890 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44  sProperty(db, iD
278a0 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  b, DB_SchemaLoad
278b0 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64  ed) );.  /* Used
278c0 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69   to be a conditi
278d0 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d  onal */ {.    zM
278e0 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54  aster = SCHEMA_T
278f0 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69  ABLE(iDb);.    i
27900 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b  nitData.db = db;
27910 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44  .    initData.iD
27920 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20  b = pOp->p1;.   
27930 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
27940 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
27950 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
27960 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a  ite3MPrintf(db,.
27970 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
27980 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
27990 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
279a0 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42  WHERE %s ORDER B
279b0 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20  Y rowid",.      
279c0 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
279d0 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
279e0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
279f0 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
27a00 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
27a10 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OMEM;.    }else{
27a20 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
27a30 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
27a40 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
27a50 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20  t.busy = 1;.    
27a60 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20    initData.rc = 
27a70 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
27a80 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
27a90 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
27aa0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
27ab0 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
27ac0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
27ad0 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
27ae0 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
27af0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63  ==SQLITE_OK ) rc
27b00 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a   = initData.rc;.
27b10 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
27b20 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20  ree(db, zSql);. 
27b30 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
27b40 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  sy = 0;.    }.  
27b50 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73 71 6c  }.  if( rc ) sql
27b60 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
27b70 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
27b80 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  db);.  if( rc==S
27b90 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
27ba0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
27bb0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d    }.  break;  .}
27bc0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
27bd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
27be0 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  ZE)./* Opcode: L
27bf0 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a  oadAnalysis P1 *
27c00 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61   * * *.**.** Rea
27c10 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  d the sqlite_sta
27c20 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74  t1 table for dat
27c30 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61  abase P1 and loa
27c40 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  d the content.**
27c50 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69   of that table i
27c60 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  nto the internal
27c70 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c   index hash tabl
27c80 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  e.  This will ca
27c90 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79  use.** the analy
27ca0 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77  sis to be used w
27cb0 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c  hen preparing al
27cc0 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65  l subsequent que
27cd0 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ries..*/.case OP
27ce0 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b  _LoadAnalysis: {
27cf0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27d00 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27d10 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63  <db->nDb );.  rc
27d20 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73   = sqlite3Analys
27d30 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e  isLoad(db, pOp->
27d40 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a  p1);.  break;  .
27d50 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
27d60 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
27d70 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a  _ANALYZE) */../*
27d80 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62   Opcode: DropTab
27d90 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  le P1 * * P4 *.*
27da0 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
27db0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
27dc0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
27dd0 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
27de0 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  be.** the table 
27df0 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
27e00 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
27e10 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
27e20 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f   table.** is dro
27e30 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  pped in order to
27e40 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
27e50 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
27e60 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
27e70 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
27e80 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
27e90 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
27ea0 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71  ropTable: {.  sq
27eb0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
27ec0 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f  leteTable(db, pO
27ed0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
27ee0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
27ef0 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e  * Opcode: DropIn
27f00 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  dex P1 * * P4 *.
27f10 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
27f20 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
27f30 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
27f40 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
27f50 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  ibe.** the index
27f60 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
27f70 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
27f80 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
27f90 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64  an index.** is d
27fa0 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
27fb0 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
27fc0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
27fd0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
27fe0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
27ff0 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
28000 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
28010 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20  _DropIndex: {.  
28020 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
28030 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20  DeleteIndex(db, 
28040 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
28050 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
28060 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
28070 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50  Trigger P1 * * P
28080 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
28090 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
280a0 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
280b0 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
280c0 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74  escribe.** the t
280d0 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20  rigger named P4 
280e0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
280f0 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
28100 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a  after a trigger.
28110 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e  ** is dropped in
28120 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
28130 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
28140 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
28150 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
28160 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
28170 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
28180 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67  case OP_DropTrig
28190 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ger: {.  sqlite3
281a0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
281b0 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e  rigger(db, pOp->
281c0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
281d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
281e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
281f0 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
28200 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
28210 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33  grityCk P1 P2 P3
28220 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61   * P5.**.** Do a
28230 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68  n analysis of th
28240 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  e currently open
28250 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72   database.  Stor
28260 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
28270 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20   P1 the text of 
28280 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
28290 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20   describing any 
282a0 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20  problems..** If 
282b0 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20  no problems are 
282c0 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e  found, store a N
282d0 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20  ULL in register 
282e0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  P1..**.** The re
282f0 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
28300 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  ns the maximum n
28310 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64  umber of allowed
28320 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d   errors..** At m
28330 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f  ost reg(P3) erro
28340 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72  rs will be repor
28350 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ted..** In other
28360 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c   words, the anal
28370 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f  ysis stops as so
28380 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72  on as reg(P1) er
28390 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65  rors are .** see
283a0 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75  n.  Reg(P1) is u
283b0 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
283c0 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  number of errors
283d0 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a   remaining..**.*
283e0 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20  * The root page 
283f0 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74  numbers of all t
28400 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74  ables in the dat
28410 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65  abase are intege
28420 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72  r.** stored in r
28430 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31  eg(P1), reg(P1+1
28440 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e  ), reg(P1+2), ..
28450 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20 50 32  ..  There are P2
28460 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c   tables.** total
28470 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
28480 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63   not zero, the c
28490 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20  heck is done on 
284a0 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
284b0 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20  tabase.** file, 
284c0 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74  not the main dat
284d0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
284e0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
284f0 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
28500 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  nt the integrity
28510 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a  _check pragma..*
28520 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72  /.case OP_Integr
28530 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e  ityCk: {.  int n
28540 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75  Root;      /* Nu
28550 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74  mber of tables t
28560 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65  o check.  (Numbe
28570 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e  r of root pages.
28580 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f  ) */.  int *aRoo
28590 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  t;     /* Array 
285a0 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62  of rootpage numb
285b0 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74  ers for tables t
285c0 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a  o be checked */.
285d0 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20    int j;        
285e0 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
285f0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  r */.  int nErr;
28600 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
28610 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72   of errors repor
28620 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
28630 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74  ;        /* Text
28640 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65   of the error re
28650 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  port */.  Mem *p
28660 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67  nErr;     /* Reg
28670 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72  ister keeping tr
28680 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ack of errors re
28690 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73  maining */..  as
286a0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
286b0 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20  er );.  nRoot = 
286c0 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
286d0 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20  t( nRoot>0 );.  
286e0 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44  aRoot = sqlite3D
286f0 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
28700 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f  izeof(int)*(nRoo
28710 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52  t+1) );.  if( aR
28720 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  oot==0 ) goto no
28730 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  _mem;.  assert( 
28740 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
28750 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
28760 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
28770 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f  pnErr = &aMem[pO
28780 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
28790 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
287a0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
287b0 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
287c0 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  r->flags & (MEM_
287d0 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
287e0 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
287f0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
28800 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74  for(j=0; j<nRoot
28810 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f  ; j++){.    aRoo
28820 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69  t[j] = (int)sqli
28830 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
28840 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20  &pIn1[j]);.  }. 
28850 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20   aRoot[j] = 0;. 
28860 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
28870 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
28880 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
28890 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
288a0 29 31 29 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d  )1)<<pOp->p5))!=
288b0 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  0 );.  z = sqlit
288c0 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79  e3BtreeIntegrity
288d0 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f  Check(db->aDb[pO
288e0 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f  p->p5].pBt, aRoo
288f0 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20  t, nRoot,.      
28900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28910 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
28920 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72  pnErr->u.i, &nEr
28930 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  r);.  sqlite3DbF
28940 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a  ree(db, aRoot);.
28950 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20    pnErr->u.i -= 
28960 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56  nErr;.  sqlite3V
28970 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
28980 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d  n1);.  if( nErr=
28990 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
289a0 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  ( z==0 );.  }els
289b0 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20  e if( z==0 ){.  
289c0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
289d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
289e0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
289f0 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51  (pIn1, z, -1, SQ
28a00 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74  LITE_UTF8, sqlit
28a10 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20  e3_free);.  }.  
28a20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
28a30 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  IZE(pIn1);.  sql
28a40 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
28a50 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63  coding(pIn1, enc
28a60 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b  oding);.  break;
28a70 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
28a80 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
28a90 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20  TY_CHECK */../* 
28aa0 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64  Opcode: RowSetAd
28ab0 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
28ac0 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73   Synopsis:  rows
28ad0 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a  et(P1)=r[P2].**.
28ae0 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
28af0 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
28b00 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
28b10 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69  into a boolean i
28b20 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ndex.** held in 
28b30 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
28b40 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
28b50 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
28b60 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
28b70 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
28b80 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
28b90 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49  in1, in2 */.  pI
28ba0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
28bb0 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
28bc0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
28bd0 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
28be0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
28bf0 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  =0 );.  if( (pIn
28c00 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
28c10 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
28c20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
28c30 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
28c40 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
28c50 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
28c60 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
28c70 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  mem;.  }.  sqlit
28c80 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
28c90 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
28ca0 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn2->u.i);.  br
28cb0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28cc0 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31  e: RowSetRead P1
28cd0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
28ce0 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
28cf0 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20  owset(P1).**.** 
28d00 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c  Extract the smal
28d10 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20  lest value from 
28d20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
28d30 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61   and put that va
28d40 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  lue into.** regi
28d50 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66  ster P3.  Or, if
28d60 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
28d70 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65  1 is initially e
28d80 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a  mpty, leave P3.*
28d90 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  * unchanged and 
28da0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
28db0 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ion P2..*/.case 
28dc0 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b  OP_RowSetRead: {
28dd0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
28de0 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in1, out3 */.  i
28df0 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20  64 val;..  pIn1 
28e00 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
28e10 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
28e20 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
28e30 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c  t)==0 .   || sql
28e40 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70  ite3RowSetNext(p
28e50 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
28e60 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20  &val)==0.  ){.  
28e70 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e    /* The boolean
28e80 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
28e90 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
28ea0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
28eb0 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70  1);.    pc = pOp
28ec0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
28ed0 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75  e{.    /* A valu
28ee0 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f  e was pulled fro
28ef0 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  m the index */. 
28f00 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
28f10 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
28f20 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a  pOp->p3], val);.
28f30 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
28f40 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
28f50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
28f60 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50  wSetTest P1 P2 P
28f70 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
28f80 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f  : if r[P3] in ro
28f90 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32  wset(P1) goto P2
28fa0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
28fb0 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  P3 is assumed to
28fc0 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69   hold a 64-bit i
28fd0 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66  nteger value. If
28fe0 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
28ff0 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65  contains a RowSe
29000 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61  t object and tha
29010 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  t RowSet object 
29020 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20  contains.** the 
29030 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33  value held in P3
29040 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74  , jump to regist
29050 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  er P2. Otherwise
29060 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20  , insert the.** 
29070 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e  integer in P3 in
29080 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e  to the RowSet an
29090 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f  d continue on to
290a0 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63   the.** next opc
290b0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  ode..**.** The R
290c0 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20  owSet object is 
290d0 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68  optimized for th
290e0 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63  e case where suc
290f0 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20  cessive sets.** 
29100 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65  of integers, whe
29110 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74  re each set cont
29120 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74  ains no duplicat
29130 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20  es. Each set.** 
29140 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65  of values is ide
29150 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69  ntified by a uni
29160 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68  que P4 value. Th
29170 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d  e first set.** m
29180 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20  ust have P4==0, 
29190 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34  the final set P4
291a0 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65  =-1.  P4 must be
291b0 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a   either -1 or.**
291c0 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20   non-negative.  
291d0 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  For non-negative
291e0 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e   values of P4 on
291f0 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a  ly the lower 4.*
29200 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69  * bits are signi
29210 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  ficant..**.** Th
29220 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69  is allows optimi
29230 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65  zations: (a) whe
29240 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73  n P4==0 there is
29250 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74   no need to test
29260 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f  .** the rowset o
29270 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73  bject for P3, as
29280 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
29290 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e  d not to contain
292a0 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e   it,.** (b) when
292b0 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73   P4==-1 there is
292c0 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65   no need to inse
292d0 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73  rt the value, as
292e0 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65   it will.** neve
292f0 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c  r be tested for,
29300 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20   and (c) when a 
29310 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61  value that is pa
29320 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a  rt of set X is.*
29330 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72  * inserted, ther
29340 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
29350 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66  search to see if
29360 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
29370 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
29380 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  y inserted as pa
29390 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c  rt of set X (onl
293a0 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76  y if it was prev
293b0 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74  iously.** insert
293c0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f  ed as part of so
293d0 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a  me other set)..*
293e0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
293f0 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Test: {         
29400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
29410 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
29420 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69  .  int iSet;.  i
29430 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49  nt exists;..  pI
29440 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
29450 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
29460 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
29470 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  iSet = pOp->p4.i
29480 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
29490 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
294a0 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  );..  /* If ther
294b0 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74  e is anything ot
294c0 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65  her than a rowse
294d0 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f  t object in memo
294e0 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a  ry cell P1,.  **
294f0 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61   delete it now a
29500 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31  nd initialize P1
29510 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72   with an empty r
29520 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28  owset.  */.  if(
29530 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
29540 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
29550 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
29560 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
29570 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  n1);.    if( (pI
29580 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
29590 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
295a0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20  o no_mem;.  }.. 
295b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
295c0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
295d0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74  ;.  assert( iSet
295e0 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20  ==-1 || iSet>=0 
295f0 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b  );.  if( iSet ){
29600 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71  .    exists = sq
29610 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
29620 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
29630 20 0a 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 20 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f 20   (u8)(iSet>=0 ? 
29660 69 53 65 74 20 26 20 30 78 66 20 3a 20 30 78 66  iSet & 0xf : 0xf
29670 66 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  f),.            
29680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29690 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20     pIn3->u.i);. 
296a0 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29 7b     if( exists ){
296b0 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
296c0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
296d0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
296e0 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b    if( iSet>=0 ){
296f0 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53  .    sqlite3RowS
29700 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
29710 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e  .pRowSet, pIn3->
29720 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  u.i);.  }.  brea
29730 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
29740 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
29750 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  ER../* Opcode: P
29760 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20  rogram P1 P2 P3 
29770 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P4 *.**.** Execu
29780 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70  te the trigger p
29790 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73  rogram passed as
297a0 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42   P4 (type P4_SUB
297b0 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a  PROGRAM). .**.**
297c0 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P1 contains the
297d0 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
297e0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
297f0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69   contains the fi
29800 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  rst memory .** c
29810 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20  ell in an array 
29820 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61  of values used a
29830 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  s arguments to t
29840 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
29850 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  P2 .** contains 
29860 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a  the address to j
29870 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75  ump to if the su
29880 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73  b-program throws
29890 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65   an IGNORE .** e
298a0 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74  xception using t
298b0 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74  he RAISE() funct
298c0 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33  ion. Register P3
298d0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
298e0 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d  dress .** of a m
298f0 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
29900 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20  is (the parent) 
29910 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20  VM that is used 
29920 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20  to allocate the 
29930 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  .** memory requi
29940 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76  red by the sub-v
29950 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a  dbe at runtime..
29960 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
29970 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20  inter to the VM 
29980 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
29990 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
299a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72  */.case OP_Progr
299b0 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  am: {        /* 
299c0 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  jump */.  int nM
299d0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
299e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
299f0 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
29a00 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
29a10 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  */.  int nByte; 
29a20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29a30 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65  Bytes of runtime
29a40 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
29a50 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
29a60 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20  */.  Mem *pRt;  
29a70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29a80 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f  Register to allo
29a90 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61  cate runtime spa
29aa0 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ce */.  Mem *pMe
29ab0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
29ac0 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61  /* Used to itera
29ad0 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72  te through memor
29ae0 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d  y cells */.  Mem
29af0 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
29b00 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d       /* Last mem
29b10 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20  ory cell in new 
29b20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46  array */.  VdbeF
29b30 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
29b40 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66     /* New vdbe f
29b50 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20  rame to execute 
29b60 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  in */.  SubProgr
29b70 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
29b80 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74  /* Sub-program t
29b90 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76  o execute */.  v
29ba0 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20  oid *t;         
29bb0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
29bc0 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67  identifying trig
29bd0 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72  ger */..  pProgr
29be0 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72  am = pOp->p4.pPr
29bf0 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26  ogram;.  pRt = &
29c00 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
29c10 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
29c20 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
29c30 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
29c40 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
29c50 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
29c60 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
29c70 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
29c80 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
29c90 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
29ca0 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
29cb0 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
29cc0 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
29cd0 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
29ce0 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
29cf0 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
29d00 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
29d10 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
29d20 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
29d30 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
29d40 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
29d50 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
29d60 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
29d70 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
29d80 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
29d90 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
29da0 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
29db0 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
29dc0 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
29dd0 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
29de0 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
29df0 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
29e00 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
29e10 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
29e20 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
29e30 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
29e40 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
29e50 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
29e60 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
29e70 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
29e80 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
29e90 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
29ea0 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
29eb0 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
29ec0 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
29ed0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
29ee0 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
29ef0 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
29f00 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
29f10 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
29f20 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
29f30 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
29f40 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
29f50 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
29f60 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
29f70 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
29f80 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
29f90 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
29fa0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
29fb0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
29fc0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
29fd0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74  >zErrMsg, db, "t
29fe0 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f  oo many levels o
29ff0 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73  f trigger recurs
2a000 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b  ion");.    break
2a010 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69  ;.  }..  /* Regi
2a020 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64  ster pRt is used
2a030 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65   to store the me
2a040 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f  mory required to
2a050 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a   save the state.
2a060 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72    ** of the curr
2a070 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64  ent program, and
2a080 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
2a090 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  ired at runtime 
2a0a0 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20  to execute.  ** 
2a0b0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
2a0c0 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69  ram. If this tri
2a0d0 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69  gger has been fi
2a0e0 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e  red before, then
2a0f0 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c   pRt .  ** is al
2a100 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e  ready allocated.
2a110 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d   Otherwise, it m
2a120 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
2a130 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  ed.  */.  if( (p
2a140 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72  Rt->flags&MEM_Fr
2a150 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  ame)==0 ){.    /
2a160 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65  * SubProgram.nMe
2a170 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  m is set to the 
2a180 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
2a190 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74   cells used by t
2a1a0 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72  he .    ** progr
2a1b0 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62  am stored in Sub
2a1c0 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20  Program.aOp. As 
2a1d0 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f  well as these, o
2a1e0 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a  ne memory.    **
2a1f0 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65   cell is require
2a200 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f  d for each curso
2a210 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  r used by the pr
2a220 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c  ogram. Set local
2a230 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  .    ** variable
2a240 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72   nMem (and later
2a250 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69  , VdbeFrame.nChi
2a260 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76  ldMem) to this v
2a270 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
2a280 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d   nMem = pProgram
2a290 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61  ->nMem + pProgra
2a2a0 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79  m->nCsr;.    nBy
2a2b0 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65  te = ROUND8(size
2a2c0 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20  of(VdbeFrame)). 
2a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e               + n
2a2e0 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d  Mem * sizeof(Mem
2a2f0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2a300 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
2a310 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75   * sizeof(VdbeCu
2a320 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20  rsor *).        
2a330 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
2a340 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66  ->nOnce * sizeof
2a350 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65  (u8);.    pFrame
2a360 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
2a370 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65  ocZero(db, nByte
2a380 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61  );.    if( !pFra
2a390 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  me ){.      goto
2a3a0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
2a3b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2a3c0 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20  mRelease(pRt);. 
2a3d0 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20     pRt->flags = 
2a3e0 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70  MEM_Frame;.    p
2a3f0 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70  Rt->u.pFrame = p
2a400 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61  Frame;..    pFra
2a410 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70  me->v = p;.    p
2a420 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2a430 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72   = nMem;.    pFr
2a440 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d  ame->nChildCsr =
2a450 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
2a460 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20  .    pFrame->pc 
2a470 3d 20 70 63 3b 0a 20 20 20 20 70 46 72 61 6d 65  = pc;.    pFrame
2a480 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d  ->aMem = p->aMem
2a490 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d  ;.    pFrame->nM
2a4a0 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20  em = p->nMem;.  
2a4b0 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20    pFrame->apCsr 
2a4c0 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20  = p->apCsr;.    
2a4d0 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20  pFrame->nCursor 
2a4e0 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20  = p->nCursor;.  
2a4f0 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20    pFrame->aOp = 
2a500 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->aOp;.    pFra
2a510 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70  me->nOp = p->nOp
2a520 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f  ;.    pFrame->to
2a530 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  ken = pProgram->
2a540 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d  token;.    pFram
2a550 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70  e->aOnceFlag = p
2a560 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20  ->aOnceFlag;.   
2a570 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c   pFrame->nOnceFl
2a580 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ag = p->nOnceFla
2a590 67 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26  g;..    pEnd = &
2a5a0 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2a5b0 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68  ame)[pFrame->nCh
2a5c0 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72  ildMem];.    for
2a5d0 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d  (pMem=VdbeFrameM
2a5e0 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d  em(pFrame); pMem
2a5f0 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b  !=pEnd; pMem++){
2a600 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
2a610 67 73 20 3d 20 4d 45 4d 5f 49 6e 76 61 6c 69 64  gs = MEM_Invalid
2a620 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62  ;.      pMem->db
2a630 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d   = db;.    }.  }
2a640 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65  else{.    pFrame
2a650 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65   = pRt->u.pFrame
2a660 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
2a670 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72  rogram->nMem+pPr
2a680 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
2a690 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29  ame->nChildMem )
2a6a0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
2a6b0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
2a6c0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
2a6d0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2a6e0 63 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b  c==pFrame->pc );
2a6f0 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d  .  }..  p->nFram
2a700 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  e++;.  pFrame->p
2a710 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61  Parent = p->pFra
2a720 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61  me;.  pFrame->la
2a730 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
2a740 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  wid;.  pFrame->n
2a750 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
2a760 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  nge;.  p->nChang
2a770 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61  e = 0;.  p->pFra
2a780 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70  me = pFrame;.  p
2a790 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20  ->aMem = aMem = 
2a7a0 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  &VdbeFrameMem(pF
2a7b0 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e  rame)[-1];.  p->
2a7c0 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e  nMem = pFrame->n
2a7d0 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e  ChildMem;.  p->n
2a7e0 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46  Cursor = (u16)pF
2a7f0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b  rame->nChildCsr;
2a800 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56  .  p->apCsr = (V
2a810 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d  dbeCursor **)&aM
2a820 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20  em[p->nMem+1];. 
2a830 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20   p->aOp = aOp = 
2a840 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20  pProgram->aOp;. 
2a850 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72   p->nOp = pProgr
2a860 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f  am->nOp;.  p->aO
2a870 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29  nceFlag = (u8 *)
2a880 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75  &p->apCsr[p->nCu
2a890 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63  rsor];.  p->nOnc
2a8a0 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d  eFlag = pProgram
2a8b0 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63 20 3d 20  ->nOnce;.  pc = 
2a8c0 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e  -1;.  memset(p->
2a8d0 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d  aOnceFlag, 0, p-
2a8e0 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20  >nOnceFlag);..  
2a8f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2a900 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32  ode: Param P1 P2
2a910 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
2a920 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
2a930 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e   ever present in
2a940 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61   sub-programs ca
2a950 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a  lled via the .**
2a960 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
2a970 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20  ruction. Copy a 
2a980 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20  value currently 
2a990 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f  stored in a memo
2a9a0 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74  ry .** cell of t
2a9b0 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65  he calling (pare
2a9c0 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c  nt) frame to cel
2a9d0 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72  l P2 in the curr
2a9e0 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61  ent frames .** a
2a9f0 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68  ddress space. Th
2aa00 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
2aa10 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
2aa20 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77  o access the new
2aa30 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a  .* .** and old.*
2aa40 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   values..**.** T
2aa50 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
2aa60 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61  e cell in the pa
2aa70 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65  rent frame is de
2aa80 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69  termined by addi
2aa90 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ng.** the value 
2aaa0 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
2aab0 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  nt to the value 
2aac0 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
2aad0 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c  nt to the.** cal
2aae0 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20  ling OP_Program 
2aaf0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2ab00 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b  case OP_Param: {
2ab10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2ab20 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
2ab30 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
2ab40 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e  rame;.  Mem *pIn
2ab50 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e  ;.  pFrame = p->
2ab60 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20  pFrame;.  pIn = 
2ab70 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
2ab80 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e  p->p1 + pFrame->
2ab90 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e  aOp[pFrame->pc].
2aba0 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65  p1];   .  sqlite
2abb0 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
2abc0 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d  opy(pOut, pIn, M
2abd0 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65  EM_Ephem);.  bre
2abe0 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ak;.}..#endif /*
2abf0 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
2ac00 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a  OMIT_TRIGGER */.
2ac10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2ac20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2ac30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f  ./* Opcode: FkCo
2ac40 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20  unter P1 P2 * * 
2ac50 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66  *.** Synopsis: f
2ac60 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a  kctr[P1]+=P2.**.
2ac70 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22  ** Increment a "
2ac80 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
2ac90 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61  er" by P2 (P2 ma
2aca0 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72  y be negative or
2acb0 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49   positive)..** I
2acc0 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
2acd0 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  , the database c
2ace0 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
2acf0 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
2ad00 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66   .** (deferred f
2ad10 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2ad20 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69  raints). Otherwi
2ad30 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72  se, if P1 is zer
2ad40 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65  o, the .** state
2ad50 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  ment counter is 
2ad60 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d  incremented (imm
2ad70 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
2ad80 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
2ad90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f  .*/.case OP_FkCo
2ada0 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64  unter: {.  if( d
2adb0 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
2adc0 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20  E_DeferFKs ){.  
2add0 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
2ade0 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  mmCons += pOp->p
2adf0 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  2;.  }else if( p
2ae00 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62  Op->p1 ){.    db
2ae10 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
2ae20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
2ae30 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43  lse{.    p->nFkC
2ae40 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70  onstraint += pOp
2ae50 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ->p2;.  }.  brea
2ae60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2ae70 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20   FkIfZero P1 P2 
2ae80 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2ae90 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d  s: if fkctr[P1]=
2aea0 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
2aeb0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73   This opcode tes
2aec0 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20  ts if a foreign 
2aed0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  key constraint-c
2aee0 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
2aef0 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20  tly zero..** If 
2af00 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  so, jump to inst
2af10 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
2af20 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
2af30 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2af40 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
2af50 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
2af60 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
2af70 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
2af80 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
2af90 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2afa0 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28  ter.** is zero (
2afb0 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75  the one that cou
2afc0 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  nts deferred con
2afd0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
2afe0 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a  ns). If P1 is.**
2aff0 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20   zero, the jump 
2b000 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
2b010 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72  statement constr
2b020 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
2b030 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61  zero.** (immedia
2b040 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
2b050 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
2b060 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ions)..*/.case O
2b070 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20  P_FkIfZero: {   
2b080 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2b090 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
2b0a0 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44  {.    if( db->nD
2b0b0 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26  eferredCons==0 &
2b0c0 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2b0d0 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d  mmCons==0 ) pc =
2b0e0 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65   pOp->p2-1;.  }e
2b0f0 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e  lse{.    if( p->
2b100 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
2b110 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2b120 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63  dImmCons==0 ) pc
2b130 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
2b140 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2b150 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
2b160 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2b170 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
2b180 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2b190 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
2b1a0 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
2b1b0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2b1c0 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61  nopsis: r[P1]=ma
2b1d0 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a  x(r[P1],r[P2]).*
2b1e0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67  *.** P1 is a reg
2b1f0 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
2b200 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
2b210 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61  VM (the root fra
2b220 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65  me is.** differe
2b230 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72  nt from the curr
2b240 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69  ent frame if thi
2b250 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2b260 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a   being executed.
2b270 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d  ** within a sub-
2b280 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68  program). Set th
2b290 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
2b2a0 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61  ter P1 to the ma
2b2b0 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73  ximum of .** its
2b2c0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61   current value a
2b2d0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nd the value in 
2b2e0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
2b2f0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
2b300 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ion throws an er
2b310 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72  ror if the memor
2b320 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e  y cell is not in
2b330 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e  itially.** an in
2b340 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
2b350 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20  P_MemMax: {     
2b360 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d     /* in2 */.  M
2b370 65 6d 20 2a 70 49 6e 31 3b 0a 20 20 56 64 62 65  em *pIn1;.  Vdbe
2b380 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
2b390 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
2b3a0 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  {.    for(pFrame
2b3b0 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
2b3c0 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72  me->pParent; pFr
2b3d0 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
2b3e0 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d  ent);.    pIn1 =
2b3f0 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
2b400 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65  Op->p1];.  }else
2b410 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d  {.    pIn1 = &aM
2b420 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d  em[pOp->p1];.  }
2b430 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
2b440 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
2b450 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
2b460 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
2b470 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2b480 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
2b490 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
2b4a0 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66  rify(pIn2);.  if
2b4b0 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32  ( pIn1->u.i<pIn2
2b4c0 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31  ->u.i){.    pIn1
2b4d0 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e  ->u.i = pIn2->u.
2b4e0 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  i;.  }.  break;.
2b4f0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2b500 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
2b510 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  EMENT */../* Opc
2b520 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32  ode: IfPos P1 P2
2b530 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2b540 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 67  is: if r[P1]>0 g
2b550 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20  oto P2.**.** If 
2b560 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
2b570 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72  ister P1 is 1 or
2b580 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74   greater, jump t
2b590 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69  o P2..**.** It i
2b5a0 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
2b5b0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
2b5c0 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
2b5d0 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
2b5e0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2b5f0 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
2b600 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
2b610 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
2b620 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f  .*/.case OP_IfPo
2b630 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
2b640 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2b650 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2b660 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2b670 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2b680 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
2b690 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20  ->u.i>0 ){.     
2b6a0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2b6b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2b6c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  ../* Opcode: IfN
2b6d0 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  eg P1 P2 * * *.*
2b6e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
2b6f0 5b 50 31 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a  [P1]<0 goto P2.*
2b700 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  *.** If the valu
2b710 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
2b720 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65   is less than ze
2b730 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  ro, jump to P2. 
2b740 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
2b750 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
2b760 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
2b770 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2b780 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
2b790 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2b7a0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2b7b0 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
2b7c0 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
2b7d0 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20  ase OP_IfNeg: { 
2b7e0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2b7f0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2b800 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2b810 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2b820 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2b830 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2b840 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  <0 ){.     pc = 
2b850 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2b860 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2b870 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50  Opcode: IfZero P
2b880 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2b890 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d  ynopsis: r[P1]+=
2b8a0 50 33 2c 20 69 66 20 72 5b 50 31 5d 3d 3d 30 20  P3, if r[P1]==0 
2b8b0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
2b8c0 65 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75  e register P1 mu
2b8d0 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
2b8e0 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65  teger.  Add lite
2b8f0 72 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a  ral P3 to the.**
2b900 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2b910 65 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72  er P1.  If the r
2b920 65 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79  esult is exactly
2b930 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20   0, jump to P2. 
2b940 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
2b950 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
2b960 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
2b970 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2b980 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
2b990 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2b9a0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2b9b0 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
2b9c0 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
2b9d0 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b  ase OP_IfZero: {
2b9e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2b9f0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2ba00 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2ba10 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2ba20 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2ba30 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d  ;.  pIn1->u.i +=
2ba40 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20   pOp->p3;.  if( 
2ba50 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a  pIn1->u.i==0 ){.
2ba60 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2ba70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2ba80 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2ba90 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
2baa0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2bab0 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
2bac0 20 73 74 65 70 28 72 5b 50 32 5d 2e 2e 29 20 4e   step(r[P2]..) N
2bad0 3d 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  =P5.**.** Execut
2bae0 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  e the step funct
2baf0 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
2bb00 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75  gate.  The.** fu
2bb10 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
2bb20 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73  guments.   P4 is
2bb30 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
2bb40 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72  e FuncDef.** str
2bb50 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63  ucture that spec
2bb60 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69  ifies the functi
2bb70 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74 65  on.  Use registe
2bb80 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61  r.** P3 as the a
2bb90 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a  ccumulator..**.*
2bba0 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e  * The P5 argumen
2bbb0 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f  ts are taken fro
2bbc0 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
2bbd0 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73  d its.** success
2bbe0 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ors..*/.case OP_
2bbf0 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74  AggStep: {.  int
2bc00 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d   n;.  int i;.  M
2bc10 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20  em *pMem;.  Mem 
2bc20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65 33  *pRec;.  sqlite3
2bc30 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20  _context ctx;.  
2bc40 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
2bc50 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f  apVal;..  n = pO
2bc60 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28  p->p5;.  assert(
2bc70 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20   n>=0 );.  pRec 
2bc80 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2bc90 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61  ;.  apVal = p->a
2bca0 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20  pArg;.  assert( 
2bcb0 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b  apVal || n==0 );
2bcc0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
2bcd0 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20   i++, pRec++){. 
2bce0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
2bcf0 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20  Valid(pRec) );. 
2bd00 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52     apVal[i] = pR
2bd10 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  ec;.    memAbout
2bd20 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 52 65 63  ToChange(p, pRec
2bd30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
2bd40 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70  beMemStoreType(p
2bd50 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e  Rec);.  }.  ctx.
2bd60 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  pFunc = pOp->p4.
2bd70 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28  pFunc;.  assert(
2bd80 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2bd90 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
2bda0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
2bdb0 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d   ctx.pMem = pMem
2bdc0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2bdd0 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a  ];.  pMem->n++;.
2bde0 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20    ctx.s.flags = 
2bdf0 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e  MEM_Null;.  ctx.
2be00 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73  s.z = 0;.  ctx.s
2be10 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  .zMalloc = 0;.  
2be20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a  ctx.s.xDel = 0;.
2be30 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b    ctx.s.db = db;
2be40 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
2be50 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20   0;.  ctx.pColl 
2be60 3d 20 30 3b 0a 20 20 63 74 78 2e 73 6b 69 70 46  = 0;.  ctx.skipF
2be70 6c 61 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 63  lag = 0;.  if( c
2be80 74 78 2e 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c  tx.pFunc->funcFl
2be90 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e  ags & SQLITE_FUN
2bea0 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20  C_NEEDCOLL ){.  
2beb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d    assert( pOp>p-
2bec0 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65  >aOp );.    asse
2bed0 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79  rt( pOp[-1].p4ty
2bee0 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29  pe==P4_COLLSEQ )
2bef0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
2bf00 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
2bf10 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
2bf20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b  ctx.pColl = pOp[
2bf30 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20  -1].p4.pColl;.  
2bf40 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e  }.  (ctx.pFunc->
2bf50 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20  xStep)(&ctx, n, 
2bf60 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20  apVal); /* IMP: 
2bf70 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
2bf80 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
2bf90 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
2bfa0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2bfb0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2bfc0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
2bfd0 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20  text(&ctx.s));. 
2bfe0 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
2bff0 72 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63  ror;.  }.  if( c
2c000 74 78 2e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20  tx.skipFlag ){. 
2c010 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
2c020 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f  1].opcode==OP_Co
2c030 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20 3d  llSeq );.    i =
2c040 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20   pOp[-1].p1;.   
2c050 20 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33   if( i ) sqlite3
2c060 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
2c070 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20  &aMem[i], 1);.  
2c080 7d 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  }..  sqlite3Vdbe
2c090 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e  MemRelease(&ctx.
2c0a0 73 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  s);..  break;.}.
2c0b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46  ./* Opcode: AggF
2c0c0 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  inal P1 P2 * P4 
2c0d0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
2c0e0 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a  ccum=r[P1] N=P2.
2c0f0 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
2c100 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63  e finalizer func
2c110 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
2c120 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a  egate.  P1 is.**
2c130 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
2c140 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65  tion that is the
2c150 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72   accumulator for
2c160 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a   the aggregate..
2c170 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
2c180 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
2c190 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65  nts that the ste
2c1a0 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73  p function takes
2c1b0 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20   and.** P4 is a 
2c1c0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
2c1d0 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20  uncDef for this 
2c1e0 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50  function.  The P
2c1f0 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73  2.** argument is
2c200 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69   not used by thi
2c210 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73  s opcode.  It is
2c220 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64   only there to d
2c230 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66  isambiguate.** f
2c240 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61  unctions that ca
2c250 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e  n take varying n
2c260 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65  umbers of argume
2c270 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20  nts.  The.** P4 
2c280 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79  argument is only
2c290 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20   needed for the 
2c2a0 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20  degenerate case 
2c2b0 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65  where.** the ste
2c2c0 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e  p function was n
2c2d0 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61  ot previously ca
2c2e0 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lled..*/.case OP
2c2f0 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d  _AggFinal: {.  M
2c300 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65  em *pMem;.  asse
2c310 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
2c320 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
2c330 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
2c340 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  ;.  pMem = &aMem
2c350 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2c360 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
2c370 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  s & ~(MEM_Null|M
2c380 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20  EM_Agg))==0 );. 
2c390 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2c3a0 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65  eMemFinalize(pMe
2c3b0 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63  m, pOp->p4.pFunc
2c3c0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
2c3d0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
2c3e0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2c3f0 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
2c400 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d  e3_value_text(pM
2c410 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  em));.  }.  sqli
2c420 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2c430 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f  oding(pMem, enco
2c440 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
2c450 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65  MAX_BLOBSIZE(pMe
2c460 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  m);.  if( sqlite
2c470 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
2c480 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Mem) ){.    goto
2c490 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
2c4a0 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
2c4b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2c4c0 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65  L./* Opcode: Che
2c4d0 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33  ckpoint P1 P2 P3
2c4e0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
2c4f0 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 50  point database P
2c500 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d  1. This is a no-
2c510 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20  op if P1 is not 
2c520 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20  currently in.** 
2c530 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65  WAL mode. Parame
2c540 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66  ter P2 is one of
2c550 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
2c560 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c  NT_PASSIVE, FULL
2c570 0a 2a 2a 20 6f 72 20 52 45 53 54 41 52 54 2e 20  .** or RESTART. 
2c580 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e   Write 1 or 0 in
2c590 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68  to mem[P3] if th
2c5a0 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74  e checkpoint ret
2c5b0 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  urns.** SQLITE_B
2c5c0 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70  USY or not, resp
2c5d0 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65  ectively.  Write
2c5e0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
2c5f0 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57  ages in the.** W
2c600 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65  AL after the che
2c610 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d  ckpoint into mem
2c620 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e  [P3+1] and the n
2c630 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a  umber of pages.*
2c640 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61  * in the WAL tha
2c650 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63  t have been chec
2c660 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74  kpointed after t
2c670 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a  he checkpoint.**
2c680 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20   completes into 
2c690 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65  mem[P3+2].  Howe
2c6a0 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c  ver on an error,
2c6b0 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a   mem[P3+1] and.*
2c6c0 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20  * mem[P3+2] are 
2c6d0 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d  initialized to -
2c6e0 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68  1..*/.case OP_Ch
2c6f0 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  eckpoint: {.  in
2c700 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
2c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2c720 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
2c730 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20  .  int aRes[3]; 
2c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c750 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f     /* Results */
2c760 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
2c770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c780 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75     /* Write resu
2c790 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61  lts here */..  a
2c7a0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2c7b0 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b  ly==0 );.  aRes[
2c7c0 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31  0] = 0;.  aRes[1
2c7d0 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31  ] = aRes[2] = -1
2c7e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2c7f0 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
2c800 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20  KPOINT_PASSIVE. 
2c810 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
2c820 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2c830 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20  INT_FULL.       
2c840 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
2c850 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
2c860 53 54 41 52 54 0a 20 20 29 3b 0a 20 20 72 63 20  START.  );.  rc 
2c870 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  = sqlite3Checkpo
2c880 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  int(db, pOp->p1,
2c890 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b   pOp->p2, &aRes[
2c8a0 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20  1], &aRes[2]);. 
2c8b0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2c8c0 42 55 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d  BUSY ){.    rc =
2c8d0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
2c8e0 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d  aRes[0] = 1;.  }
2c8f0 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d  .  for(i=0, pMem
2c900 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2c910 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65  ]; i<3; i++, pMe
2c920 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  m++){.    sqlite
2c930 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
2c940 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73  (pMem, (i64)aRes
2c950 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20  [i]);.  }    .  
2c960 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64  break;.};  .#end
2c970 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2c980 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f  TE_OMIT_PRAGMA./
2c990 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61  * Opcode: Journa
2c9a0 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a  lMode P1 P2 P3 *
2c9b0 20 50 35 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65   P5.**.** Change
2c9c0 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   the journal mod
2c9d0 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
2c9e0 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20   to P3. P3 must 
2c9f0 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a  be one of the.**
2ca00 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
2ca10 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49  DE_XXX values. I
2ca20 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65  f changing betwe
2ca30 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20 72  en the various r
2ca40 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73  ollback.** modes
2ca50 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61   (delete, trunca
2ca60 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66  te, persist, off
2ca70 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68   and memory), th
2ca80 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a  is is a simple.*
2ca90 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20  * operation. No 
2caa0 49 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  IO is required..
2cab0 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e  **.** If changin
2cac0 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66  g into or out of
2cad0 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72   WAL mode the pr
2cae0 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20  ocedure is more 
2caf0 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a  complicated..**.
2cb00 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72 69 6e  ** Write a strin
2cb10 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  g containing the
2cb20 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d   final journal-m
2cb30 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65 72 20  ode to register 
2cb40 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a  P2..*/.case OP_J
2cb50 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20  ournalMode: {   
2cb60 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
2cb70 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ase */.  Btree *
2cb80 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  pBt;            
2cb90 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65           /* Btre
2cba0 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72  e to change jour
2cbb0 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20  nal mode of */. 
2cbc0 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20   Pager *pPager; 
2cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbe0 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69   /* Pager associ
2cbf0 61 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f  ated with pBt */
2cc00 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20  .  int eNew;    
2cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61     /* New journa
2cc30 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  l mode */.  int 
2cc40 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  eOld;           
2cc50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2cc60 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d  he old journal m
2cc70 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ode */.#ifndef S
2cc80 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
2cc90 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
2cca0 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  lename;         
2ccb0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
2ccc0 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50  base file for pP
2ccd0 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  ager */.#endif..
2cce0 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33    eNew = pOp->p3
2ccf0 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77  ;.  assert( eNew
2cd00 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2cd10 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20  ODE_DELETE .    
2cd20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2cd30 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
2cd40 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c  UNCATE .       |
2cd50 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2cd60 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53  URNALMODE_PERSIS
2cd70 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  T .       || eNe
2cd80 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2cd90 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20  MODE_OFF.       
2cda0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2cdb0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
2cdc0 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  Y.       || eNew
2cdd0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2cde0 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c  ODE_WAL.       |
2cdf0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2ce00 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a  URNALMODE_QUERY.
2ce10 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
2ce20 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2ce30 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2ce40 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2ce50 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70  dOnly==0 );..  p
2ce60 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
2ce70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61  ->p1].pBt;.  pPa
2ce80 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
2ce90 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20  eePager(pBt);.  
2cea0 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61  eOld = sqlite3Pa
2ceb0 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerGetJournalMod
2cec0 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28  e(pPager);.  if(
2ced0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2cee0 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29  RNALMODE_QUERY )
2cef0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
2cf00 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65  if( !sqlite3Page
2cf10 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e  rOkToChangeJourn
2cf20 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29  alMode(pPager) )
2cf30 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23   eNew = eOld;..#
2cf40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2cf50 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61  IT_WAL.  zFilena
2cf60 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  me = sqlite3Page
2cf70 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72  rFilename(pPager
2cf80 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e  , 1);..  /* Do n
2cf90 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73  ot allow a trans
2cfa0 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c  ition to journal
2cfb0 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20  _mode=WAL for a 
2cfc0 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e  database.  ** in
2cfd0 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61   temporary stora
2cfe0 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53  ge or if the VFS
2cff0 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
2d000 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20  t shared memory 
2d010 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77  .  */.  if( eNew
2d020 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2d030 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73  ODE_WAL.   && (s
2d040 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
2d050 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20  Filename)==0    
2d060 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66         /* Temp f
2d070 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c  ile */.       ||
2d080 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61   !sqlite3PagerWa
2d090 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65  lSupported(pPage
2d0a0 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72  r))   /* No shar
2d0b0 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72  ed-memory suppor
2d0c0 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e  t */.  ){.    eN
2d0d0 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a  ew = eOld;.  }..
2d0e0 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c    if( (eNew!=eOl
2d0f0 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d  d).   && (eOld==
2d100 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2d110 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50  E_WAL || eNew==P
2d120 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2d130 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69  _WAL).  ){.    i
2d140 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  f( !db->autoComm
2d150 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  it || db->nVdbeR
2d160 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72  ead>1 ){.      r
2d170 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
2d180 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
2d190 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2d1a0 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20  rMsg, db, .     
2d1b0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61       "cannot cha
2d1c0 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20  nge %s wal mode 
2d1d0 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
2d1e0 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20  ansaction",.    
2d1f0 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47        (eNew==PAG
2d200 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2d210 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f  AL ? "into" : "o
2d220 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b  ut of").      );
2d230 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
2d240 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20    }else{. .     
2d250 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52   if( eOld==PAGER
2d260 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2d270 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
2d280 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f  f leaving WAL mo
2d290 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f  de, close the lo
2d2a0 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65  g file. If succe
2d2b0 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a  ssful, the call.
2d2c0 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61          ** to Pa
2d2d0 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68  gerCloseWal() ch
2d2e0 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65  eckpoints and de
2d2f0 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65 2d  letes the write-
2d300 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20  ahead-log .     
2d310 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45     ** file. An E
2d320 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61  XCLUSIVE lock ma
2d330 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20  y still be held 
2d340 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
2d350 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a  file .        **
2d360 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73 73   after a success
2d370 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20  ful return. .   
2d380 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
2d390 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  rc = sqlite3Page
2d3a0 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72  rCloseWal(pPager
2d3b0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
2d3c0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2d3d0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
2d3e0 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
2d3f0 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65  Mode(pPager, eNe
2d400 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  w);.        }.  
2d410 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f      }else if( eO
2d420 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
2d430 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a  LMODE_MEMORY ){.
2d440 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f          /* Canno
2d450 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72  t transition dir
2d460 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52  ectly from MEMOR
2d470 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d  Y to WAL.  Use m
2d480 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20  ode OFF.        
2d490 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65  ** as an interme
2d4a0 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20  diate */.       
2d4b0 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
2d4c0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
2d4d0 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  er, PAGER_JOURNA
2d4e0 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20  LMODE_OFF);.    
2d4f0 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
2d500 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69  Open a transacti
2d510 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  on on the databa
2d520 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c  se file. Regardl
2d530 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e  ess of the journ
2d540 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65  al.      ** mode
2d550 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  , this transacti
2d560 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20 61  on always uses a
2d570 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
2d580 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
2d590 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
2d5a0 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
2d5b0 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  pBt)==0 );.     
2d5c0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2d5d0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
2d5e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
2d5f0 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28  etVersion(pBt, (
2d600 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2d610 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20  NALMODE_WAL ? 2 
2d620 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20  : 1));.      }. 
2d630 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20     }.  }.#endif 
2d640 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /* ifndef SQLITE
2d650 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20  _OMIT_WAL */..  
2d660 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65 4e  if( rc ){.    eN
2d670 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20  ew = eOld;.  }. 
2d680 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50   eNew = sqlite3P
2d690 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
2d6a0 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
2d6b0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
2d6c0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
2d6d0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2d6e0 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
2d6f0 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
2d700 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c  >z = (char *)sql
2d710 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
2d720 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75  ame(eNew);.  pOu
2d730 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74  t->n = sqlite3St
2d740 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b  rlen30(pOut->z);
2d750 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
2d760 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71  QLITE_UTF8;.  sq
2d770 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2d780 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e  ncoding(pOut, en
2d790 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b  coding);.  break
2d7a0 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ;.};.#endif /* S
2d7b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
2d7c0 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e  A */..#if !defin
2d7d0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
2d7e0 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e  ACUUM) && !defin
2d7f0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2d800 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65  TTACH)./* Opcode
2d810 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a  : Vacuum * * * *
2d820 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20   *.**.** Vacuum 
2d830 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
2d840 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ase.  This opcod
2d850 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68  e will cause oth
2d860 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61  er virtual.** ma
2d870 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65  chines to be cre
2d880 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49  ated and run.  I
2d890 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c  t may not be cal
2d8a0 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a  led from within.
2d8b0 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** a transaction
2d8c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63  ..*/.case OP_Vac
2d8d0 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  uum: {.  assert(
2d8e0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2d8f0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2d900 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a  3RunVacuum(&p->z
2d910 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62  ErrMsg, db);.  b
2d920 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
2d930 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2d940 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
2d950 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  UUM)./* Opcode: 
2d960 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32  IncrVacuum P1 P2
2d970 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72   * * *.**.** Per
2d980 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74  form a single st
2d990 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d  ep of the increm
2d9a0 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f  ental vacuum pro
2d9b0 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65  cedure on.** the
2d9c0 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66   P1 database. If
2d9d0 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20   the vacuum has 
2d9e0 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74  finished, jump t
2d9f0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  o instruction.**
2da00 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
2da10 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2da20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2da30 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2da40 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20  _IncrVacuum: {  
2da50 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2da60 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
2da70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2da80 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2da90 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2daa0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
2dab0 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
2dac0 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  1)<<pOp->p1))!=0
2dad0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
2dae0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2daf0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
2db00 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
2db10 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2db20 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29  eIncrVacuum(pBt)
2db30 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2db40 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70  TE_DONE ){.    p
2db50 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2db60 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2db70 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _OK;.  }.  break
2db80 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
2db90 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31  pcode: Expire P1
2dba0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
2dbb0 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64  ause precompiled
2dbc0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62   statements to b
2dbd0 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41  ecome expired. A
2dbe0 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
2dbf0 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74  ent.** fails wit
2dc00 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
2dc10 6f 66 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  of SQLITE_SCHEMA
2dc20 20 69 66 20 69 74 20 69 73 20 65 76 65 72 20 65   if it is ever e
2dc30 78 65 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61  xecuted .** (via
2dc40 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29   sqlite3_step())
2dc50 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
2dc60 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
2dc70 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
2dc80 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
2dc90 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
2dca0 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
2dcb0 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
2dcc0 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
2dcd0 73 20 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a  s affected. .*/.
2dce0 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20  case OP_Expire: 
2dcf0 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31  {.  if( !pOp->p1
2dd00 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
2dd10 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
2dd20 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
2dd30 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70  else{.    p->exp
2dd40 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ired = 1;.  }.  
2dd50 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
2dd60 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
2dd70 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70  ARED_CACHE./* Op
2dd80 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20  code: TableLock 
2dd90 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
2dda0 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50   Synopsis: iDb=P
2ddb0 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d  1 root=P2 write=
2ddc0 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20  P3.**.** Obtain 
2ddd0 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74  a lock on a part
2dde0 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68  icular table. Th
2ddf0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
2de00 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e  s only used when
2de10 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63  .** the shared-c
2de20 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73 20  ache feature is 
2de30 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20  enabled. .**.** 
2de40 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
2de50 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2de60 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
2de70 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2de80 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65  .** on which the
2de90 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65   lock is acquire
2dea0 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69  d.  A readlock i
2deb0 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33  s obtained if P3
2dec0 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74  ==0 or.** a writ
2ded0 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e  e lock if P3==1.
2dee0 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69  .**.** P2 contai
2def0 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65  ns the root-page
2df00 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
2df10 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20   lock..**.** P4 
2df20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74  contains a point
2df30 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f  er to the name o
2df40 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
2df50 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69  g locked. This i
2df60 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74  s only.** used t
2df70 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72  o generate an er
2df80 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74  ror message if t
2df90 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62  he lock cannot b
2dfa0 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63  e obtained..*/.c
2dfb0 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b  ase OP_TableLock
2dfc0 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65  : {.  u8 isWrite
2dfd0 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e  Lock = (u8)pOp->
2dfe0 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74  p3;.  if( isWrit
2dff0 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d  eLock || 0==(db-
2e000 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65  >flags&SQLITE_Re
2e010 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29  adUncommitted) )
2e020 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70  {.    int p1 = p
2e030 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73  Op->p1; .    ass
2e040 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31  ert( p1>=0 && p1
2e050 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20  <db->nDb );.    
2e060 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
2e070 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
2e080 73 6b 29 31 29 3c 3c 70 31 29 29 21 3d 30 20 29  sk)1)<<p1))!=0 )
2e090 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 73  ;.    assert( is
2e0a0 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20  WriteLock==0 || 
2e0b0 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29  isWriteLock==1 )
2e0c0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2e0d0 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65  e3BtreeLockTable
2e0e0 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74  (db->aDb[p1].pBt
2e0f0 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69  , pOp->p2, isWri
2e100 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28  teLock);.    if(
2e110 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49   (rc&0xFF)==SQLI
2e120 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20  TE_LOCKED ){.   
2e130 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
2e140 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
2e150 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2e160 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2e170 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73 65 20  , db, "database 
2e180 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a  table is locked:
2e190 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a   %s", z);.    }.
2e1a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2e1b0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2e1c0 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
2e1d0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2e1e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2e1f0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2e200 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50  : VBegin * * * P
2e210 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  4 *.**.** P4 may
2e220 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   be a pointer to
2e230 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
2e240 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73   structure. If s
2e250 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20  o, call the .** 
2e260 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f  xBegin method fo
2e270 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a  r that table..**
2e280 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65  .** Also, whethe
2e290 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73  r or not P4 is s
2e2a0 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74  et, check that t
2e2b0 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67  his is not being
2e2c0 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20   called from.** 
2e2d0 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63  within a callbac
2e2e0 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  k to a virtual t
2e2f0 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74  able xSync() met
2e300 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74  hod. If it is, t
2e310 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65  he error.** code
2e320 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20   will be set to 
2e330 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a  SQLITE_LOCKED..*
2e340 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e  /.case OP_VBegin
2e350 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56  : {.  VTable *pV
2e360 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70  Tab;.  pVTab = p
2e370 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20  Op->p4.pVtab;.  
2e380 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
2e390 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29  Begin(db, pVTab)
2e3a0 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20 29 20  ;.  if( pVTab ) 
2e3b0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
2e3c0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54 61 62  tErrmsg(p, pVTab
2e3d0 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65 61  ->pVtab);.  brea
2e3e0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2e3f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2e400 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2e410 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2e420 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2e430 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20  Opcode: VCreate 
2e440 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2e450 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
2e460 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
2e470 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
2e480 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72  P1. Call the xCr
2e490 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66  eate method.** f
2e4a0 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
2e4b0 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74  /.case OP_VCreat
2e4c0 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69  e: {.  rc = sqli
2e4d0 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
2e4e0 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
2e4f0 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45  Op->p4.z, &p->zE
2e500 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b  rrMsg);.  break;
2e510 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2e520 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2e530 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2e540 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2e550 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2e560 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50  code: VDestroy P
2e570 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2e580 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20   P4 is the name 
2e590 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
2e5a0 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  le in database P
2e5b0 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65  1.  Call the xDe
2e5c0 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20  stroy method.** 
2e5d0 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  of that table..*
2e5e0 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72  /.case OP_VDestr
2e5f0 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61  oy: {.  p->inVta
2e600 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72  bMethod = 2;.  r
2e610 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
2e620 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70  allDestroy(db, p
2e630 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2e640 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  z);.  p->inVtabM
2e650 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65  ethod = 0;.  bre
2e660 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2e670 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2e680 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2e690 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e6a0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2e6b0 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50   Opcode: VOpen P
2e6c0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2e6d0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
2e6e0 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
2e6f0 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
2e700 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
2e710 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20  cture..** P1 is 
2e720 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e  a cursor number.
2e730 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70    This opcode op
2e740 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20  ens a cursor to 
2e750 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
2e760 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20  able and stores 
2e770 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50  that cursor in P
2e780 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f  1..*/.case OP_VO
2e790 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
2e7a0 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c  sor *pCur;.  sql
2e7b0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
2e7c0 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20   *pVtabCursor;. 
2e7d0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2e7e0 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Vtab;.  sqlite3_
2e7f0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
2e800 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
2e810 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70 43  IsReader );.  pC
2e820 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 43  ur = 0;.  pVtabC
2e830 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74  ursor = 0;.  pVt
2e840 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
2e850 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  ab->pVtab;.  pMo
2e860 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f  dule = (sqlite3_
2e870 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e  module *)pVtab->
2e880 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
2e890 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f 64 75  t(pVtab && pModu
2e8a0 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  le);.  rc = pMod
2e8b0 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62  ule->xOpen(pVtab
2e8c0 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72 29 3b  , &pVtabCursor);
2e8d0 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  .  sqlite3VtabIm
2e8e0 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
2e8f0 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51 4c 49  tab);.  if( SQLI
2e900 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20  TE_OK==rc ){.   
2e910 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73   /* Initialize s
2e920 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2e930 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f  or base class */
2e940 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f 72  .    pVtabCursor
2e950 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b  ->pVtab = pVtab;
2e960 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  ..    /* Initial
2e970 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f 72 20  ize vdbe cursor 
2e980 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43  object */.    pC
2e990 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
2e9a0 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
2e9b0 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69  0, -1, 0);.    i
2e9c0 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20  f( pCur ){.     
2e9d0 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2e9e0 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72  or = pVtabCursor
2e9f0 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 4d  ;.      pCur->pM
2ea00 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 43 75 72  odule = pVtabCur
2ea10 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64  sor->pVtab->pMod
2ea20 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ule;.    }else{.
2ea30 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63        db->malloc
2ea40 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20  Failed = 1;.    
2ea50 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73    pModule->xClos
2ea60 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  e(pVtabCursor);.
2ea70 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
2ea80 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2ea90 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2eaa0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2eab0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2eac0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2ead0 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20  Opcode: VFilter 
2eae0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
2eaf0 20 53 79 6e 6f 70 73 69 73 3a 20 69 50 6c 61 6e   Synopsis: iPlan
2eb00 3d 72 5b 50 33 5d 20 7a 50 6c 61 6e 3d 27 50 34  =r[P3] zPlan='P4
2eb10 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  '.**.** P1 is a 
2eb20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73  cursor opened us
2eb30 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69  ing VOpen.  P2 i
2eb40 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20  s an address to 
2eb50 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68  jump to if.** th
2eb60 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c  e filtered resul
2eb70 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a  t set is empty..
2eb80 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68  **.** P4 is eith
2eb90 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72  er NULL or a str
2eba0 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e  ing that was gen
2ebb0 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42  erated by the xB
2ebc0 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68  estIndex.** meth
2ebd0 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
2ebe0 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74  .  The interpret
2ebf0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20  ation of the P4 
2ec00 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a  string is left.*
2ec10 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  * to the module 
2ec20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a  implementation..
2ec30 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2ec40 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46  e invokes the xF
2ec50 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20  ilter method on 
2ec60 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
2ec70 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62  e specified.** b
2ec80 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67  y P1.  The integ
2ec90 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61  er query plan pa
2eca0 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74  rameter to xFilt
2ecb0 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  er is stored in 
2ecc0 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20  register.** P3. 
2ecd0 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74  Register P3+1 st
2ece0 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61  ores the argc pa
2ecf0 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61  rameter to be pa
2ed00 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78  ssed to the.** x
2ed10 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52  Filter method. R
2ed20 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50  egisters P3+2..P
2ed30 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65  3+1+argc are the
2ed40 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f   argc.** additio
2ed50 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77  nal parameters w
2ed60 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20  hich are passed 
2ed70 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73  to.** xFilter as
2ed80 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20   argv. Register 
2ed90 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67  P3+2 becomes arg
2eda0 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64  v[0] when passed
2edb0 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a   to xFilter..**.
2edc0 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64  ** A jump is mad
2edd0 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72  e to P2 if the r
2ede0 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20  esult set after 
2edf0 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20  filtering would 
2ee00 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73  be empty..*/.cas
2ee10 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20  e OP_VFilter: { 
2ee20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
2ee30 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
2ee40 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73  Query;.  const s
2ee50 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
2ee60 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70  Module;.  Mem *p
2ee70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41  Query;.  Mem *pA
2ee80 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  rgc;.  sqlite3_v
2ee90 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61  tab_cursor *pVta
2eea0 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74  bCursor;.  sqlit
2eeb0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2eec0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2eed0 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  ur;.  int res;. 
2eee0 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a   int i;.  Mem **
2eef0 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79  apArg;..  pQuery
2ef00 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2ef10 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51  ];.  pArgc = &pQ
2ef20 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20  uery[1];.  pCur 
2ef30 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2ef40 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  p1];.  assert( m
2ef50 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79  emIsValid(pQuery
2ef60 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ) );.  REGISTER_
2ef70 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
2ef80 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74  Query);.  assert
2ef90 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
2efa0 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75  sor );.  pVtabCu
2efb0 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74  rsor = pCur->pVt
2efc0 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61  abCursor;.  pVta
2efd0 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  b = pVtabCursor-
2efe0 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
2eff0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
2f000 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74  le;..  /* Grab t
2f010 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20  he index number 
2f020 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74  and argc paramet
2f030 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ers */.  assert(
2f040 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26   (pQuery->flags&
2f050 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70  MEM_Int)!=0 && p
2f060 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  Argc->flags==MEM
2f070 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d  _Int );.  nArg =
2f080 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69   (int)pArgc->u.i
2f090 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e  ;.  iQuery = (in
2f0a0 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a  t)pQuery->u.i;..
2f0b0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
2f0c0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a  xFilter method *
2f0d0 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20  /.  {.    res = 
2f0e0 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70  0;.    apArg = p
2f0f0 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72  ->apArg;.    for
2f100 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20  (i = 0; i<nArg; 
2f110 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72  i++){.      apAr
2f120 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b  g[i] = &pArgc[i+
2f130 31 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1];.      sqlite
2f140 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
2f150 65 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20 20 20  e(apArg[i]);.   
2f160 20 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61   }..    p->inVta
2f170 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20  bMethod = 1;.   
2f180 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2f190 46 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73  Filter(pVtabCurs
2f1a0 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d  or, iQuery, pOp-
2f1b0 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41  >p4.z, nArg, apA
2f1c0 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74  rg);.    p->inVt
2f1d0 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
2f1e0 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
2f1f0 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
2f200 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  ab);.    if( rc=
2f210 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2f220 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
2f230 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72  e->xEof(pVtabCur
2f240 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  sor);.    }..   
2f250 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
2f260 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2f270 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
2f280 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
2f290 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  0;..  break;.}.#
2f2a0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2f2b0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2f2c0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2f2d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2f2e0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2f2f0 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  : VColumn P1 P2 
2f300 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
2f310 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d  is: r[P3]=vcolum
2f320 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  n(P2).**.** Stor
2f330 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
2f340 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20  he P2-th column 
2f350 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66  of.** the row of
2f360 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62   the virtual-tab
2f370 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20  le that the .** 
2f380 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69  P1 cursor is poi
2f390 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65  nting to into re
2f3a0 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61  gister P3..*/.ca
2f3b0 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b  se OP_VColumn: {
2f3c0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2f3d0 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
2f3e0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2f3f0 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
2f400 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33  pDest;.  sqlite3
2f410 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78  _context sContex
2f420 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72  t;..  VdbeCursor
2f430 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73   *pCur = p->apCs
2f440 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2f450 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
2f460 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  bCursor );.  ass
2f470 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
2f480 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
2f490 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
2f4a0 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d  );.  pDest = &aM
2f4b0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
2f4c0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2f4d0 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28  p, pDest);.  if(
2f4e0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
2f4f0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2f500 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
2f510 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
2f520 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
2f530 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  r->pVtabCursor->
2f540 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2f550 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2f560 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
2f570 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b  dule->xColumn );
2f580 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74  .  memset(&sCont
2f590 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  ext, 0, sizeof(s
2f5a0 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a  Context));..  /*
2f5b0 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c   The output cell
2f5c0 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76   may already hav
2f5d0 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63  e a buffer alloc
2f5e0 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20  ated. Move.  ** 
2f5f0 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74  the current cont
2f600 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65 78 74  ents to sContext
2f610 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68  .s so in case th
2f620 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20  e user-function 
2f630 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65 20 74 68  .  ** can use th
2f640 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  e already alloca
2f650 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65  ted buffer inste
2f660 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67  ad of allocating
2f670 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65   a .  ** new one
2f680 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
2f690 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f  VdbeMemMove(&sCo
2f6a0 6e 74 65 78 74 2e 73 2c 20 70 44 65 73 74 29 3b  ntext.s, pDest);
2f6b0 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
2f6c0 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d  g(&sContext.s, M
2f6d0 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 72 63 20  EM_Null);..  rc 
2f6e0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  = pModule->xColu
2f6f0 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  mn(pCur->pVtabCu
2f700 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c  rsor, &sContext,
2f710 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c   pOp->p2);.  sql
2f720 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
2f730 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
2f740 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69    if( sContext.i
2f750 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63  sError ){.    rc
2f760 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72   = sContext.isEr
2f770 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43  ror;.  }..  /* C
2f780 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f  opy the result o
2f790 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  f the function t
2f7a0 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  o the P3 registe
2f7b0 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68  r. We.  ** do th
2f7c0 69 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  is regardless of
2f7d0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
2f7e0 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  an error occurre
2f7f0 64 20 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a  d to ensure any.
2f800 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c    ** dynamic all
2f810 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74  ocation in sCont
2f820 65 78 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72  ext.s (a Mem str
2f830 75 63 74 29 20 69 73 20 20 72 65 6c 65 61 73 65  uct) is  release
2f840 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  d..  */.  sqlite
2f850 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2f860 69 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c  ing(&sContext.s,
2f870 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71   encoding);.  sq
2f880 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
2f890 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78  (pDest, &sContex
2f8a0 74 2e 73 29 3b 0a 20 20 52 45 47 49 53 54 45 52  t.s);.  REGISTER
2f8b0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
2f8c0 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45  pDest);.  UPDATE
2f8d0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
2f8e0 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  est);..  if( sql
2f8f0 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
2f900 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20  g(pDest) ){.    
2f910 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
2f920 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2f930 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2f940 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2f950 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2f960 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2f970 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2f980 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20  VNext P1 P2 * * 
2f990 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  *.**.** Advance 
2f9a0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31  virtual table P1
2f9b0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77   to the next row
2f9c0 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73   in its result s
2f9d0 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74  et and.** jump t
2f9e0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
2f9f0 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69  .  Or, if the vi
2fa00 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20  rtual table has 
2fa10 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65  reached.** the e
2fa20 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74  nd of its result
2fa30 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20   set, then fall 
2fa40 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2fa50 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2fa60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78  .*/.case OP_VNex
2fa70 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  t: {   /* jump *
2fa80 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
2fa90 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
2faa0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2fab0 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
2fac0 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  res;.  VdbeCurso
2fad0 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20  r *pCur;..  res 
2fae0 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  = 0;.  pCur = p-
2faf0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2fb00 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
2fb10 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
2fb20 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
2fb30 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  Row ){.    break
2fb40 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
2fb50 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2fb60 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
2fb70 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
2fb80 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
2fb90 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29  pModule->xNext )
2fba0 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
2fbb0 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f  he xNext() metho
2fbc0 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
2fbd0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79   There is no way
2fbe0 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e   for the.  ** un
2fbf0 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65  derlying impleme
2fc00 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72  ntation to retur
2fc10 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e  n an error if on
2fc20 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a  e occurs during.
2fc30 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e    ** xNext(). In
2fc40 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72  stead, if an err
2fc50 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20  or occurs, true 
2fc60 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64  is returned (ind
2fc70 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20  icating that .  
2fc80 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c  ** data is avail
2fc90 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72  able) and the er
2fca0 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ror code returne
2fcb0 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f  d when xColumn o
2fcc0 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65  r.  ** some othe
2fcd0 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74  r method is next
2fce0 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20   invoked on the 
2fcf0 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62  save virtual tab
2fd00 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a  le cursor..  */.
2fd10 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2fd20 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d  d = 1;.  rc = pM
2fd30 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75  odule->xNext(pCu
2fd40 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
2fd50 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2fd60 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  od = 0;.  sqlite
2fd70 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
2fd80 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
2fd90 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2fda0 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d   ){.    res = pM
2fdb0 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72  odule->xEof(pCur
2fdc0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  ->pVtabCursor);.
2fdd0 20 20 7d 0a 0a 20 20 69 66 28 20 21 72 65 73 20    }..  if( !res 
2fde0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
2fdf0 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70  re is data, jump
2fe00 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63   to P2 */.    pc
2fe10 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2fe20 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
2fe30 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2fe40 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2fe50 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2fe60 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2fe70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2fe80 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2fe90 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20  ode: VRename P1 
2fea0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
2feb0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2fec0 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
2fed0 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
2fee0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
2fef0 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
2ff00 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
2ff10 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52  corresponding xR
2ff20 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68  ename method. Th
2ff30 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65  e value.** in re
2ff40 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73  gister P1 is pas
2ff50 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65  sed as the zName
2ff60 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
2ff70 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
2ff80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e  .*/.case OP_VRen
2ff90 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ame: {.  sqlite3
2ffa0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2ffb0 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70  Mem *pName;..  p
2ffc0 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
2ffd0 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
2ffe0 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Name = &aMem[pOp
2fff0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
30000 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
30010 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73  >xRename );.  as
30020 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
30030 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73  (pName) );.  ass
30040 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
30050 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ==0 );.  REGISTE
30060 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
30070 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72   pName);.  asser
30080 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20  t( pName->flags 
30090 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74  & MEM_Str );.  t
300a0 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
300b0 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
300c0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
300d0 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
300e0 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20  TE_UTF16BE );.  
300f0 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
30100 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
30110 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73  16LE );.  rc = s
30120 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
30130 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20  Encoding(pName, 
30140 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
30150 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
30160 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56  K ){.    rc = pV
30170 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
30180 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61  ename(pVtab, pNa
30190 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20 73 71 6c 69  me->z);.    sqli
301a0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
301b0 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
301c0 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
301d0 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
301e0 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
301f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
30200 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
30210 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31  code: VUpdate P1
30220 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
30230 79 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72 5b  ynopsis: data=r[
30240 50 33 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 50  P3] N=P2.**.** P
30250 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
30260 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
30270 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
30280 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
30290 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
302a0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
302b0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55  corresponding xU
302c0 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32  pdate method. P2
302d0 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63   values.** are c
302e0 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79  ontiguous memory
302f0 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20   cells starting 
30300 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f  at P3 to pass to
30310 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a   the xUpdate .**
30320 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65   invocation. The
30330 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
30340 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72  er (P3+P2-1) cor
30350 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
30360 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74  .** p2th element
30370 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72 72   of the argv arr
30380 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55 70  ay passed to xUp
30390 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  date..**.** The 
303a0 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77  xUpdate method w
303b0 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20  ill do a DELETE 
303c0 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20  or an INSERT or 
303d0 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67  both..** The arg
303e0 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68  v[0] element (wh
303f0 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ich corresponds 
30400 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  to memory cell P
30410 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77  3).** is the row
30420 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64  id of a row to d
30430 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b  elete.  If argv[
30440 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  0] is NULL then 
30450 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20  no .** deletion 
30460 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72 67  occurs.  The arg
30470 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20  v[1] element is 
30480 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
30490 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54   new .** row.  T
304a0 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20  his can be NULL 
304b0 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72 74  to have the virt
304c0 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74  ual table select
304d0 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
304e0 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20  id for itself.  
304f0 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 65  The subsequent e
30500 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61  lements in the a
30510 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65  rray are .** the
30520 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d   values of colum
30530 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ns in the new ro
30540 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d  w..**.** If P2==
30550 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74  1 then no insert
30560 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20   is performed.  
30570 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72  argv[0] is the r
30580 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77  owid of.** a row
30590 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a   to delete..**.*
305a0 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61  * P1 is a boolea
305b0 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73  n flag. If it is
305c0 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64   set to true and
305d0 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61 6c   the xUpdate cal
305e0 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66  l.** is successf
305f0 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ul, then the val
30600 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
30610 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
30620 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69  rt_rowid() .** i
30630 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
30640 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20  ue of the rowid 
30650 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74  for the row just
30660 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 63 61   inserted..*/.ca
30670 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b  se OP_VUpdate: {
30680 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
30690 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65  *pVtab;.  sqlite
306a0 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
306b0 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  e;.  int nArg;. 
306c0 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65   int i;.  sqlite
306d0 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20  _int64 rowid;.  
306e0 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d  Mem **apArg;.  M
306f0 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72  em *pX;..  asser
30700 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20  t( pOp->p2==1   
30710 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d       || pOp->p5=
30720 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f  =OE_Fail   || pO
30730 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  p->p5==OE_Rollba
30740 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ck .       || pO
30750 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20  p->p5==OE_Abort 
30760 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49  || pOp->p5==OE_I
30770 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  gnore || pOp->p5
30780 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20 29  ==OE_Replace.  )
30790 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
307a0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
307b0 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
307c0 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
307d0 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
307e0 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
307f0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41  b->pModule;.  nA
30800 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  rg = pOp->p2;.  
30810 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
30820 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a  ype==P4_VTAB );.
30830 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f    if( ALWAYS(pMo
30840 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29  dule->xUpdate) )
30850 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e 43  {.    u8 vtabOnC
30860 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74  onflict = db->vt
30870 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20  abOnConflict;.  
30880 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41    apArg = p->apA
30890 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d  rg;.    pX = &aM
308a0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
308b0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
308c0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73  ; i++){.      as
308d0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
308e0 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  (pX) );.      me
308f0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
30900 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 73 71 6c  , pX);.      sql
30910 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
30920 54 79 70 65 28 70 58 29 3b 0a 20 20 20 20 20 20  Type(pX);.      
30930 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20  apArg[i] = pX;. 
30940 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d       pX++;.    }
30950 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43  .    db->vtabOnC
30960 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70  onflict = pOp->p
30970 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  5;.    rc = pMod
30980 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74  ule->xUpdate(pVt
30990 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c  ab, nArg, apArg,
309a0 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62   &rowid);.    db
309b0 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
309c0 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63   = vtabOnConflic
309d0 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  t;.    sqlite3Vt
309e0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
309f0 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
30a00 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
30a10 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  && pOp->p1 ){.  
30a20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67      assert( nArg
30a30 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26  >1 && apArg[0] &
30a40 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61  & (apArg[0]->fla
30a50 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a  gs&MEM_Null) );.
30a60 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f        db->lastRo
30a70 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20  wid = lastRowid 
30a80 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
30a90 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29     if( (rc&0xff)
30aa0 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
30ab0 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70  INT && pOp->p4.p
30ac0 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e  Vtab->bConstrain
30ad0 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  t ){.      if( p
30ae0 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p5==OE_Ignor
30af0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  e ){.        rc 
30b00 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
30b10 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
30b20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
30b30 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45   = ((pOp->p5==OE
30b40 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41  _Replace) ? OE_A
30b50 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b  bort : pOp->p5);
30b60 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
30b70 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68  se{.      p->nCh
30b80 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  ange++;.    }.  
30b90 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
30ba0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
30bb0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
30bc0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c  */..#ifndef  SQL
30bd0 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
30be0 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65  RAGMAS./* Opcode
30bf0 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50  : Pagecount P1 P
30c00 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
30c10 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ite the current 
30c20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
30c30 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74  in database P1 t
30c40 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32  o memory cell P2
30c50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67  ..*/.case OP_Pag
30c60 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  ecount: {       
30c70 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
30c80 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
30c90 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
30ca0 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 64 62  BtreeLastPage(db
30cb0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
30cc0 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Bt);.  break;.}.
30cd0 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
30ce0 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
30cf0 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
30d00 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20  pcode: MaxPgcnt 
30d10 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
30d20 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74 68  ** Try to set th
30d30 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
30d40 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73  ount for databas
30d50 65 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  e P1 to the valu
30d60 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e  e in P3..** Do n
30d70 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d  ot let the maxim
30d80 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61  um page count fa
30d90 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72  ll below the cur
30da0 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20  rent page count 
30db0 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68  and.** do not ch
30dc0 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  ange the maximum
30dd0 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75   page count valu
30de0 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a  e if P3==0..**.*
30df0 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69  * Store the maxi
30e00 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61  mum page count a
30e10 66 74 65 72 20 74 68 65 20 63 68 61 6e 67 65 20  fter the change 
30e20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
30e30 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67  */.case OP_MaxPg
30e40 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cnt: {          
30e50 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
30e60 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ease */.  unsign
30e70 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20  ed int newMax;. 
30e80 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
30e90 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
30ea0 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65  p->p1].pBt;.  ne
30eb0 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20  wMax = 0;.  if( 
30ec0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e  pOp->p3 ){.    n
30ed0 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42  ewMax = sqlite3B
30ee0 74 72 65 65 4c 61 73 74 50 61 67 65 28 70 42 74  treeLastPage(pBt
30ef0 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61  );.    if( newMa
30f00 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x < (unsigned)pO
30f10 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d  p->p3 ) newMax =
30f20 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e   (unsigned)pOp->
30f30 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  p3;.  }.  pOut->
30f40 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72  u.i = sqlite3Btr
30f50 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70  eeMaxPageCount(p
30f60 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62  Bt, newMax);.  b
30f70 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
30f80 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30f90 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70  OMIT_TRACE./* Op
30fa0 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a 20  code: Trace * * 
30fb0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  * P4 *.**.** If 
30fc0 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c  tracing is enabl
30fd0 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69 74  ed (by the sqlit
30fe0 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65  e3_trace()) inte
30ff0 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74  rface, then.** t
31000 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  he UTF-8 string 
31010 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20  contained in P4 
31020 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68  is emitted on th
31030 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
31040 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61  ..*/.case OP_Tra
31050 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54  ce: {.  char *zT
31060 72 61 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b  race;.  char *z;
31070 0a 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61  ..  if( db->xTra
31080 63 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f 69  ce.   && !p->doi
31090 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28 7a  ngRerun.   && (z
310a0 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
310b0 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
310c0 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20   p->zSql))!=0.  
310d0 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  ){.    z = sqlit
310e0 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28  e3VdbeExpandSql(
310f0 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  p, zTrace);.    
31100 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70  db->xTrace(db->p
31110 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20  TraceArg, z);.  
31120 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
31130 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64  db, z);.  }.#ifd
31140 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43  ef SQLITE_USE_FC
31150 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72 61  NTL_TRACE.  zTra
31160 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
31170 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
31180 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54  >zSql);.  if( zT
31190 72 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74 20  race ){.    int 
311a0 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
311b0 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
311c0 0a 20 20 20 20 20 20 69 66 28 20 28 28 31 3c 3c  .      if( ((1<<
311d0 69 29 20 26 20 70 2d 3e 62 74 72 65 65 4d 61 73  i) & p->btreeMas
311e0 6b 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  k)==0 ) continue
311f0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
31200 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
31210 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
31220 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  e, SQLITE_FCNTL_
31230 54 52 41 43 45 2c 20 7a 54 72 61 63 65 29 3b 0a  TRACE, zTrace);.
31240 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
31250 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f 46   /* SQLITE_USE_F
31260 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23 69  CNTL_TRACE */.#i
31270 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
31280 47 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61  G.  if( (db->fla
31290 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54  gs & SQLITE_SqlT
312a0 72 61 63 65 29 21 3d 30 0a 20 20 20 26 26 20 28  race)!=0.   && (
312b0 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
312c0 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
312d0 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20  : p->zSql))!=0. 
312e0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
312f0 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d  ebugPrintf("SQL-
31300 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54  trace: %s\n", zT
31310 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  race);.  }.#endi
31320 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
31330 47 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  G */.  break;.}.
31340 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f  #endif.../* Opco
31350 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a  de: Noop * * * *
31360 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68   *.**.** Do noth
31370 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72  ing.  This instr
31380 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20  uction is often 
31390 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70  useful as a jump
313a0 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e  .** destination.
313b0 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  .*/./*.** The ma
313c0 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f  gic Explain opco
313d0 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65  de are only inse
313e0 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69  rted when explai
313f0 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69  n==2 (which.** i
31400 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68  s to say when th
31410 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  e EXPLAIN QUERY 
31420 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75  PLAN syntax is u
31430 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70  sed.).** This op
31440 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66  code records inf
31450 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68  ormation from th
31460 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74  e optimizer.  It
31470 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73   is the.** the s
31480 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20  ame as a no-op. 
31490 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76   This opcodesnev
314a0 65 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20  er appears in a 
314b0 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e  real VM program.
314c0 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20  .*/.default: {  
314d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20          /* This 
314e0 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f  is really OP_Noo
314f0 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e  p and OP_Explain
31500 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
31510 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
31520 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  op || pOp->opcod
31530 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b  e==OP_Explain );
31540 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a  .  break;.}../**
31550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31560 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31570 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31580 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31590 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54  ***********.** T
315a0 68 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20  he cases of the 
315b0 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
315c0 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65   above this line
315d0 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69   should all be i
315e0 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20  ndented.** by 6 
315f0 73 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65  spaces.  But the
31600 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61   left-most 6 spa
31610 63 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ces have been re
31620 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65  moved to improve
31630 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c   the.** readabil
31640 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20  ity.  From this 
31650 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74  point on down, t
31660 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74  he normal indent
31670 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a  ation rules are.
31680 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a  ** restored..***
31690 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
316a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
316b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
316c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
316d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20  **********/.    
316e0 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  }..#ifdef VDBE_P
316f0 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20  ROFILE.    {.   
31700 20 20 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d     u64 elapsed =
31710 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
31720 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20   - start;.      
31730 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65  pOp->cycles += e
31740 6c 61 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f  lapsed;.      pO
31750 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a  p->cnt++;.#if 0.
31760 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28          fprintf(
31770 73 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20  stdout, "%10llu 
31780 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20  ", elapsed);.   
31790 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
317a0 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
317b0 6f 72 69 67 50 63 2c 20 26 61 4f 70 5b 6f 72 69  origPc, &aOp[ori
317c0 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20  gPc]);.#endif.  
317d0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
317e0 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
317f0 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69   code adds nothi
31800 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c  ng to the actual
31810 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20   functionality. 
31820 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f     ** of the pro
31830 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c  gram.  It is onl
31840 79 20 68 65 72 65 20 66 6f 72 20 74 65 73 74 69  y here for testi
31850 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67  ng and debugging
31860 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20  ..    ** On the 
31870 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64  other hand, it d
31880 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63 79 63  oes burn CPU cyc
31890 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65 20 74  les every time t
318a0 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68  hrough.    ** th
318b0 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70  e evaluator loop
318c0 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61  .  So we can lea
318d0 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e  ve it out when N
318e0 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64  DEBUG is defined
318f0 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66  ..    */.#ifndef
31900 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73 65   NDEBUG.    asse
31910 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63  rt( pc>=-1 && pc
31920 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64  <p->nOp );..#ifd
31930 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
31940 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65      if( p->trace
31950 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63   ){.      if( rc
31960 21 3d 30 20 29 20 66 70 72 69 6e 74 66 28 70 2d  !=0 ) fprintf(p-
31970 3e 74 72 61 63 65 2c 22 72 63 3d 25 64 5c 6e 22  >trace,"rc=%d\n"
31980 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ,rc);.      if( 
31990 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28  pOp->opflags & (
319a0 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45  OPFLG_OUT2_PRERE
319b0 4c 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32  LEASE|OPFLG_OUT2
319c0 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  ) ){.        reg
319d0 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72  isterTrace(p->tr
319e0 61 63 65 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61  ace, pOp->p2, &a
319f0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
31a00 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
31a10 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20   pOp->opflags & 
31a20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20  OPFLG_OUT3 ){.  
31a30 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
31a40 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f  ace(p->trace, pO
31a50 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p3, &aMem[pOp
31a60 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p3]);.      }.
31a70 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a      }.#endif  /*
31a80 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
31a90 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42  .#endif  /* NDEB
31aa0 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68  UG */.  }  /* Th
31ab0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72  e end of the for
31ac0 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f  (;;) loop the lo
31ad0 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f  ops through opco
31ae0 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20  des */..  /* If 
31af0 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  we reach this po
31b00 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  int, it means th
31b10 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20  at execution is 
31b20 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20  finished with.  
31b30 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73  ** an error of s
31b40 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76  ome kind..  */.v
31b50 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a  dbe_error_halt:.
31b60 20 20 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a    assert( rc );.
31b70 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20    p->rc = rc;.  
31b80 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65  testcase( sqlite
31b90 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c  3GlobalConfig.xL
31ba0 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74  og!=0 );.  sqlit
31bb0 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61 74  e3_log(rc, "stat
31bc0 65 6d 65 6e 74 20 61 62 6f 72 74 73 20 61 74 20  ement aborts at 
31bd0 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20  %d: [%s] %s", . 
31be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bf0 20 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70    pc, p->zSql, p
31c00 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71  ->zErrMsg);.  sq
31c10 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
31c20 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
31c30 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
31c40 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
31c50 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51  d = 1;.  rc = SQ
31c60 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66  LITE_ERROR;.  if
31c70 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  ( resetSchemaOnF
31c80 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20 73 71  ault>0 ){.    sq
31c90 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
31ca0 65 6d 61 28 64 62 2c 20 72 65 73 65 74 53 63 68  ema(db, resetSch
31cb0 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20  emaOnFault-1);. 
31cc0 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73   }..  /* This is
31cd0 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75   the only way ou
31ce0 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64  t of this proced
31cf0 75 72 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f  ure.  We have to
31d00 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68  .  ** release th
31d10 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72  e mutexes on btr
31d20 65 65 73 20 74 68 61 74 20 77 65 72 65 20 61 63  ees that were ac
31d30 71 75 69 72 65 64 20 61 74 20 74 68 65 0a 20 20  quired at the.  
31d40 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f  ** top. */.vdbe_
31d50 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61  return:.  db->la
31d60 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
31d70 77 69 64 3b 0a 20 20 74 65 73 74 63 61 73 65 28  wid;.  testcase(
31d80 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b 0a 20 20   nVmStep>0 );.  
31d90 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
31da0 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d  TE_STMTSTATUS_VM
31db0 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e 74 29 6e  _STEP] += (int)n
31dc0 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c 69 74 65  VmStep;.  sqlite
31dd0 33 56 64 62 65 4c 65 61 76 65 28 70 29 3b 0a 20  3VdbeLeave(p);. 
31de0 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f   return rc;..  /
31df0 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
31e00 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  f a string or bl
31e10 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53  ob larger than S
31e20 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
31e30 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74  .  ** is encount
31e40 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62  ered..  */.too_b
31e50 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53 65 74  ig:.  sqlite3Set
31e60 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
31e70 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e 67 20  sg, db, "string 
31e80 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22  or blob too big"
31e90 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
31ea0 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20  _TOOBIG;.  goto 
31eb0 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
31ec0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
31ed0 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28  ere if a malloc(
31ee0 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f  ) fails..  */.no
31ef0 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c  _mem:.  db->mall
31f00 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
31f10 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
31f20 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
31f30 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
31f40 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54  ");.  rc = SQLIT
31f50 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20  E_NOMEM;.  goto 
31f60 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
31f70 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
31f80 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65  ere for any othe
31f90 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20  r kind of fatal 
31fa0 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22  error.  The "rc"
31fb0 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73   variable.  ** s
31fc0 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65  hould hold the e
31fd0 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a  rror number..  *
31fe0 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  /.abort_due_to_e
31ff0 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20  rror:.  assert( 
32000 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b  p->zErrMsg==0 );
32010 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
32020 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53  cFailed ) rc = S
32030 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69  QLITE_NOMEM;.  i
32040 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f  f( rc!=SQLITE_IO
32050 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ERR_NOMEM ){.   
32060 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
32070 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
32080 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
32090 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d  ErrStr(rc));.  }
320a0 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
320b0 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
320c0 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 74  ump to here if t
320d0 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  he sqlite3_inter
320e0 72 75 70 74 28 29 20 41 50 49 20 73 65 74 73 20  rupt() API sets 
320f0 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20 20  the interrupt.  
32100 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62  ** flag..  */.ab
32110 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
32120 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28 20  rupt:.  assert( 
32130 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
32140 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 53  pted );.  rc = S
32150 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
32160 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  .  p->rc = rc;. 
32170 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
32180 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
32190 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
321a0 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 67  ErrStr(rc));.  g
321b0 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
321c0 61 6c 74 3b 0a 7d 0a                             alt;.}.