/ Hex Artifact Content
Login

Artifact e1b2f881f85598b8e5d3366a3cdba60526d40144:


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 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1670: 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 23  MIT_MERGE_SORT.#
1680: 20 64 65 66 69 6e 65 20 69 73 53 6f 72 74 65 72   define isSorter
1690: 28 78 29 20 30 0a 23 65 6c 73 65 0a 23 20 64 65  (x) 0.#else.# de
16a0: 66 69 6e 65 20 69 73 53 6f 72 74 65 72 28 78 29  fine isSorter(x)
16b0: 20 28 28 78 29 2d 3e 70 53 6f 72 74 65 72 21 3d   ((x)->pSorter!=
16c0: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
16d0: 20 41 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70   Argument pMem p
16e0: 6f 69 6e 74 73 20 61 74 20 61 20 72 65 67 69 73  oints at a regis
16f0: 74 65 72 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ter that will be
1700: 20 70 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20   passed to a.** 
1710: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
1720: 63 74 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65  ction or returne
1730: 64 20 74 6f 20 74 68 65 20 75 73 65 72 20 61 73  d to the user as
1740: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   the result of a
1750: 20 71 75 65 72 79 2e 0a 2a 2a 20 54 68 69 73 20   query..** This 
1760: 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65  routine sets the
1770: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 76 61 72 69   pMem->type vari
1780: 61 62 6c 65 20 75 73 65 64 20 62 79 20 74 68 65  able used by the
1790: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a   sqlite3_value_*
17a0: 28 29 20 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 2e  () .** routines.
17b0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
17c0: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
17d0: 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69  (Mem *pMem){.  i
17e0: 6e 74 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d  nt flags = pMem-
17f0: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 66 6c  >flags;.  if( fl
1800: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
1810: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
1820: 20 3d 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a   = SQLITE_NULL;.
1830: 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66    }.  else if( f
1840: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1850: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
1860: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45   = SQLITE_INTEGE
1870: 52 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66  R;.  }.  else if
1880: 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ( flags & MEM_Re
1890: 61 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  al ){.    pMem->
18a0: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c  type = SQLITE_FL
18b0: 4f 41 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  OAT;.  }.  else 
18c0: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
18d0: 53 74 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  Str ){.    pMem-
18e0: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54  >type = SQLITE_T
18f0: 45 58 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  EXT;.  }else{.  
1900: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1910: 51 4c 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a  QLITE_BLOB;.  }.
1920: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  }../*.** Allocat
1930: 65 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d  e VdbeCursor num
1940: 62 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72  ber iCur.  Retur
1950: 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  n a pointer to i
1960: 74 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a  t.  Return NULL.
1970: 2a 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74  ** if we run out
1980: 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73   of memory..*/.s
1990: 74 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72  tatic VdbeCursor
19a0: 20 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72   *allocateCursor
19b0: 28 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20  (.  Vdbe *p,    
19c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19d0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
19e0: 20 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20   */.  int iCur, 
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1a00: 6e 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20  ndex of the new 
1a10: 56 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20  VdbeCursor */.  
1a20: 69 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20  int nField,     
1a30: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a40: 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1a50: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1a60: 2a 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20  */.  int iDb,   
1a70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
1a80: 74 61 62 61 73 65 20 74 68 65 20 63 75 72 73 6f  tabase the curso
1a90: 72 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72  r belongs to, or
1aa0: 20 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42   -1 */.  int isB
1ab0: 74 72 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f  treeCursor     /
1ac0: 2a 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65  * True for B-Tre
1ad0: 65 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73  e.  False for ps
1ae0: 65 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74  eudo-table or vt
1af0: 61 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69  ab */.){.  /* Fi
1b00: 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  nd the memory ce
1b10: 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ll that will be 
1b20: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
1b30: 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79  e blob of memory
1b40: 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66  .  ** required f
1b50: 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72 73  or this VdbeCurs
1b60: 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49 74  or structure. It
1b70: 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74   is convenient t
1b80: 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64  o use a .  ** vd
1b90: 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  be memory cell t
1ba0: 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d  o manage the mem
1bb0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72  ory allocation r
1bc0: 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20  equired for a.  
1bd0: 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  ** VdbeCursor st
1be0: 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65 20  ructure for the 
1bf0: 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e  following reason
1c00: 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a  s:.  **.  **   *
1c10: 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f   Sometimes curso
1c20: 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73  r numbers are us
1c30: 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20  ed for a couple 
1c40: 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a  of different.  *
1c50: 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20 69  *     purposes i
1c60: 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d  n a vdbe program
1c70: 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74 20  . The different 
1c80: 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75 69  uses might requi
1c90: 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66  re.  **     diff
1ca0: 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f  erent sized allo
1cb0: 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20  cations. Memory 
1cc0: 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72  cells provide gr
1cd0: 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20  owable.  **     
1ce0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a  allocations..  *
1cf0: 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20  *.  **   * When 
1d00: 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d  using ENABLE_MEM
1d10: 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20  ORY_MANAGEMENT, 
1d20: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66  memory cell buff
1d30: 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20  ers can.  **    
1d40: 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79   be freed lazily
1d50: 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 33   via the sqlite3
1d60: 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
1d70: 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a  ) API. This.  **
1d80: 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74       minimizes t
1d90: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c  he number of mal
1da0: 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62  loc calls made b
1db0: 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20  y the system..  
1dc0: 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63  **.  ** Memory c
1dd0: 65 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73  ells for cursors
1de0: 20 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61   are allocated a
1df0: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
1e00: 20 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70   address.  ** sp
1e10: 61 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c  ace. Memory cell
1e20: 20 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65   (p->nMem) corre
1e30: 73 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72  sponds to cursor
1e40: 20 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20   0. Space for.  
1e50: 2a 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d  ** cursor 1 is m
1e60: 61 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79  anaged by memory
1e70: 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31   cell (p->nMem-1
1e80: 29 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d  ), etc..  */.  M
1e90: 65 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61  em *pMem = &p->a
1ea0: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72  Mem[p->nMem-iCur
1eb0: 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b  ];..  int nByte;
1ec0: 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ed0: 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20  Cx = 0;.  nByte 
1ee0: 3d 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28  = .      ROUND8(
1ef0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
1f00: 72 29 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73  r)) + .      (is
1f10: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1f20: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1f30: 7a 65 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20  ze():0) + .     
1f40: 20 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66   2*nField*sizeof
1f50: 28 75 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74  (u32);..  assert
1f60: 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  ( iCur<p->nCurso
1f70: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
1f80: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
1f90: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1fa0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1fb0: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
1fc0: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
1fd0: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
1fe0: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
1ff0: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c  dbeMemGrow(pMem,
2000: 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20   nByte, 0) ){.  
2010: 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d    p->apCsr[iCur]
2020: 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43 75   = pCx = (VdbeCu
2030: 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20  rsor*)pMem->z;. 
2040: 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30     memset(pCx, 0
2050: 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  , sizeof(VdbeCur
2060: 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e  sor));.    pCx->
2070: 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70  iDb = iDb;.    p
2080: 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69  Cx->nField = nFi
2090: 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69  eld;.    if( nFi
20a0: 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78  eld ){.      pCx
20b0: 2d 3e 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a  ->aType = (u32 *
20c0: 29 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38  )&pMem->z[ROUND8
20d0: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
20e0: 6f 72 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20  or))];.    }.   
20f0: 20 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73   if( isBtreeCurs
2100: 6f 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  or ){.      pCx-
2110: 3e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75  >pCursor = (BtCu
2120: 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
2130: 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38   &pMem->z[ROUND8
2140: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
2150: 6f 72 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69  or))+2*nField*si
2160: 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20  zeof(u32)];.    
2170: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
2180: 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43  rsorZero(pCx->pC
2190: 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
21a0: 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a  }.  return pCx;.
21b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20  }../*.** Try to 
21c0: 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20  convert a value 
21d0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
21e0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
21f0: 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f   we can.** do so
2200: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
2210: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49   information.  I
2220: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
2230: 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20  f the string.** 
2240: 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d  looks like a num
2250: 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ber, convert it 
2260: 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20  into a number.  
2270: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a  If it does not.*
2280: 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75  * look like a nu
2290: 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61  mber, leave it a
22a0: 6c 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  lone..*/.static 
22b0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
22c0: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
22d0: 52 65 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65  Rec){.  if( (pRe
22e0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
22f0: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d  Real|MEM_Int))==
2300: 30 20 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20  0 ){.    double 
2310: 72 56 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20  rValue;.    i64 
2320: 69 56 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65  iValue;.    u8 e
2330: 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a  nc = pRec->enc;.
2340: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2350: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30  lags&MEM_Str)==0
2360: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69   ) return;.    i
2370: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
2380: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
2390: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d   pRec->n, enc)==
23a0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  0 ) return;.    
23b0: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74  if( 0==sqlite3At
23c0: 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69  oi64(pRec->z, &i
23d0: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
23e0: 65 6e 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52  enc) ){.      pR
23f0: 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65  ec->u.i = iValue
2400: 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c  ;.      pRec->fl
2410: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
2420: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2430: 20 70 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75   pRec->r = rValu
2440: 65 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66  e;.      pRec->f
2450: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c  lags |= MEM_Real
2460: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
2470: 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  *.** Processing 
2480: 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20  is determine by 
2490: 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72  the affinity par
24a0: 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51  ameter:.**.** SQ
24b0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
24c0: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
24d0: 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  REAL:.** SQLITE_
24e0: 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20  AFF_NUMERIC:.** 
24f0: 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72     Try to conver
2500: 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74  t pRec to an int
2510: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2520: 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20  ion or a .**    
2530: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72  floating-point r
2540: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
2550: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
2560: 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20  esentation.**   
2570: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
2580: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
2590: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
25a0: 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20  ntation is.**   
25b0: 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65   always preferre
25c0: 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61  d, even if the a
25d0: 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c  ffinity is REAL,
25e0: 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61   because.**    a
25f0: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2600: 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65  entation is more
2610: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74   space efficient
2620: 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20   on disk..**.** 
2630: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a  SQLITE_AFF_TEXT:
2640: 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70  .**    Convert p
2650: 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65  Rec to a text re
2660: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  presentation..**
2670: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  .** SQLITE_AFF_N
2680: 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70  ONE:.**    No-op
2690: 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61  .  pRec is uncha
26a0: 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nged..*/.static 
26b0: 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69  void applyAffini
26c0: 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c  ty(.  Mem *pRec,
26d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
26e0: 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20   value to apply 
26f0: 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20  affinity to */. 
2700: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20   char affinity, 
2710: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
2720: 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
2730: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20  ed */.  u8 enc  
2740: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
2750: 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63  se this text enc
2760: 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66  oding */.){.  if
2770: 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  ( affinity==SQLI
2780: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20  TE_AFF_TEXT ){. 
2790: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d     /* Only attem
27a0: 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  pt the conversio
27b0: 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68 65  n to TEXT if the
27c0: 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  re is an integer
27d0: 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20   or real.    ** 
27e0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28  representation (
27f0: 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f  blob and NULL do
2800: 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74   not get convert
2810: 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e  ed) but no strin
2820: 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65  g.    ** represe
2830: 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a  ntation..    */.
2840: 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63      if( 0==(pRec
2850: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29  ->flags&MEM_Str)
2860: 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73   && (pRec->flags
2870: 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49  &(MEM_Real|MEM_I
2880: 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71  nt)) ){.      sq
2890: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
28a0: 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29  ngify(pRec, enc)
28b0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63  ;.    }.    pRec
28c0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
28d0: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a  _Real|MEM_Int);.
28e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69    }else if( affi
28f0: 6e 69 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46  nity!=SQLITE_AFF
2900: 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73  _NONE ){.    ass
2910: 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53  ert( affinity==S
2920: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
2930: 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53  R || affinity==S
2940: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20  QLITE_AFF_REAL. 
2950: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61              || a
2960: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2970: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20  AFF_NUMERIC );. 
2980: 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
2990: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
29a0: 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
29b0: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
29c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
29d0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
29e0: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20  y(pRec);.    }. 
29f0: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20   }.}../*.** Try 
2a00: 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74  to convert the t
2a10: 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ype of a functio
2a20: 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20  n argument or a 
2a30: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a  result column.**
2a40: 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20   into a numeric 
2a50: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20  representation. 
2a60: 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45   Use either INTE
2a70: 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63  GER or REAL whic
2a80: 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72  hever.** is appr
2a90: 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e  opriate.  But on
2aa0: 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72  ly do the conver
2ab0: 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f  sion if it is po
2ac0: 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a  ssible without.*
2ad0: 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
2ae0: 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e  ation and return
2af0: 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70   the revised typ
2b00: 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e of the argumen
2b10: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
2b20: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
2b30: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
2b40: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d  ue *pVal){.  Mem
2b50: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
2b60: 56 61 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d  Val;.  if( pMem-
2b70: 3e 74 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45  >type==SQLITE_TE
2b80: 58 54 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e  XT ){.    applyN
2b90: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
2ba0: 4d 65 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Mem);.    sqlite
2bb0: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
2bc0: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
2bd0: 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65  eturn pMem->type
2be0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
2bf0: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
2c00: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
2c10: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
2c20: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
2c30: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
2c40: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
2c50: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2c60: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2c70: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
2c80: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
2c90: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
2ca0: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
2cb0: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
2cc0: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
2cd0: 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  enc);.}..#ifdef 
2ce0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
2cf0: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
2d00: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2d10: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
2d20: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
2d30: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
2d40: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
2d50: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
2d60: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
2d70: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
2d80: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
2d90: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
2da0: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
2db0: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
2dc0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2dd0: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
2de0: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
2df0: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
2e00: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
2e10: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
2e20: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
2e30: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
2e40: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
2e50: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
2e60: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2e70: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
2e80: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
2e90: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
2ea0: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
2eb0: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
2ec0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2ed0: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
2ee0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
2ef0: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
2f00: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
2f10: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
2f20: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
2f30: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
2f40: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
2f50: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
2f60: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
2f70: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
2f80: 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a  zCsr, "%c", c);.
2f90: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
2fa0: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
2fb0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  );.    sqlite3_s
2fc0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
2fd0: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
2fe0: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
2ff0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3000: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
3010: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
3020: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
3030: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3040: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
3050: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
3060: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
3070: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3080: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3090: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
30a0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
30b0: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
30c0: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
30d0: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
30e0: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
30f0: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
3100: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
3110: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
3120: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
3130: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3140: 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63  zCsr, "]%s", enc
3150: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3160: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3170: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3180: 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20  Csr);.    if( f 
3190: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
31a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
31b0: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22  intf(100, zCsr,"
31c0: 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a  +%dz",pMem->u.nZ
31d0: 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  ero);.      zCsr
31e0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
31f0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3200: 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30  .    *zCsr = '\0
3210: 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66  ';.  }else if( f
3220: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
3230: 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20    int j, k;.    
3240: 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20  zBuf[0] = ' ';. 
3250: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
3260: 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  yn ){.      zBuf
3270: 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20  [1] = 'z';.     
3280: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3290: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
32a0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
32b0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
32c0: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
32d0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b    zBuf[1] = 't';
32e0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
32f0: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
3300: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3310: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3320: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
3330: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65      zBuf[1] = 'e
3340: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
3350: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3360: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
3370: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3380: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27     zBuf[1] = 's'
3390: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20  ;.    }.    k = 
33a0: 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  2;.    sqlite3_s
33b0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42  nprintf(100, &zB
33c0: 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65  uf[k], "%d", pMe
33d0: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  m->n);.    k += 
33e0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
33f0: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3400: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a  Buf[k++] = '[';.
3410: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31      for(j=0; j<1
3420: 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && j<pMem->n; 
3430: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63  j++){.      u8 c
3440: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20   = pMem->z[j];. 
3450: 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30       if( c>=0x20
3460: 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20   && c<0x7f ){.  
3470: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
3480: 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = c;.      }else
3490: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
34a0: 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++] = '.';.     
34b0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75   }.    }.    zBu
34c0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20  f[k++] = ']';.  
34d0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
34e0: 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c  tf(100,&zBuf[k],
34f0: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
3500: 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  enc]);.    k += 
3510: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3520: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3530: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20  Buf[k++] = 0;.  
3540: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  }.}.#endif..#ifd
3550: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3560: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20  /*.** Print the 
3570: 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73  value of a regis
3580: 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20  ter for tracing 
3590: 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61  purposes:.*/.sta
35a0: 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63  tic void memTrac
35b0: 65 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74  ePrint(FILE *out
35c0: 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28  , Mem *p){.  if(
35d0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
35e0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72 69  Null ){.    fpri
35f0: 6e 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c 22  ntf(out, " NULL"
3600: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3610: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3620: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3630: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3640: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
3650: 6f 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22 2c  out, " si:%lld",
3660: 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73   p->u.i);.  }els
3670: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
3680: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
3690: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 69  fprintf(out, " i
36a0: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
36b0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
36c0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
36d0: 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  INT.  }else if( 
36e0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
36f0: 65 61 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  eal ){.    fprin
3700: 74 66 28 6f 75 74 2c 20 22 20 72 3a 25 67 22 2c  tf(out, " r:%g",
3710: 20 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20   p->r);.#endif. 
3720: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3730: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
3740: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
3750: 6f 75 74 2c 20 22 20 28 72 6f 77 73 65 74 29 22  out, " (rowset)"
3760: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
3770: 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a  char zBuf[200];.
3780: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
3790: 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c  emPrettyPrint(p,
37a0: 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72 69   zBuf);.    fpri
37b0: 6e 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a 20  ntf(out, " ");. 
37c0: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
37d0: 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d  "%s", zBuf);.  }
37e0: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72  .}.static void r
37f0: 65 67 69 73 74 65 72 54 72 61 63 65 28 46 49 4c  egisterTrace(FIL
3800: 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65 67  E *out, int iReg
3810: 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70 72  , Mem *p){.  fpr
3820: 69 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b 25  intf(out, "REG[%
3830: 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20  d] = ", iReg);. 
3840: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 6f   memTracePrint(o
3850: 75 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e 74  ut, p);.  fprint
3860: 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a  f(out, "\n");.}.
3870: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
3880: 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64  QLITE_DEBUG.#  d
3890: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
38a0: 52 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d 3e  RACE(R,M) if(p->
38b0: 74 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72  trace)registerTr
38c0: 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c 4d  ace(p->trace,R,M
38d0: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
38e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
38f0: 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23  (R,M).#endif...#
3900: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
3910: 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d  LE../* .** hwtim
3920: 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c  e.h contains inl
3930: 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f  ine assembler co
3940: 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  de for implement
3950: 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72  ing .** high-per
3960: 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20  formance timing 
3970: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e  routines..*/.#in
3980: 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22  clude "hwtime.h"
3990: 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ..#endif../*.** 
39a0: 54 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  The CHECK_FOR_IN
39b0: 54 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64 65  TERRUPT macro de
39c0: 66 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b 73  fined here looks
39d0: 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a 2a   to see if the.*
39e0: 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  * sqlite3_interr
39f0: 75 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68 61  upt() routine ha
3a00: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20 20  s been called.  
3a10: 49 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c 20  If it has been, 
3a20: 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73 69  then.** processi
3a30: 6e 67 20 6f 66 20 74 68 65 20 56 44 42 45 20 70  ng of the VDBE p
3a40: 72 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72 72  rogram is interr
3a50: 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  upted..**.** Thi
3a60: 73 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74 6f  s macro added to
3a70: 20 65 76 65 72 79 20 69 6e 73 74 72 75 63 74 69   every instructi
3a80: 6f 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20 6a  on that does a j
3a90: 75 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ump in order to.
3aa0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 6c  ** implement a l
3ab0: 6f 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74 20  oop.  This test 
3ac0: 75 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65 76  used to be on ev
3ad0: 65 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74 72  ery single instr
3ae0: 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74  uction,.** but t
3af0: 68 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f 72  hat meant we mor
3b00: 65 20 74 65 73 74 69 6e 67 20 74 68 61 6e 20 77  e testing than w
3b10: 65 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f 6e  e needed.  By on
3b20: 6c 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a 2a  ly testing the.*
3b30: 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20 69  * flag on jump i
3b40: 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65 20  nstructions, we 
3b50: 67 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73 70  get a (small) sp
3b60: 65 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74 2e  eed improvement.
3b70: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45 43  .*/.#define CHEC
3b80: 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 20  K_FOR_INTERRUPT 
3b90: 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  \.   if( db->u1.
3ba0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
3bb0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
3bc0: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 0a 23  o_interrupt;...#
3bd0: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a  ifndef NDEBUG./*
3be0: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
3bf0: 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64  n is only called
3c00: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
3c10: 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73  assert() express
3c20: 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b  ion. It.** check
3c30: 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74  s that the sqlit
3c40: 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20  e3.nTransaction 
3c50: 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72  variable is corr
3c60: 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20  ectly set to.** 
3c70: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  the number of no
3c80: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
3c90: 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74  vepoints current
3ca0: 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69  ly in the .** li
3cb0: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
3cc0: 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53  ng at sqlite3.pS
3cd0: 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a  avepoint..** .**
3ce0: 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20   Usage:.**.**   
3cf0: 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
3d00: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
3d10: 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ) );.*/.static i
3d20: 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  nt checkSavepoin
3d30: 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a  tCount(sqlite3 *
3d40: 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30  db){.  int n = 0
3d50: 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
3d60: 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53  ;.  for(p=db->pS
3d70: 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70  avepoint; p; p=p
3d80: 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20  ->pNext) n++;.  
3d90: 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e  assert( n==(db->
3da0: 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
3db0: 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
3dc0: 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65  vepoint) );.  re
3dd0: 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66  turn 1;.}.#endif
3de0: 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ../*.** Transfer
3df0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74   error message t
3e00: 65 78 74 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69  ext from an sqli
3e10: 74 65 33 5f 76 74 61 62 2e 7a 45 72 72 4d 73 67  te3_vtab.zErrMsg
3e20: 20 28 74 65 78 74 20 73 74 6f 72 65 64 0a 2a 2a   (text stored.**
3e30: 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   in memory obtai
3e40: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
3e50: 5f 6d 61 6c 6c 6f 63 29 20 69 6e 74 6f 20 61 20  _malloc) into a 
3e60: 56 64 62 65 2e 7a 45 72 72 4d 73 67 20 28 74 65  Vdbe.zErrMsg (te
3e70: 78 74 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20  xt stored.** in 
3e80: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
3e90: 66 72 6f 6d 20 73 71 6c 69 74 65 33 44 62 4d 61  from sqlite3DbMa
3ea0: 6c 6c 6f 63 29 2e 0a 2a 2f 0a 73 74 61 74 69 63  lloc)..*/.static
3eb0: 20 76 6f 69 64 20 69 6d 70 6f 72 74 56 74 61 62   void importVtab
3ec0: 45 72 72 4d 73 67 28 56 64 62 65 20 2a 70 2c 20  ErrMsg(Vdbe *p, 
3ed0: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
3ee0: 74 61 62 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  tab){.  sqlite3 
3ef0: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 73  *db = p->db;.  s
3f00: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
3f10: 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
3f20: 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
3f30: 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c  ite3DbStrDup(db,
3f40: 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 29   pVtab->zErrMsg)
3f50: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
3f60: 28 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 29  (pVtab->zErrMsg)
3f70: 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
3f80: 73 67 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  sg = 0;.}.../*.*
3f90: 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63  * Execute as muc
3fa0: 68 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67  h of a VDBE prog
3fb0: 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68  ram as we can th
3fc0: 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a  en return..**.**
3fd0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
3fe0: 52 65 61 64 79 28 29 20 6d 75 73 74 20 62 65 20  Ready() must be 
3ff0: 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68  called before th
4000: 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  is routine in or
4010: 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20  der to.** close 
4020: 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68  the program with
4030: 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74   a final OP_Halt
4040: 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74   and to set up t
4050: 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20  he callbacks.** 
4060: 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65  and the error me
4070: 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a  ssage pointer..*
4080: 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20  *.** Whenever a 
4090: 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61  row or result da
40a0: 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  ta is available,
40b0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
40c0: 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76  ll either.** inv
40d0: 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20 63  oke the result c
40e0: 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72  allback (if ther
40f0: 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74  e is one) or ret
4100: 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  urn with.** SQLI
4110: 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66  TE_ROW..**.** If
4120: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
4130: 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f  ade to open a lo
4140: 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20 74  cked database, t
4150: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
4160: 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20  .** will either 
4170: 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20  invoke the busy 
4180: 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65  callback (if the
4190: 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74  re is one) or it
41a0: 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20   will.** return 
41b0: 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a  SQLITE_BUSY..**.
41c0: 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f  ** If an error o
41d0: 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20  ccurs, an error 
41e0: 6d 65 73 73 61 67 65 20 69 73 20 77 72 69 74 74  message is writt
41f0: 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74  en to memory obt
4200: 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71  ained.** from sq
4210: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61  lite3_malloc() a
4220: 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73  nd p->zErrMsg is
4230: 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74   made to point t
4240: 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a  o that memory..*
4250: 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65  * The error code
4260: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d   is stored in p-
4270: 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75  >rc and this rou
4280: 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c  tine returns SQL
4290: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
42a0: 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b   If the callback
42b0: 20 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f   ever returns no
42c0: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
42d0: 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a   program exits.*
42e0: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  * immediately.  
42f0: 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f  There will be no
4300: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62   error message b
4310: 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65  ut the p->rc fie
4320: 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  ld is.** set to 
4330: 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64  SQLITE_ABORT and
4340: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
4350: 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ll return SQLITE
4360: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20  _ERROR..**.** A 
4370: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
4380: 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73 20 70  n error causes p
4390: 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20 74  ->rc to be set t
43a0: 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61  o SQLITE_NOMEM a
43b0: 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69  nd this.** routi
43c0: 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c  ne to return SQL
43d0: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
43e0: 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72 72   Other fatal err
43f0: 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ors return SQLIT
4400: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41  E_ERROR..**.** A
4410: 66 74 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e  fter this routin
4420: 65 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  e has finished, 
4430: 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c  sqlite3VdbeFinal
4440: 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a  ize() should be.
4450: 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e  ** used to clean
4460: 20 75 70 20 74 68 65 20 6d 65 73 73 20 74 68 61   up the mess tha
4470: 74 20 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e  t was left behin
4480: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
4490: 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62  3VdbeExec(.  Vdb
44a0: 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20  e *p            
44b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
44c0: 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  DBE */.){.  int 
44d0: 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20  pc=0;           
44e0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72         /* The pr
44f0: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f  ogram counter */
4500: 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e  .  Op *aOp = p->
4510: 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  aOp;          /*
4520: 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20   Copy of p->aOp 
4530: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20  */.  Op *pOp;   
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4550: 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61  /* Current opera
4560: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63  tion */.  int rc
4570: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
4580: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
4590: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c   return */.  sql
45a0: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
45b0: 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64  ;       /* The d
45c0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20  atabase */.  u8 
45d0: 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
45e0: 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74  lt = 0; /* Reset
45f0: 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e   schema after an
4600: 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69   error if positi
4610: 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64  ve */.  u8 encod
4620: 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20  ing = ENC(db);  
4630: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4640: 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 23  se encoding */.#
4650: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4660: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4670: 42 41 43 4b 0a 20 20 69 6e 74 20 63 68 65 63 6b  BACK.  int check
4680: 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
4690: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 72 6f    /* True if pro
46a0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 73 20  gress callbacks 
46b0: 61 72 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  are enabled */. 
46c0: 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70   int nProgressOp
46d0: 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4f  s = 0;      /* O
46e0: 70 63 6f 64 65 73 20 65 78 65 63 75 74 65 64 20  pcodes executed 
46f0: 73 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20 63  since progress c
4700: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e 64  allback. */.#end
4710: 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d  if.  Mem *aMem =
4720: 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20   p->aMem;       
4730: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d  /* Copy of p->aM
4740: 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  em */.  Mem *pIn
4750: 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  1 = 0;          
4760: 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20     /* 1st input 
4770: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
4780: 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20   *pIn2 = 0;     
4790: 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69          /* 2nd i
47a0: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
47b0: 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b    Mem *pIn3 = 0;
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
47d0: 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  3rd input operan
47e0: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  d */.  Mem *pOut
47f0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4800: 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72    /* Output oper
4810: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f  and */.  int iCo
4820: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
4830: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
4840: 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65   last OP_Compare
4850: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
4860: 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20  int *aPermute = 
4870: 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65  0;         /* Pe
4880: 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c  rmutation of col
4890: 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70  umns for OP_Comp
48a0: 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73  are */.  i64 las
48b0: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
48c0: 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65  tRowid;  /* Save
48d0: 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c  d value of the l
48e0: 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44  ast insert ROWID
48f0: 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f   */.#ifdef VDBE_
4900: 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74  PROFILE.  u64 st
4910: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  art;            
4920: 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63       /* CPU cloc
4930: 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74  k count at start
4940: 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20   of opcode */.  
4950: 69 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20  int origPc;     
4960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72             /* Pr
4970: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74  ogram counter at
4980: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
4990: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a   */.#endif.  /**
49a0: 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55  * INSERT STACK U
49b0: 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a  NION HERE ***/..
49c0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67    assert( p->mag
49d0: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
49e0: 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65  UN );  /* sqlite
49f0: 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65  3_step() verifie
4a00: 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69  s this */.  sqli
4a10: 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b  te3VdbeEnter(p);
4a20: 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51  .  if( p->rc==SQ
4a30: 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
4a40: 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
4a50: 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  s if a malloc() 
4a60: 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f  inside a call to
4a70: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4a80: 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a  text() or.    **
4a90: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4aa0: 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e  text16() failed.
4ab0: 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f    */.    goto no
4ac0: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _mem;.  }.  asse
4ad0: 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  rt( p->rc==SQLIT
4ae0: 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53  E_OK || p->rc==S
4af0: 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20  QLITE_BUSY );.  
4b00: 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  p->rc = SQLITE_O
4b10: 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  K;.  assert( p->
4b20: 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20  explain==0 );.  
4b30: 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20  p->pResultSet = 
4b40: 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e  0;.  db->busyHan
4b50: 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a  dler.nBusy = 0;.
4b60: 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45    CHECK_FOR_INTE
4b70: 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65 33  RRUPT;.  sqlite3
4b80: 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70  VdbeIOTraceSql(p
4b90: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
4ba0: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
4bb0: 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68 65 63 6b  CALLBACK.  check
4bc0: 50 72 6f 67 72 65 73 73 20 3d 20 64 62 2d 3e 78  Progress = db->x
4bd0: 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a 23 65 6e  Progress!=0;.#en
4be0: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
4bf0: 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65  E_DEBUG.  sqlite
4c00: 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
4c10: 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70  oc();.  if( p->p
4c20: 63 3d 3d 30 20 20 26 26 20 28 70 2d 3e 64 62 2d  c==0  && (p->db-
4c30: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
4c40: 56 64 62 65 4c 69 73 74 69 6e 67 29 21 3d 30 20  VdbeListing)!=0 
4c50: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
4c60: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50    printf("VDBE P
4c70: 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c  rogram Listing:\
4c80: 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  n");.    sqlite3
4c90: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
4ca0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
4cb0: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
4cc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4cd0: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69  rintOp(stdout, i
4ce0: 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20  , &aOp[i]);.    
4cf0: 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45  }.  }.  sqlite3E
4d00: 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
4d10: 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70  ;.#endif.  for(p
4d20: 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c  c=p->pc; rc==SQL
4d30: 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20  ITE_OK; pc++){. 
4d40: 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30     assert( pc>=0
4d50: 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b   && pc<p->nOp );
4d60: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  .    if( db->mal
4d70: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
4d80: 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20   no_mem;.#ifdef 
4d90: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
4da0: 20 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20   origPc = pc;.  
4db0: 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65    start = sqlite
4dc0: 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69  3Hwtime();.#endi
4dd0: 66 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70  f.    pOp = &aOp
4de0: 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e  [pc];..    /* On
4df0: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
4e00: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
4e10: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
4e20: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4e30: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
4e40: 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
4e50: 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20    if( pc==0 ){. 
4e60: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56         printf("V
4e70: 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20 54 72  DBE Execution Tr
4e80: 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ace:\n");.      
4e90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4ea0: 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20 20  ntSql(p);.      
4eb0: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
4ec0: 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72  dbePrintOp(p->tr
4ed0: 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20  ace, pc, pOp);. 
4ee0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
4ef0: 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b    ..    /* Check
4f00: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65   to see if we ne
4f10: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61  ed to simulate a
4f20: 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68  n interrupt.  Th
4f30: 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a  is only happens.
4f40: 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76      ** if we hav
4f50: 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74  e a special test
4f60: 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23   build..    */.#
4f70: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
4f80: 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  T.    if( sqlite
4f90: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
4fa0: 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t>0 ){.      sql
4fb0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
4fc0: 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66  ount--;.      if
4fd0: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
4fe0: 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a  upt_count==0 ){.
4ff0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
5000: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
5010: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
5020: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
5030: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
5040: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f  S_CALLBACK.    /
5050: 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72  * Call the progr
5060: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ess callback if 
5070: 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  it is configured
5080: 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65   and the require
5090: 64 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20  d number.    ** 
50a0: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
50b0: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
50c0: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
50d0: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
50e0: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64      ** sqlite3Vd
50f0: 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63  beExec() or sinc
5100: 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20  e last time the 
5110: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5120: 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20  k was called).. 
5130: 20 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f     ** If the pro
5140: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72  gress callback r
5150: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
5160: 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61   exit the virtua
5170: 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20  l machine with. 
5180: 20 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63     ** a return c
5190: 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ode SQLITE_ABORT
51a0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
51b0: 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 20 29   checkProgress )
51c0: 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  {.      if( db->
51d0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50  nProgressOps==nP
51e0: 72 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20 20  rogressOps ){.  
51f0: 20 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20        int prc;. 
5200: 20 20 20 20 20 20 20 70 72 63 20 3d 20 64 62 2d         prc = db-
5210: 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70  >xProgress(db->p
5220: 50 72 6f 67 72 65 73 73 41 72 67 29 3b 0a 20 20  ProgressArg);.  
5230: 20 20 20 20 20 20 69 66 28 20 70 72 63 21 3d 30        if( prc!=0
5240: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63   ){.          rc
5250: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
5260: 55 50 54 3b 0a 20 20 20 20 20 20 20 20 20 20 67  UPT;.          g
5270: 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
5280: 61 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  alt;.        }. 
5290: 20 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73         nProgress
52a0: 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  Ops = 0;.      }
52b0: 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73  .      nProgress
52c0: 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e  Ops++;.    }.#en
52d0: 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61  dif..    /* On a
52e0: 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74  ny opcode with t
52f0: 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c 65  he "out2-prerele
5300: 61 73 65 22 20 74 61 67 2c 20 66 72 65 65 20 61  ase" tag, free a
5310: 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65 72 6e  ny.    ** extern
5320: 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f  al allocations o
5330: 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e  ut of mem[p2] an
5340: 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f  d set mem[p2] to
5350: 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e   be.    ** an un
5360: 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65 72 2e  defined integer.
5370: 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c 20 65    Opcodes will e
5380: 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20 74 68  ither fill in th
5390: 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a  e integer.    **
53a0: 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72   value or conver
53b0: 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64  t mem[p2] to a d
53c0: 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e 0a 20  ifferent type.. 
53d0: 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
53e0: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d  ( pOp->opflags==
53f0: 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
5400: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
5410: 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  e] );.    if( pO
5420: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5430: 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41  LG_OUT2_PRERELEA
5440: 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  SE ){.      asse
5450: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5460: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5470: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
5480: 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20  );.      pOut = 
5490: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
54a0: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
54b0: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
54c0: 0a 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52 65  .      VdbeMemRe
54d0: 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20  lease(pOut);.   
54e0: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
54f0: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a   MEM_Int;.    }.
5500: 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63  .    /* Sanity c
5510: 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72  hecking on other
5520: 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66   operands */.#if
5530: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
5540: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5550: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
5560: 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N1)!=0 ){.      
5570: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
5580: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5590: 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  t( pOp->p1<=p->n
55a0: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73  Mem );.      ass
55b0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
55c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20  &aMem[pOp->p1]) 
55d0: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
55e0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
55f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29   &aMem[pOp->p1])
5600: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5610: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5620: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5630: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5640: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
5650: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5660: 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
5670: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
5680: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
5690: 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p2]) );.      
56a0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
56b0: 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p2, &aMem[pO
56c0: 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p2]);.    }. 
56d0: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
56e0: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33  lags & OPFLG_IN3
56f0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5700: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
5710: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5720: 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
5730: 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  m );.      asser
5740: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5750: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
5760: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
5770: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26  TRACE(pOp->p3, &
5780: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
5790: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
57a0: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
57b0: 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a  FLG_OUT2)!=0 ){.
57c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
57d0: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
57e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
57f0: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
5800: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5810: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5820: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p2]);.    }.  
5830: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5840: 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  ags & OPFLG_OUT3
5850: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5860: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
5870: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5880: 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
5890: 6d 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  m );.      memAb
58a0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
58b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
58c0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a      }.#endif.  .
58d0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
58e0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
58f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5900: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5910: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5920: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5930: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
5940: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
5950: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
5960: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
5970: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
5980: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
5990: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
59a0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
59b0: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
59c0: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
59d0: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
59e0: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
59f0: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
5a00: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
5a10: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
5a20: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
5a30: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
5a40: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
5a50: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
5a60: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
5a70: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
5a80: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
5a90: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
5aa0: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
5ab0: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
5ac0: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5ad0: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5ae0: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
5af0: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
5b00: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
5b10: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
5b20: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
5b30: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
5b40: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
5b50: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
5b60: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
5b70: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
5b80: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
5b90: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
5ba0: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
5bb0: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
5bc0: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5bd0: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5be0: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5bf0: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5c00: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5c10: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5c20: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5c30: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
5c40: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
5c50: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
5c60: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
5c70: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
5c80: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
5c90: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
5ca0: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
5cb0: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
5cc0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
5cd0: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
5ce0: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
5cf0: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
5d00: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
5d10: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
5d20: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
5d30: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
5d40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
5d50: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
5d60: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
5d70: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
5d80: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
5d90: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
5da0: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
5db0: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
5dc0: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
5dd0: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
5de0: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
5df0: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
5e00: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
5e10: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
5e20: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72  n2, in3, out2_pr
5e30: 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20  erelease, out2, 
5e40: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
5e50: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
5e60: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
5e70: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
5e80: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
5e90: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
5ea0: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
5eb0: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
5ec0: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
5ed0: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
5ee0: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
5ef0: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
5f00: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
5f10: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
5f20: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
5f30: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
5f40: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
5f50: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
5f60: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
5f70: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
5f80: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
5f90: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
5fa0: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
5fb0: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
5fc0: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
5fd0: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
5fe0: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
5ff0: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
6000: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6040: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
6050: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
6060: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
6070: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
6080: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
6090: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
60a0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
60b0: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
60c0: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
60d0: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
60e0: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
60f0: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
6100: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
6110: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6120: 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46  ump */.  CHECK_F
6130: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
6140: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
6150: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6160: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20   Opcode:  Gosub 
6170: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
6180: 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
6190: 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f  ent address onto
61a0: 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
61b0: 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  and then jump to
61c0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a   address P2..*/.
61d0: 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b  case OP_Gosub: {
61e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
61f0: 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
6200: 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
6210: 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
6220: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6230: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6240: 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ert( (pIn1->flag
6250: 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20  s & MEM_Dyn)==0 
6260: 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  );.  memAboutToC
6270: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
6280: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6290: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d  MEM_Int;.  pIn1-
62a0: 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47  >u.i = pc;.  REG
62b0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
62c0: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63  >p1, pIn1);.  pc
62d0: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
62e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
62f0: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
6300: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6310: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
6320: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
6330: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
6340: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
6350: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e  /.case OP_Return
6360: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
6370: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
6380: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6390: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
63a0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
63b0: 20 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74 29   );.  pc = (int)
63c0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65  pIn1->u.i;.  bre
63d0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
63e0: 3a 20 20 59 69 65 6c 64 20 50 31 20 2a 20 2a 20  :  Yield P1 * * 
63f0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
6400: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
6410: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
6420: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
6430: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65  ..*/.case OP_Yie
6440: 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ld: {           
6450: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74   /* in1 */.  int
6460: 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20   pcDest;.  pIn1 
6470: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6480: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
6490: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  1->flags & MEM_D
64a0: 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  yn)==0 );.  pIn1
64b0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
64c0: 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69  t;.  pcDest = (i
64d0: 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn1->u.i;.  
64e0: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
64f0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
6500: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
6510: 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a  .  pc = pcDest;.
6520: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6530: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
6540: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
6550: 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  *.**.** Check th
6560: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
6570: 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69  ter P3.  If it i
6580: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74  s NULL then Halt
6590: 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65   using.** parame
65a0: 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20  ter P1, P2, and 
65b0: 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65  P4 as if this we
65c0: 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75  re a Halt instru
65d0: 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a  ction.  If the.*
65e0: 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  * value in regis
65f0: 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55  ter P3 is not NU
6600: 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  LL, then this ro
6610: 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70  utine is a no-op
6620: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
6630: 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  tIfNull: {      
6640: 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33  /* in3 */.  pIn3
6650: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
6660: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  ];.  if( (pIn3->
6670: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
6680: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
6690: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
66a0: 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a  into OP_Halt */.
66b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  }../* Opcode:  H
66c0: 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 2a  alt P1 P2 * P4 *
66d0: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
66e0: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
66f0: 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20  en cursors, etc 
6700: 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75  are closed.** au
6710: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a  tomatically..**.
6720: 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73  ** P1 is the res
6730: 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ult code returne
6740: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65  d by sqlite3_exe
6750: 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73  c(), sqlite3_res
6760: 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69  et(),.** or sqli
6770: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20  te3_finalize(). 
6780: 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61   For a normal ha
6790: 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  lt, this should 
67a0: 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29  be SQLITE_OK (0)
67b0: 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c  ..** For errors,
67c0: 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20   it can be some 
67d0: 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66  other value.  If
67e0: 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77   P1!=0 then P2 w
67f0: 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a  ill determine.**
6800: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
6810: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  to rollback the 
6820: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
6830: 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c  ion.  Do not rol
6840: 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d  lback.** if P2==
6850: 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20  OE_Fail. Do the 
6860: 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d  rollback if P2==
6870: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66  OE_Rollback.  If
6880: 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a   P2==OE_Abort,.*
6890: 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20  * then back out 
68a0: 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74  all changes that
68b0: 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64   have occurred d
68c0: 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75  uring this execu
68d0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56  tion of the.** V
68e0: 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  DBE, but do not 
68f0: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
6900: 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a  nsaction. .**.**
6910: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75   If P4 is not nu
6920: 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e  ll then it is an
6930: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
6940: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tring..**.** The
6950: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
6960: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
6970: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
6980: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
6990: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
69a0: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
69b0: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
69c0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
69d0: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
69e0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
69f0: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
6a00: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
6a10: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
6a20: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e  SQLITE_OK && p->
6a30: 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a  pFrame ){.    /*
6a40: 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72   Halt the sub-pr
6a50: 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f  ogram. Return co
6a60: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72  ntrol to the par
6a70: 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20  ent frame. */.  
6a80: 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
6a90: 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
6aa0: 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  .    p->pFrame =
6ab0: 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
6ac0: 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d  ;.    p->nFrame-
6ad0: 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  -;.    sqlite3Vd
6ae0: 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
6af0: 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
6b00: 20 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56 64    pc = sqlite3Vd
6b10: 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70  beFrameRestore(p
6b20: 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74  Frame);.    last
6b30: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
6b40: 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70  Rowid;.    if( p
6b50: 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p2==OE_Ignor
6b60: 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e  e ){.      /* In
6b70: 73 74 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20  struction pc is 
6b80: 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74  the OP_Program t
6b90: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20  hat invoked the 
6ba0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20  sub-program .   
6bb0: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20     ** currently 
6bc0: 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66  being halted. If
6bd0: 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74   the p2 instruct
6be0: 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48  ion of this OP_H
6bf0: 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73  alt.      ** ins
6c00: 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20  truction is set 
6c10: 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68  to OE_Ignore, th
6c20: 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  en the sub-progr
6c30: 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20  am is throwing. 
6c40: 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52       ** an IGNOR
6c50: 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20  E exception. In 
6c60: 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74  this case jump t
6c70: 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70  o the address sp
6c80: 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a  ecified.      **
6c90: 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68   as the p2 of th
6ca0: 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  e calling OP_Pro
6cb0: 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  gram.  */.      
6cc0: 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e  pc = p->aOp[pc].
6cd0: 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2-1;.    }.    
6ce0: 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
6cf0: 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d    aMem = p->aMem
6d00: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
6d10: 0a 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d  ..  p->rc = pOp-
6d20: 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41  >p1;.  p->errorA
6d30: 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d  ction = (u8)pOp-
6d40: 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  >p2;.  p->pc = p
6d50: 63 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  c;.  if( pOp->p4
6d60: 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  .z ){.    assert
6d70: 28 20 70 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f  ( p->rc!=SQLITE_
6d80: 4f 4b 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  OK );.    sqlite
6d90: 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
6da0: 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
6db0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
6dc0: 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69    testcase( sqli
6dd0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
6de0: 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20 73  xLog!=0 );.    s
6df0: 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e  qlite3_log(pOp->
6e00: 70 31 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64  p1, "abort at %d
6e10: 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70   in [%s]: %s", p
6e20: 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 4f 70 2d  c, p->zSql, pOp-
6e30: 3e 70 34 2e 7a 29 3b 0a 20 20 7d 65 6c 73 65 20  >p4.z);.  }else 
6e40: 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20  if( p->rc ){.   
6e50: 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74   testcase( sqlit
6e60: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
6e70: 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71  Log!=0 );.    sq
6e80: 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70  lite3_log(pOp->p
6e90: 31 2c 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66  1, "constraint f
6ea0: 61 69 6c 65 64 20 61 74 20 25 64 20 69 6e 20 5b  ailed at %d in [
6eb0: 25 73 5d 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71  %s]", pc, p->zSq
6ec0: 6c 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  l);.  }.  rc = s
6ed0: 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
6ee0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
6ef0: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20  =SQLITE_BUSY || 
6f00: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
6f10: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f   rc==SQLITE_ERRO
6f20: 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  R );.  if( rc==S
6f30: 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
6f40: 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
6f50: 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
6f60: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
6f70: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
6f80: 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  | p->rc==SQLITE_
6f90: 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20  CONSTRAINT );.  
6fa0: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
6fb0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e  LITE_OK || db->n
6fc0: 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 29  DeferredCons>0 )
6fd0: 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63  ;.    rc = p->rc
6fe0: 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20   ? SQLITE_ERROR 
6ff0: 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  : SQLITE_DONE;. 
7000: 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72   }.  goto vdbe_r
7010: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
7020: 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20  ode: Integer P1 
7030: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
7040: 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65  he 32-bit intege
7050: 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72  r value P1 is wr
7060: 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73  itten into regis
7070: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7080: 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20  OP_Integer: {   
7090: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
70a0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
70b0: 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70  ut->u.i = pOp->p
70c0: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
70d0: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20  * Opcode: Int64 
70e0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  * P2 * P4 *.**.*
70f0: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
7100: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e  r to a 64-bit in
7110: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20  teger value..** 
7120: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
7130: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7140: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
7150: 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20  t64: {          
7160: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
7170: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7180: 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30   pOp->p4.pI64!=0
7190: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
71a0: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b  = *pOp->p4.pI64;
71b0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
71c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
71d0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
71e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20  /* Opcode: Real 
71f0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  * P2 * P4 *.**.*
7200: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
7210: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c  r to a 64-bit fl
7220: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
7230: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
7240: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
7250: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7260: 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20  e OP_Real: {    
7270: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
7280: 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74  as TK_FLOAT, out
7290: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
72a0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
72b0: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65  MEM_Real;.  asse
72c0: 72 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61  rt( !sqlite3IsNa
72d0: 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  N(*pOp->p4.pReal
72e0: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d  ) );.  pOut->r =
72f0: 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b   *pOp->p4.pReal;
7300: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
7310: 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
7320: 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34  tring8 * P2 * P4
7330: 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e   *.**.** P4 poin
7340: 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d  ts to a nul term
7350: 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
7360: 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  ing. This opcode
7370: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
7380: 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53  .** into an OP_S
7390: 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20  tring before it 
73a0: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
73b0: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a  the first time..
73c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
73d0: 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  g8: {         /*
73e0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49   same as TK_STRI
73f0: 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  NG, out2-prerele
7400: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7410: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7420: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
7430: 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f   OP_String;.  pO
7440: 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53  p->p1 = sqlite3S
7450: 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e  trlen30(pOp->p4.
7460: 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  z);..#ifndef SQL
7470: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
7480: 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53   if( encoding!=S
7490: 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20  QLITE_UTF8 ){.  
74a0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
74b0: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
74c0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c  , pOp->p4.z, -1,
74d0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
74e0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
74f0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
7500: 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74  _TOOBIG ) goto t
7510: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20  oo_big;.    if( 
7520: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
7530: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
7540: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
7550: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
7560: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
7570: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70  pOut->zMalloc==p
7580: 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73  Out->z );.    as
7590: 73 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67  sert( pOut->flag
75a0: 73 20 26 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20  s & MEM_Dyn );. 
75b0: 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63     pOut->zMalloc
75c0: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
75d0: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
75e0: 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  tic;.    pOut->f
75f0: 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e  lags &= ~MEM_Dyn
7600: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
7610: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
7620: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
7630: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
7640: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
7650: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
7660: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
7670: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
7680: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
7690: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
76a0: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
76b0: 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74  p->p1>db->aLimit
76c0: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
76d0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
76e0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
76f0: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
7700: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73   to the next cas
7710: 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a  e, OP_String */.
7720: 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  }.  ./* Opcode: 
7730: 53 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50  String P1 P2 * P
7740: 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  4 *.**.** The st
7750: 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66  ring value P4 of
7760: 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65   length P1 (byte
7770: 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  s) is stored in 
7780: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
7790: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20  case OP_String: 
77a0: 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
77b0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
77c0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
77d0: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75  p4.z!=0 );.  pOu
77e0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
77f0: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
7800: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
7810: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
7820: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
7830: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
7840: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
7850: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
7860: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
7870: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7880: 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20  Null P1 P2 P3 * 
7890: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  *.**.** Write a 
78a0: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
78b0: 65 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67  ers P2.  If P3 g
78c0: 72 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20  reater than P2, 
78d0: 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a  then also write.
78e0: 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67  ** NULL into reg
78f0: 69 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65  ister P3 and eve
7900: 72 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62  ry register in b
7910: 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33  etween P2 and P3
7920: 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c  .  If P3.** is l
7930: 65 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70  ess than P2 (typ
7940: 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72  ically P3 is zer
7950: 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67  o) then only reg
7960: 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73  ister P2 is.** s
7970: 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  et to NULL..**.*
7980: 2a 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75  * If the P1 valu
7990: 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
79a0: 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65  hen also set the
79b0: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61   MEM_Cleared fla
79c0: 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c  g so that.** NUL
79d0: 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f  L values will no
79e0: 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  t compare equal 
79f0: 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e  even if SQLITE_N
7a00: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a  ULLEQ is set on.
7a10: 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45  ** OP_Ne or OP_E
7a20: 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  q..*/.case OP_Nu
7a30: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
7a40: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
7a50: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  se */.  int cnt;
7a60: 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b  .  u16 nullFlag;
7a70: 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33  .  cnt = pOp->p3
7a80: 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65  -pOp->p2;.  asse
7a90: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e  rt( pOp->p3<=p->
7aa0: 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  nMem );.  pOut->
7ab0: 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67  flags = nullFlag
7ac0: 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45   = pOp->p1 ? (ME
7ad0: 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72  M_Null|MEM_Clear
7ae0: 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ed) : MEM_Null;.
7af0: 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29    while( cnt>0 )
7b00: 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  {.    pOut++;.  
7b10: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
7b20: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
7b30: 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28   VdbeMemRelease(
7b40: 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  pOut);.    pOut-
7b50: 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61  >flags = nullFla
7b60: 67 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20  g;.    cnt--;.  
7b70: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
7b80: 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50  * Opcode: Blob P
7b90: 31 20 50 32 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20  1 P2 * P4.**.** 
7ba0: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62  P4 points to a b
7bb0: 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62  lob of data P1 b
7bc0: 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72  ytes long.  Stor
7bd0: 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69  e this.** blob i
7be0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
7bf0: 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20  /.case OP_Blob: 
7c00: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
7c10: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
7c20: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7c30: 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49   pOp->p1 <= SQLI
7c40: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b  TE_MAX_LENGTH );
7c50: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
7c60: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
7c70: 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31  p->p4.z, pOp->p1
7c80: 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d  , 0, 0);.  pOut-
7c90: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
7ca0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
7cb0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
7cc0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7cd0: 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31  ode: Variable P1
7ce0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
7cf0: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61   Transfer the va
7d00: 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61  lues of bound pa
7d10: 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20  rameter P1 into 
7d20: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
7d30: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
7d40: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
7d50: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
7d60: 72 73 20 69 6e 20 50 34 20 61 6e 64 20 50 33 3d  rs in P4 and P3=
7d70: 3d 31 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  =1..** The P4 va
7d80: 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73  lue is used by s
7d90: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
7da0: 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f  meter_name()..*/
7db0: 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c  .case OP_Variabl
7dc0: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
7dd0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
7de0: 73 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61  se */.  Mem *pVa
7df0: 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  r;       /* Valu
7e00: 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72  e being transfer
7e10: 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  red */..  assert
7e20: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
7e30: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20  Op->p1<=p->nVar 
7e40: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
7e50: 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70  ->p4.z==0 || pOp
7e60: 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72  ->p4.z==p->azVar
7e70: 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20  [pOp->p1-1] );. 
7e80: 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72   pVar = &p->aVar
7e90: 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
7ea0: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
7eb0: 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20  MemTooBig(pVar) 
7ec0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
7ed0: 62 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  big;.  }.  sqlit
7ee0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
7ef0: 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c  Copy(pOut, pVar,
7f00: 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20   MEM_Static);.  
7f10: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
7f20: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
7f30: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7f40: 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20  : Move P1 P2 P3 
7f50: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
7f60: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
7f70: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 20  ister P1..P1+P3 
7f80: 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  over into.** reg
7f90: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
7fa0: 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e  .  Registers P1.
7fb0: 2e 50 31 2b 50 33 20 61 72 65 0a 2a 2a 20 6c 65  .P1+P3 are.** le
7fc0: 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c  ft holding a NUL
7fd0: 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72  L.  It is an err
7fe0: 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20  or for register 
7ff0: 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31  ranges.** P1..P1
8000: 2b 50 33 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50  +P3 and P2..P2+P
8010: 33 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f  3 to overlap..*/
8020: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
8030: 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63  .  char *zMalloc
8040: 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76  ;   /* Holding v
8050: 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f  ariable for allo
8060: 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cated memory */.
8070: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
8080: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8090: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
80a0: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
80b0: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
80c0: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
80d0: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
80e0: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
80f0: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
8100: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
8110: 2d 3e 70 33 20 2b 20 31 3b 0a 20 20 70 31 20 3d  ->p3 + 1;.  p1 =
8120: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
8130: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
8140: 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20  rt( n>0 && p1>0 
8150: 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  && p2>0 );.  ass
8160: 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c  ert( p1+n<=p2 ||
8170: 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20   p2+n<=p1 );..  
8180: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d  pIn1 = &aMem[p1]
8190: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
81a0: 5b 70 32 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e  [p2];.  while( n
81b0: 2d 2d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  -- ){.    assert
81c0: 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d  ( pOut<=&aMem[p-
81d0: 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73  >nMem] );.    as
81e0: 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65  sert( pIn1<=&aMe
81f0: 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20  m[p->nMem] );.  
8200: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
8210: 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
8220: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
8230: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
8240: 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d   zMalloc = pOut-
8250: 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f  >zMalloc;.    pO
8260: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  ut->zMalloc = 0;
8270: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8280: 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49  MemMove(pOut, pI
8290: 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  n1);.#ifdef SQLI
82a0: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
82b0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
82c0: 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20  m>=&aMem[p1] && 
82d0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
82e0: 3c 26 61 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70  <&aMem[p1+pOp->p
82f0: 33 5d 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  3] ){.      pOut
8300: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20  ->pScopyFrom += 
8310: 70 31 20 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p1 - pOp->p2;.  
8320: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70    }.#endif.    p
8330: 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a  In1->zMalloc = z
8340: 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49  Malloc;.    REGI
8350: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
8360: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
8370: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
8380: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
8390: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20  /* Opcode: Copy 
83a0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
83b0: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
83c0: 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e  f registers P1..
83d0: 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73  P1+P3 into regis
83e0: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a  ters P2..P2+P3..
83f0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
8400: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64  uction makes a d
8410: 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20  eep copy of the 
8420: 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63  value.  A duplic
8430: 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f  ate.** is made o
8440: 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  f any string or 
8450: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20  blob constant.  
8460: 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70  See also OP_SCop
8470: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  y..*/.case OP_Co
8480: 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  py: {.  int n;..
8490: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
84a0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
84b0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
84c0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
84d0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
84e0: 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65  =pIn1 );.  while
84f0: 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ( 1 ){.    sqlit
8500: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
8510: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
8520: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20   MEM_Ephem);.   
8530: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
8540: 70 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53  pOut);.    REGIS
8550: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
8560: 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75  2+pOp->p3-n, pOu
8570: 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d  t);.    if( (n--
8580: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
8590: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49    pOut++;.    pI
85a0: 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
85b0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
85c0: 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a   SCopy P1 P2 * *
85d0: 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20   *.**.** Make a 
85e0: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
85f0: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
8600: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
8610: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
8620: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61  tion makes a sha
8630: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65  llow copy of the
8640: 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20   value.  If the 
8650: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74  value.** is a st
8660: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68  ring or blob, th
8670: 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f  en the copy is o
8680: 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  nly a pointer to
8690: 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
86a0: 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68   and hence if th
86b0: 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67  e original chang
86c0: 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63  es so will the c
86d0: 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69  opy..** Worse, i
86e0: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69  f the original i
86f0: 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74  s deallocated, t
8700: 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20  he copy becomes 
8710: 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73  invalid..** Thus
8720: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73   the program mus
8730: 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74  t guarantee that
8740: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69   the original wi
8750: 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a  ll not change.**
8760: 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65   during the life
8770: 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79  time of the copy
8780: 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74  .  Use OP_Copy t
8790: 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74  o make a complet
87a0: 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61  e.** copy..*/.ca
87b0: 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20  se OP_SCopy: {  
87c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
87d0: 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
87e0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
87f0: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
8800: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
8810: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
8820: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
8830: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
8840: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
8850: 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53  Ephem);.#ifdef S
8860: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
8870: 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ( pOut->pScopyFr
8880: 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53  om==0 ) pOut->pS
8890: 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b  copyFrom = pIn1;
88a0: 0a 23 65 6e 64 69 66 0a 20 20 52 45 47 49 53 54  .#endif.  REGIST
88b0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
88c0: 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  , pOut);.  break
88d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
88e0: 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20  ResultRow P1 P2 
88f0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
8900: 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72  registers P1 thr
8910: 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e  ough P1+P2-1 con
8920: 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  tain a single ro
8930: 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e  w of.** results.
8940: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   This opcode cau
8950: 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ses the sqlite3_
8960: 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74  step() call to t
8970: 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68  erminate.** with
8980: 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72   an SQLITE_ROW r
8990: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69  eturn code and i
89a0: 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71  t sets up the sq
89b0: 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74  lite3_stmt.** st
89c0: 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69  ructure to provi
89d0: 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65  de access to the
89e0: 20 74 6f 70 20 50 31 20 76 61 6c 75 65 73 20 61   top P1 values a
89f0: 73 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  s the result.** 
8a00: 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  row..*/.case OP_
8a10: 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d  ResultRow: {.  M
8a20: 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20  em *pMem;.  int 
8a30: 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  i;.  assert( p->
8a40: 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d  nResColumn==pOp-
8a50: 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >p2 );.  assert(
8a60: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
8a70: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b  assert( pOp->p1+
8a80: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
8a90: 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  +1 );..  /* If t
8aa0: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61  his statement ha
8ab0: 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64  s violated immed
8ac0: 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
8ad0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f   constraints, do
8ae0: 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e  .  ** not return
8af0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
8b00: 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e  ows modified. An
8b10: 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45  d do not RELEASE
8b20: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20   the statement. 
8b30: 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e   ** transaction.
8b40: 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   It needs to be 
8b50: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f  rolled back.  */
8b60: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
8b70: 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  !=(rc = sqlite3V
8b80: 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29  dbeCheckFk(p, 0)
8b90: 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
8ba0: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
8bb0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
8bc0: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73     assert( p->us
8bd0: 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b  esStmtJournal );
8be0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
8bf0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c  .  /* If the SQL
8c00: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c  ITE_CountRows fl
8c10: 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c  ag is set in sql
8c20: 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  ite3.flags mask,
8c30: 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20   then .  ** DML 
8c40: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b  statements invok
8c50: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
8c60: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
8c70: 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a  er of rows .  **
8c80: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65   modified to the
8c90: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
8ca0: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74  he only way that
8cb0: 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20   a VM that.  ** 
8cc0: 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e  opens a statemen
8cd0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
8ce0: 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  y invoke this op
8cf0: 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  code..  **.  ** 
8d00: 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20  In case this is 
8d10: 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74  such a statement
8d20: 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74  , close any stat
8d30: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
8d40: 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79  n.  ** opened by
8d50: 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20   this VM before 
8d60: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f  returning contro
8d70: 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  l to the user. T
8d80: 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65  his is to.  ** e
8d90: 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65  nsure that state
8da0: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
8db0: 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73  s are always nes
8dc0: 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70  ted, not overlap
8dd0: 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68  ping..  ** If th
8de0: 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74  e open statement
8df0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
8e00: 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c  not closed here,
8e10: 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20   then the user. 
8e20: 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f   ** may step ano
8e30: 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65  ther VM that ope
8e40: 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65  ns its own state
8e50: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
8e60: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20  . This.  ** may 
8e70: 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70  lead to overlapp
8e80: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ing statement tr
8e90: 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a  ansactions..  **
8ea0: 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  .  ** The statem
8eb0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
8ec0: 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c  is never a top-l
8ed0: 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e  evel transaction
8ee0: 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68  .  Hence.  ** th
8ef0: 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62  e RELEASE call b
8f00: 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66  elow can never f
8f10: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ail..  */.  asse
8f20: 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  rt( p->iStatemen
8f30: 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67  t==0 || db->flag
8f40: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
8f50: 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ws );.  rc = sql
8f60: 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61  ite3VdbeCloseSta
8f70: 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f  tement(p, SAVEPO
8f80: 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20  INT_RELEASE);.  
8f90: 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
8fa0: 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20  LITE_OK) ){.    
8fb0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
8fc0: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
8fd0: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
8fe0: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
8ff0: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
9000: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
9010: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
9020: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
9030: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
9040: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
9050: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
9060: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
9070: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
9080: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
9090: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
90a0: 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a   a side effect..
90b0: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
90c0: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61  >pResultSet = &a
90d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
90e0: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e  for(i=0; i<pOp->
90f0: 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  p2; i++){.    as
9100: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
9110: 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20  (&pMem[i]) );.  
9120: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
9130: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
9140: 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d  assert( (pMem[i]
9150: 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68  .flags & MEM_Eph
9160: 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  em)==0.         
9170: 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66     || (pMem[i].f
9180: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
9190: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
91a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
91b0: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
91c0: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73  &pMem[i]);.    s
91d0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
91e0: 72 65 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29  reType(&pMem[i])
91f0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
9200: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20  RACE(pOp->p1+i, 
9210: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20  &pMem[i]);.  }. 
9220: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
9230: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
9240: 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72  mem;..  /* Retur
9250: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a  n SQLITE_ROW.  *
9260: 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b  /.  p->pc = pc +
9270: 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
9280: 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64  E_ROW;.  goto vd
9290: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
92a0: 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20   Opcode: Concat 
92b0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
92c0: 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20  ** Add the text 
92d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f  in register P1 o
92e0: 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74  nto the end of t
92f0: 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65  he text in.** re
9300: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74  gister P2 and st
9310: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
9320: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
9330: 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20  * If either the 
9340: 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72  P1 or P2 text ar
9350: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  e NULL then stor
9360: 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a  e NULL in P3..**
9370: 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c  .**   P3 = P2 ||
9380: 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20   P1.**.** It is 
9390: 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61  illegal for P1 a
93a0: 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20  nd P3 to be the 
93b0: 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53  same register. S
93c0: 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20  ometimes,.** if 
93d0: 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72  P3 is the same r
93e0: 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74  egister as P2, t
93f0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
9400: 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20  n is able.** to 
9410: 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29  avoid a memcpy()
9420: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
9430: 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cat: {          
9440: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43   /* same as TK_C
9450: 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  ONCAT, in1, in2,
9460: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e   out3 */.  i64 n
9470: 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  Byte;..  pIn1 = 
9480: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
9490: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
94a0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20  Op->p2];.  pOut 
94b0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
94c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
94d0: 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20  !=pOut );.  if( 
94e0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
94f0: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
9500: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
9510: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
9520: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
9530: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20  reak;.  }.  if( 
9540: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
9550: 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70   || ExpandBlob(p
9560: 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  In2) ) goto no_m
9570: 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  em;.  Stringify(
9580: 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
9590: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
95a0: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
95b0: 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20  nByte = pIn1->n 
95c0: 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28  + pIn2->n;.  if(
95d0: 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
95e0: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
95f0: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
9600: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
9610: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
9620: 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b  (pOut, MEM_Str);
9630: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
9640: 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
9650: 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f  (int)nByte+2, pO
9660: 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20  ut==pIn2) ){.   
9670: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
9680: 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49  }.  if( pOut!=pI
9690: 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  n2 ){.    memcpy
96a0: 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e  (pOut->z, pIn2->
96b0: 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d  z, pIn2->n);.  }
96c0: 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d  .  memcpy(&pOut-
96d0: 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e  >z[pIn2->n], pIn
96e0: 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a  1->z, pIn1->n);.
96f0: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d    pOut->z[nByte]
9700: 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b   = 0;.  pOut->z[
9710: 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20  nByte+1] = 0;.  
9720: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
9730: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
9740: 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
9750: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
9760: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
9770: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
9780: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
9790: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64  ../* Opcode: Add
97a0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
97b0: 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75  .** Add the valu
97c0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
97d0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
97e0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
97f0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9800: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
9810: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
9820: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
9830: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
9840: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
9850: 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50  e: Multiply P1 P
9860: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a  2 P3 * *.**.**.*
9870: 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76  * Multiply the v
9880: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9890: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
98a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
98b0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
98c0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
98d0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
98e0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
98f0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
9900: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
9910: 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50  code: Subtract P
9920: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
9930: 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76  * Subtract the v
9940: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9950: 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c   P1 from the val
9960: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9970: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
9980: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
9990: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
99a0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
99b0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
99c0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
99d0: 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50  Opcode: Divide P
99e0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
99f0: 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c  * Divide the val
9a00: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9a10: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
9a20: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9a30: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9a40: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9a50: 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e  r P3 (P3=P2/P1).
9a60: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
9a70: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
9a80: 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74   is zero, then t
9a90: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9aa0: 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  L. If either inp
9ab0: 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  ut is .** NULL, 
9ac0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9ad0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
9ae0: 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50  : Remainder P1 P
9af0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
9b00: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
9b10: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
9b20: 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74  er division of t
9b30: 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72  he value in.** r
9b40: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
9b50: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9b60: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
9b70: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50   the result in P
9b80: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
9b90: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9ba0: 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P2 is zero the r
9bb0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
9bc0: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
9bd0: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
9be0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9bf0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c10: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9c20: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
9c30: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
9c40: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
9c50: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9c60: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
9c70: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
9c80: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
9c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9ca0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
9cb0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9cc0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
9cd0: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
9ce0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9cf0: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
9d00: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
9d10: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
9d20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9d30: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
9d40: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
9d50: 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20  int flags;      
9d60: 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f  /* Combined MEM_
9d70: 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74  * flags from bot
9d80: 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36  h inputs */.  i6
9d90: 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iA;         /*
9da0: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
9db0: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
9dc0: 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20  /.  i64 iB;     
9dd0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
9de0: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
9df0: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
9e00: 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rA;      /* Re
9e10: 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  al value of left
9e20: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
9e30: 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a  uble rB;      /*
9e40: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72   Real value of r
9e50: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
9e60: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
9e70: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c  pOp->p1];.  appl
9e80: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
9e90: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
9ea0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
9eb0: 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  .  applyNumericA
9ec0: 66 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20  ffinity(pIn2);. 
9ed0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
9ee0: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20  p->p3];.  flags 
9ef0: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20  = pIn1->flags | 
9f00: 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn2->flags;.  i
9f10: 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f  f( (flags & MEM_
9f20: 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20  Null)!=0 ) goto 
9f30: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
9f40: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28  t_is_null;.  if(
9f50: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
9f60: 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
9f70: 4d 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20  M_Int)==MEM_Int 
9f80: 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31  ){.    iA = pIn1
9f90: 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20  ->u.i;.    iB = 
9fa0: 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73  pIn2->u.i;.    s
9fb0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
9fc0: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
9fd0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69   OP_Add:       i
9fe0: 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  f( sqlite3AddInt
9ff0: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
a000: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
a010: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
a020: 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20  _Subtract:  if( 
a030: 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
a040: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
a050: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
a060: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
a070: 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c  ltiply:  if( sql
a080: 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42  ite3MulInt64(&iB
a090: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
a0a0: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
a0b0: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
a0c0: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
a0d0: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
a0e0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
a0f0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
a100: 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69   if( iA==-1 && i
a110: 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  B==SMALLEST_INT6
a120: 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  4 ) goto fp_math
a130: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20  ;.        iB /= 
a140: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
a150: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
a160: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
a170: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
a180: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
a190: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
a1a0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
a1b0: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
a1c0: 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20       iB %= iA;. 
a1d0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a1e0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
a1f0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a  pOut->u.i = iB;.
a200: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
a210: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
a220: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 66 70 5f 6d  );.  }else{.fp_m
a230: 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71  ath:.    rA = sq
a240: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
a250: 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42  ue(pIn1);.    rB
a260: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
a270: 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  alValue(pIn2);. 
a280: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
a290: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  opcode ){.      
a2a0: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
a2b0: 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20       rB += rA;  
a2c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a2d0: 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61    case OP_Subtra
a2e0: 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b  ct:    rB -= rA;
a2f0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a300: 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74      case OP_Mult
a310: 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72  iply:    rB *= r
a320: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
a330: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69        case OP_Di
a340: 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20  vide: {.        
a350: 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20  /* (double)0 In 
a360: 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f  case of SQLITE_O
a370: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
a380: 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20  NT... */.       
a390: 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65   if( rA==(double
a3a0: 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  )0 ) goto arithm
a3b0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a3c0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20  ull;.        rB 
a3d0: 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62  /= rA;.        b
a3e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
a3f0: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
a400: 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34         iA = (i64
a410: 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20  )rA;.        iB 
a420: 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20  = (i64)rB;.     
a430: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
a440: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
a450: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
a460: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
a470: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
a480: 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65      rB = (double
a490: 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20  )(iB % iA);.    
a4a0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a4b0: 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20   }.    }.#ifdef 
a4c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
a4d0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70  TING_POINT.    p
a4e0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20  Out->u.i = rB;. 
a4f0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
a500: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
a510: 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20  ;.#else.    if( 
a520: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29  sqlite3IsNaN(rB)
a530: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
a540: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
a550: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a  _is_null;.    }.
a560: 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72 42      pOut->r = rB
a570: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
a580: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52  Flag(pOut, MEM_R
a590: 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66  eal);.    if( (f
a5a0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
a5b0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
a5c0: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
a5d0: 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20  ffinity(pOut);. 
a5e0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
a5f0: 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d    break;..arithm
a600: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a610: 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64  ull:.  sqlite3Vd
a620: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
a630: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
a640: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53  /* Opcode: CollS
a650: 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a  eq P1 * * P4.**.
a660: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
a670: 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20  er to a CollSeq 
a680: 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e  struct. If the n
a690: 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73  ext call to a us
a6a0: 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f  er function.** o
a6b0: 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c  r aggregate call
a6c0: 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  s sqlite3GetFunc
a6d0: 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20  CollSeq(), this 
a6e0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
a6f0: 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65  ce will.** be re
a700: 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20  turned. This is 
a710: 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c  used by the buil
a720: 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28  t-in min(), max(
a730: 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a  ) and nullif().*
a740: 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  * functions..**.
a750: 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20  ** If P1 is not 
a760: 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73  zero, then it is
a770: 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
a780: 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69   a subsequent mi
a790: 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20  n() or.** max() 
a7a0: 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73  aggregate will s
a7b0: 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63  et to 1 if the c
a7c0: 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f  urrent row is no
a7d0: 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72  t the minimum or
a7e0: 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68  .** maximum.  Th
a7f0: 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73  e P1 register is
a800: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
a810: 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  0 by this instru
a820: 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
a830: 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20   interface used 
a840: 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  by the implement
a850: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f  ation of the afo
a860: 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63  rementioned func
a870: 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72  tions.** to retr
a880: 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69  ieve the collati
a890: 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20  on sequence set 
a8a0: 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
a8b0: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a  s not available.
a8c0: 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c  ** publicly, onl
a8d0: 79 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  y to user functi
a8e0: 6f 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66  ons defined in f
a8f0: 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f  unc.c..*/.case O
a900: 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61  P_CollSeq: {.  a
a910: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
a920: 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29  pe==P4_COLLSEQ )
a930: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  ;.  if( pOp->p1 
a940: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
a950: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
a960: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29  Mem[pOp->p1], 0)
a970: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
a980: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e  ../* Opcode: Fun
a990: 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
a9a0: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b  4 P5.**.** Invok
a9b0: 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  e a user functio
a9c0: 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74  n (P4 is a point
a9d0: 65 72 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e  er to a Function
a9e0: 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 0a   structure that.
a9f0: 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  ** defines the f
aa00: 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35  unction) with P5
aa10: 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e   arguments taken
aa20: 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
aa30: 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73  2 and.** success
aa40: 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ors.  The result
aa50: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
aa60: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
aa70: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65  gister P3..** Re
aa80: 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e  gister P3 must n
aa90: 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ot be one of the
aaa0: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73   function inputs
aab0: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
aac0: 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69  32-bit bitmask i
aad0: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
aae0: 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72  r or not each ar
aaf0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a  gument to the .*
ab00: 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64  * function was d
ab10: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
ab20: 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70  constant at comp
ab30: 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65  ile time. If the
ab40: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
ab50: 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20  nt was constant 
ab60: 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31  then bit 0 of P1
ab70: 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73   is set. This is
ab80: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
ab90: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65  ne.** whether me
aba0: 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74  ta data associat
abb0: 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66  ed with a user f
abc0: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
abd0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71   using the.** sq
abe0: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
abf0: 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73  a() API may be s
ac00: 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75  afely retained u
ac10: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a  ntil the next.**
ac20: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
ac30: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
ac40: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41 67 67 53  * See also: AggS
ac50: 74 65 70 20 61 6e 64 20 41 67 67 46 69 6e 61 6c  tep and AggFinal
ac60: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63  .*/.case OP_Func
ac70: 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  tion: {.  int i;
ac80: 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20  .  Mem *pArg;.  
ac90: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
aca0: 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ctx;.  sqlite3_v
acb0: 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20  alue **apVal;.  
acc0: 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f  int n;..  n = pO
acd0: 70 2d 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d  p->p5;.  apVal =
ace0: 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73   p->apArg;.  ass
acf0: 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d  ert( apVal || n=
ad00: 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
ad10: 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
ad20: 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
ad30: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
ad40: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
ad50: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
ad60: 70 4f 75 74 29 3b 0a 0a 20 20 61 73 73 65 72 74  pOut);..  assert
ad70: 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e  ( n==0 || (pOp->
ad80: 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
ad90: 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b  n<=p->nMem+1) );
ada0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
adb0: 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
adc0: 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
add0: 20 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 61 4d   );.  pArg = &aM
ade0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66  em[pOp->p2];.  f
adf0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
ae00: 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61  , pArg++){.    a
ae10: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
ae20: 64 28 70 41 72 67 29 20 29 3b 0a 20 20 20 20 61  d(pArg) );.    a
ae30: 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a  pVal[i] = pArg;.
ae40: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
ae50: 7a 65 28 70 41 72 67 29 3b 0a 20 20 20 20 73 71  ze(pArg);.    sq
ae60: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
ae70: 65 54 79 70 65 28 70 41 72 67 29 3b 0a 20 20 20  eType(pArg);.   
ae80: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
ae90: 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67 29  pOp->p2+i, pArg)
aea0: 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
aeb0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
aec0: 5f 46 55 4e 43 44 45 46 20 7c 7c 20 70 4f 70 2d  _FUNCDEF || pOp-
aed0: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 44 42 45  >p4type==P4_VDBE
aee0: 46 55 4e 43 20 29 3b 0a 20 20 69 66 28 20 70 4f  FUNC );.  if( pO
aef0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55  p->p4type==P4_FU
af00: 4e 43 44 45 46 20 29 7b 0a 20 20 20 20 63 74 78  NCDEF ){.    ctx
af10: 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  .pFunc = pOp->p4
af20: 2e 70 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e  .pFunc;.    ctx.
af30: 70 56 64 62 65 46 75 6e 63 20 3d 20 30 3b 0a 20  pVdbeFunc = 0;. 
af40: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 74 78 2e   }else{.    ctx.
af50: 70 56 64 62 65 46 75 6e 63 20 3d 20 28 56 64 62  pVdbeFunc = (Vdb
af60: 65 46 75 6e 63 2a 29 70 4f 70 2d 3e 70 34 2e 70  eFunc*)pOp->p4.p
af70: 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 63 74  VdbeFunc;.    ct
af80: 78 2e 70 46 75 6e 63 20 3d 20 63 74 78 2e 70 56  x.pFunc = ctx.pV
af90: 64 62 65 46 75 6e 63 2d 3e 70 46 75 6e 63 3b 0a  dbeFunc->pFunc;.
afa0: 20 20 7d 0a 0a 20 20 63 74 78 2e 73 2e 66 6c 61    }..  ctx.s.fla
afb0: 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
afc0: 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a   ctx.s.db = db;.
afd0: 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30    ctx.s.xDel = 0
afe0: 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f  ;.  ctx.s.zMallo
aff0: 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65  c = 0;..  /* The
b000: 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
b010: 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
b020: 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
b030: 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
b040: 70 6f 69 6e 74 65 72 20 74 6f 20 63 74 78 2e 73  pointer to ctx.s
b050: 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20   so in case the 
b060: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61  user-function ca
b070: 6e 20 75 73 65 0a 20 20 2a 2a 20 74 68 65 20 61  n use.  ** the a
b080: 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
b090: 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20   buffer instead 
b0a0: 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20  of allocating a 
b0b0: 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20  new one..  */.  
b0c0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
b0d0: 76 65 28 26 63 74 78 2e 73 2c 20 70 4f 75 74 29  ve(&ctx.s, pOut)
b0e0: 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
b0f0: 61 67 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e  ag(&ctx.s, MEM_N
b100: 75 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e 69 73 45  ull);..  ctx.isE
b110: 72 72 6f 72 20 3d 20 30 3b 0a 20 20 69 66 28 20  rror = 0;.  if( 
b120: 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73  ctx.pFunc->flags
b130: 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e   & SQLITE_FUNC_N
b140: 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61  EEDCOLL ){.    a
b150: 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29  ssert( pOp>aOp )
b160: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
b170: 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
b180: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
b190: 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
b1a0: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
b1b0: 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
b1c0: 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
b1d0: 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62  .pColl;.  }.  db
b1e0: 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
b1f0: 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78  stRowid;.  (*ctx
b200: 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26  .pFunc->xFunc)(&
b210: 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20  ctx, n, apVal); 
b220: 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d  /* IMP: R-24505-
b230: 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52  23230 */.  lastR
b240: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
b250: 6f 77 69 64 3b 0a 0a 20 20 2f 2a 20 49 66 20 61  owid;..  /* If a
b260: 6e 79 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ny auxiliary dat
b270: 61 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65  a functions have
b280: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 62 79 20   been called by 
b290: 74 68 69 73 20 75 73 65 72 20 66 75 6e 63 74 69  this user functi
b2a0: 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d 65 64 69 61  on,.  ** immedia
b2b0: 74 65 6c 79 20 63 61 6c 6c 20 74 68 65 20 64 65  tely call the de
b2c0: 73 74 72 75 63 74 6f 72 20 66 6f 72 20 61 6e 79  structor for any
b2d0: 20 6e 6f 6e 2d 73 74 61 74 69 63 20 76 61 6c 75   non-static valu
b2e0: 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63  es..  */.  if( c
b2f0: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 29 7b 0a  tx.pVdbeFunc ){.
b300: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
b310: 65 6c 65 74 65 41 75 78 44 61 74 61 28 63 74 78  eleteAuxData(ctx
b320: 2e 70 56 64 62 65 46 75 6e 63 2c 20 70 4f 70 2d  .pVdbeFunc, pOp-
b330: 3e 70 31 29 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  >p1);.    pOp->p
b340: 34 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 63 74  4.pVdbeFunc = ct
b350: 78 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20  x.pVdbeFunc;.   
b360: 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
b370: 34 5f 56 44 42 45 46 55 4e 43 3b 0a 20 20 7d 0a  4_VDBEFUNC;.  }.
b380: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
b390: 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 2f  cFailed ){.    /
b3a0: 2a 20 45 76 65 6e 20 74 68 6f 75 67 68 20 61 20  * Even though a 
b3b0: 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20 66 61 69  malloc() has fai
b3c0: 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65  led, the impleme
b3d0: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20  ntation of the. 
b3e0: 20 20 20 2a 2a 20 75 73 65 72 20 66 75 6e 63 74     ** user funct
b3f0: 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 61 6c  ion may have cal
b400: 6c 65 64 20 61 6e 20 73 71 6c 69 74 65 33 5f 72  led an sqlite3_r
b410: 65 73 75 6c 74 5f 58 58 58 28 29 20 66 75 6e 63  esult_XXX() func
b420: 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f 20 72  tion.    ** to r
b430: 65 74 75 72 6e 20 61 20 76 61 6c 75 65 2e 20 54  eturn a value. T
b440: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
b450: 6c 20 72 65 6c 65 61 73 65 73 20 61 6e 79 20 72  l releases any r
b460: 65 73 6f 75 72 63 65 73 0a 20 20 20 20 2a 2a 20  esources.    ** 
b470: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
b480: 73 75 63 68 20 61 20 76 61 6c 75 65 2e 0a 20 20  such a value..  
b490: 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
b4a0: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
b4b0: 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f  ctx.s);.    goto
b4c0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
b4d0: 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63 74 69  /* If the functi
b4e0: 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65  on returned an e
b4f0: 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65  rror, throw an e
b500: 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66  xception */.  if
b510: 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b  ( ctx.isError ){
b520: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
b530: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
b540: 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
b550: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
b560: 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63  &ctx.s));.    rc
b570: 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a   = ctx.isError;.
b580: 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74    }..  /* Copy t
b590: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
b5a0: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72   function into r
b5b0: 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20  egister P3 */.  
b5c0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
b5d0: 65 45 6e 63 6f 64 69 6e 67 28 26 63 74 78 2e 73  eEncoding(&ctx.s
b5e0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73  , encoding);.  s
b5f0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
b600: 65 28 70 4f 75 74 2c 20 26 63 74 78 2e 73 29 3b  e(pOut, &ctx.s);
b610: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
b620: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74  beMemTooBig(pOut
b630: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
b640: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 23 69 66 20  o_big;.  }..#if 
b650: 30 0a 20 20 2f 2a 20 54 68 65 20 61 70 70 2d 64  0.  /* The app-d
b660: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20  efined function 
b670: 68 61 73 20 64 6f 6e 65 20 73 6f 6d 65 74 68 69  has done somethi
b680: 6e 67 20 74 68 61 74 20 61 73 20 63 61 75 73 65  ng that as cause
b690: 64 20 74 68 69 73 0a 20 20 2a 2a 20 73 74 61 74  d this.  ** stat
b6a0: 65 6d 65 6e 74 20 74 6f 20 65 78 70 69 72 65 2e  ement to expire.
b6b0: 20 20 28 50 65 72 68 61 70 73 20 74 68 65 20 66    (Perhaps the f
b6c0: 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 65 64 20 73  unction called s
b6d0: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 20 20  qlite3_exec().  
b6e0: 2a 2a 20 77 69 74 68 20 61 20 43 52 45 41 54 45  ** with a CREATE
b6f0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
b700: 2e 29 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 2d  .).  */.  if( p-
b710: 3e 65 78 70 69 72 65 64 20 29 20 72 63 20 3d 20  >expired ) rc = 
b720: 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 23 65  SQLITE_ABORT;.#e
b730: 6e 64 69 66 0a 0a 20 20 52 45 47 49 53 54 45 52  ndif..  REGISTER
b740: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
b750: 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
b760: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
b770: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
b780: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e  /* Opcode: BitAn
b790: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
b7a0: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
b7b0: 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68  t-wise AND of th
b7c0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
b7d0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
b7e0: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
b7f0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b800: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b810: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b820: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b830: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b840: 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32  ode: BitOr P1 P2
b850: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61   P3 * *.**.** Ta
b860: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
b870: 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
b880: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b890: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
b8a0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b8b0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b8c0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b8d0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b8e0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b8f0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
b900: 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20  ftLeft P1 P2 P3 
b910: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  * *.**.** Shift 
b920: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
b930: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b940: 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20   to the left by 
b950: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
b960: 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20   bits specified 
b970: 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  by the integer i
b980: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
b990: 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75  * Store the resu
b9a0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b9b0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b9c0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b9d0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b9e0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b9f0: 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50   ShiftRight P1 P
ba00: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
ba10: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
ba20: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ba30: 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67  er P2 to the rig
ba40: 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ht by the.** num
ba50: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
ba60: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
ba70: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
ba80: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
ba90: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
baa0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
bab0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
bac0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
bad0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
bae0: 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20   OP_BitAnd:     
baf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
bb00: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44  ame as TK_BITAND
bb10: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
bb20: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f   */.case OP_BitO
bb30: 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r:              
bb40: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
bb50: 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e  K_BITOR, in1, in
bb60: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
bb70: 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20  OP_ShiftLeft:   
bb80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
bb90: 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c  me as TK_LSHIFT,
bba0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
bbb0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
bbc0: 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20  Right: {        
bbd0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
bbe0: 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _RSHIFT, in1, in
bbf0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  2, out3 */.  i64
bc00: 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20   iA;.  u64 uA;. 
bc10: 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70   i64 iB;.  u8 op
bc20: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
bc30: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
bc40: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
bc50: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
bc60: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
bc70: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
bc80: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
bc90: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
bca0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
bcb0: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
bcc0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
bcd0: 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iA = sqlite3Vdbe
bce0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
bcf0: 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64    iB = sqlite3Vd
bd00: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
bd10: 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  op = pOp->op
bd20: 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d  code;.  if( op==
bd30: 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20  OP_BitAnd ){.   
bd40: 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA &= iB;.  }el
bd50: 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  se if( op==OP_Bi
bd60: 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d  tOr ){.    iA |=
bd70: 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   iB;.  }else if(
bd80: 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73   iB!=0 ){.    as
bd90: 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69  sert( op==OP_Shi
bda0: 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f  ftRight || op==O
bdb0: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a  P_ShiftLeft );..
bdc0: 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69      /* If shifti
bdd0: 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65  ng by a negative
bde0: 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69   amount, shift i
bdf0: 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65  n the other dire
be00: 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28  ction */.    if(
be10: 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61   iB<0 ){.      a
be20: 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52  ssert( OP_ShiftR
be30: 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  ight==OP_ShiftLe
be40: 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70  ft+1 );.      op
be50: 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66   = 2*OP_ShiftLef
be60: 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20  t + 1 - op;.    
be70: 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20    iB = iB>(-64) 
be80: 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20  ? -iB : 64;.    
be90: 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36  }..    if( iB>=6
bea0: 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20  4 ){.      iA = 
beb0: 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50  (iA>=0 || op==OP
bec0: 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20  _ShiftLeft) ? 0 
bed0: 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  : -1;.    }else{
bee0: 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75  .      memcpy(&u
bef0: 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75  A, &iA, sizeof(u
bf00: 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f  A));.      if( o
bf10: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20  p==OP_ShiftLeft 
bf20: 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c  ){.        uA <<
bf30: 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73  = iB;.      }els
bf40: 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e  e{.        uA >>
bf50: 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a  = iB;.        /*
bf60: 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20   Sign-extend on 
bf70: 61 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66  a right shift of
bf80: 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62   a negative numb
bf90: 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  er */.        if
bfa0: 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28  ( iA<0 ) uA |= (
bfb0: 28 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66  (((u64)0xfffffff
bfc0: 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66  f)<<32)|0xffffff
bfd0: 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a  ff) << (64-iB);.
bfe0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65        }.      me
bff0: 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73  mcpy(&iA, &uA, s
c000: 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20  izeof(iA));.    
c010: 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  }.  }.  pOut->u.
c020: 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74  i = iA;.  MemSet
c030: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
c040: 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
c050: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c060: 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20  AddImm  P1 P2 * 
c070: 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74  * *.** .** Add t
c080: 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74  he constant P2 t
c090: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
c0a0: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54  egister P1..** T
c0b0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77  he result is alw
c0c0: 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ays an integer..
c0d0: 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61  **.** To force a
c0e0: 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f 20 62  ny register to b
c0f0: 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75  e an integer, ju
c100: 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73  st add 0..*/.cas
c110: 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20  e OP_AddImm: {  
c120: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
c130: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
c140: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
c150: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
c160: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  p, pIn1);.  sqli
c170: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
c180: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
c190: 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e  n1->u.i += pOp->
c1a0: 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
c1b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42  /* Opcode: MustB
c1c0: 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  eInt P1 P2 * * *
c1d0: 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68  .** .** Force th
c1e0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c1f0: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20  ter P1 to be an 
c200: 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65  integer.  If the
c210: 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
c220: 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
c230: 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20  r and cannot be 
c240: 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
c250: 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74  n integer.** wit
c260: 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20  hout data loss, 
c270: 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
c280: 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20  ately to P2, or 
c290: 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73  if P2==0.** rais
c2a0: 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d  e an SQLITE_MISM
c2b0: 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a  ATCH exception..
c2c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42  */.case OP_MustB
c2d0: 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  eInt: {         
c2e0: 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
c2f0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
c300: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70  m[pOp->p1];.  ap
c310: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
c320: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  , SQLITE_AFF_NUM
c330: 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ERIC, encoding);
c340: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
c350: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
c360: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70  0 ){.    if( pOp
c370: 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ->p2==0 ){.     
c380: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
c390: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 67 6f 74  MATCH;.      got
c3a0: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
c3b0: 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  rror;.    }else{
c3c0: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
c3d0: 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20  >p2 - 1;.    }. 
c3e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4d 65 6d 53   }else{.    MemS
c3f0: 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c  etTypeFlag(pIn1,
c400: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20   MEM_Int);.  }. 
c410: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
c420: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
c430: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a  LOATING_POINT./*
c440: 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66   Opcode: RealAff
c450: 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a  inity P1 * * * *
c460: 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74  .**.** If regist
c470: 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69  er P1 holds an i
c480: 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69  nteger convert i
c490: 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75  t to a real valu
c4a0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
c4b0: 63 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65  code is used whe
c4c0: 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66  n extracting inf
c4d0: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20  ormation from a 
c4e0: 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68  column that.** h
c4f0: 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79  as REAL affinity
c500: 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76  .  Such column v
c510: 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20  alues may still 
c520: 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20  be stored as.** 
c530: 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70  integers, for sp
c540: 61 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20  ace efficiency, 
c550: 62 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63  but after extrac
c560: 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65  tion we want the
c570: 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c  m.** to have onl
c580: 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  y a real value..
c590: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41  */.case OP_RealA
c5a0: 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20  ffinity: {      
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
c5c0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
c5d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
c5e0: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
c5f0: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
c600: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
c610: 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20  Realify(pIn1);. 
c620: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
c630: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
c640: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f  LITE_OMIT_CAST./
c650: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65 78 74  * Opcode: ToText
c660: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
c670: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
c680: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
c690: 20 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a 2a 20   to be text..** 
c6a0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
c6b0: 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74  numeric, convert
c6c0: 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20   it to a string 
c6d0: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
c6e0: 69 76 61 6c 65 6e 74 20 6f 66 20 70 72 69 6e 74  ivalent of print
c6f0: 66 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c 75 65  f().  Blob value
c700: 73 20 61 72 65 20 75 6e 63 68 61 6e 67 65 64 20  s are unchanged 
c710: 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74 65 72  and.** are after
c720: 77 61 72 64 73 20 73 69 6d 70 6c 79 20 69 6e 74  wards simply int
c730: 65 72 70 72 65 74 65 64 20 61 73 20 74 65 78 74  erpreted as text
c740: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
c750: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
c760: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
c770: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
c780: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
c790: 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20 20 20  P_ToText: {     
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c7b0: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 54 45  same as TK_TO_TE
c7c0: 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  XT, in1 */.  pIn
c7d0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
c7e0: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
c7f0: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
c800: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
c810: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20  gs & MEM_Null ) 
c820: 62 72 65 61 6b 3b 0a 20 20 61 73 73 65 72 74 28  break;.  assert(
c830: 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42   MEM_Str==(MEM_B
c840: 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49 6e  lob>>3) );.  pIn
c850: 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49 6e  1->flags |= (pIn
c860: 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f  1->flags&MEM_Blo
c870: 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66  b)>>3;.  applyAf
c880: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
c890: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e  ITE_AFF_TEXT, en
c8a0: 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d 20  coding);.  rc = 
c8b0: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
c8c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
c8d0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
c8e0: 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  r || db->mallocF
c8f0: 61 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31 2d  ailed );.  pIn1-
c900: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
c910: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
c920: 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29 3b  _Blob|MEM_Zero);
c930: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
c940: 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
c950: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c960: 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31 20 2a  ode: ToBlob P1 *
c970: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c980: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c990: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c9a0: 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20  e a BLOB..** If 
c9b0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d  the value is num
c9c0: 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74  eric, convert it
c9d0: 20 74 6f 20 61 20 73 74 72 69 6e 67 20 66 69 72   to a string fir
c9e0: 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73 20 61  st..** Strings a
c9f0: 72 65 20 73 69 6d 70 6c 79 20 72 65 69 6e 74 65  re simply reinte
ca00: 72 70 72 65 74 65 64 20 61 73 20 62 6c 6f 62 73  rpreted as blobs
ca10: 20 77 69 74 68 20 6e 6f 20 63 68 61 6e 67 65 0a   with no change.
ca20: 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c  ** to the underl
ca30: 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a  ying data..**.**
ca40: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
ca50: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
ca60: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
ca70: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
ca80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42 6c 6f  */.case OP_ToBlo
ca90: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
caa0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cab0: 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31   TK_TO_BLOB, in1
cac0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
cad0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
cae0: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
caf0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61   MEM_Null ) brea
cb00: 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  k;.  if( (pIn1->
cb10: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
cb20: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
cb30: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
cb40: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
cb50: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
cb60: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
cb70: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c  ags & MEM_Str ||
cb80: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
cb90: 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  d );.    MemSetT
cba0: 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45  ypeFlag(pIn1, ME
cbb0: 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73 65  M_Blob);.  }else
cbc0: 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67  {.    pIn1->flag
cbd0: 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79 70 65 4d  s &= ~(MEM_TypeM
cbe0: 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b 0a  ask&~MEM_Blob);.
cbf0: 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58    }.  UPDATE_MAX
cc00: 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
cc10: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
cc20: 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d 65 72 69  Opcode: ToNumeri
cc30: 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  c P1 * * * *.**.
cc40: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
cc50: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
cc60: 31 20 74 6f 20 62 65 20 6e 75 6d 65 72 69 63 20  1 to be numeric 
cc70: 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20 69 6e  (either an.** in
cc80: 74 65 67 65 72 20 6f 72 20 61 20 66 6c 6f 61 74  teger or a float
cc90: 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing-point number
cca0: 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  .).** If the val
ccb0: 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c  ue is text or bl
ccc0: 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65  ob, try to conve
ccd0: 72 74 20 69 74 20 74 6f 20 61 6e 20 75 73 69 6e  rt it to an usin
cce0: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
ccf0: 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 6f 72  ent of atoi() or
cd00: 20 61 74 6f 66 28 29 20 61 6e 64 20 73 74 6f 72   atof() and stor
cd10: 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63  e 0 if no such c
cd20: 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a 20 69 73  onversion .** is
cd30: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a   possible..**.**
cd40: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
cd50: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
cd60: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
cd70: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
cd80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 4e 75 6d  */.case OP_ToNum
cd90: 65 72 69 63 3a 20 7b 20 20 20 20 20 20 20 20 20  eric: {         
cda0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cdb0: 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52 49   as TK_TO_NUMERI
cdc0: 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  C, in1 */.  pIn1
cdd0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
cde0: 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
cdf0: 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70 49 6e 31  MemNumerify(pIn1
ce00: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
ce10: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
ce20: 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20  MIT_CAST */../* 
ce30: 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74 20 50 31  Opcode: ToInt P1
ce40: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
ce50: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
ce60: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
ce70: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   be an integer. 
ce80: 20 49 66 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65   If.** The value
ce90: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 20   is currently a 
cea0: 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 64 72 6f  real number, dro
ceb0: 70 20 69 74 73 20 66 72 61 63 74 69 6f 6e 61 6c  p its fractional
cec0: 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20 74 68 65   part..** If the
ced0: 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f   value is text o
cee0: 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63  r blob, try to c
cef0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20  onvert it to an 
cf00: 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68  integer using th
cf10: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
cf20: 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74  of atoi() and st
cf30: 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68  ore 0 if no such
cf40: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70   conversion is p
cf50: 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  ossible..**.** A
cf60: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
cf70: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
cf80: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
cf90: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
cfa0: 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e 74 3a 20  .case OP_ToInt: 
cfb0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
cfc0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
cfd0: 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a  _TO_INT, in1 */.
cfe0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
cff0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
d000: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d010: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
d020: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
d030: 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
d040: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
d050: 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
d060: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29  QLITE_OMIT_CAST)
d070: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
d080: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
d090: 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20 4f 70 63 6f  G_POINT)./* Opco
d0a0: 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a 20  de: ToReal P1 * 
d0b0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
d0c0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
d0d0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
d0e0: 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
d0f0: 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66 20  t number..** If 
d100: 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72  The value is cur
d110: 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67 65  rently an intege
d120: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a 2a  r, convert it..*
d130: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
d140: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
d150: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
d160: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
d170: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
d180: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
d190: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30 20  ) and store 0.0 
d1a0: 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65  if no such conve
d1b0: 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c  rsion is possibl
d1c0: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
d1d0: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
d1e0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
d1f0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
d200: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
d210: 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20  OP_ToReal: {    
d220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d230: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52   same as TK_TO_R
d240: 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  EAL, in1 */.  pI
d250: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
d260: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
d270: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
d280: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
d290: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
d2a0: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
d2b0: 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79  e3VdbeMemRealify
d2c0: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
d2d0: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
d2e0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
d2f0: 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21  _OMIT_CAST) && !
d300: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
d310: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
d320: 4e 54 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  NT) */../* Opcod
d330: 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20 50  e: Lt P1 P2 P3 P
d340: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  4 P5.**.** Compa
d350: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
d360: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
d370: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
d380: 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a  <reg(P1) then.**
d390: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
d3a0: 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20   P2.  .**.** If 
d3b0: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
d3c0: 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20  FNULL bit of P5 
d3d0: 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65  is set and eithe
d3e0: 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20  r reg(P1) or.** 
d3f0: 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20  reg(P3) is NULL 
d400: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
d410: 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49  mp.  If the SQLI
d420: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a  TE_JUMPIFNULL .*
d430: 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74  * bit is clear t
d440: 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
d450: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
d460: 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  nd is NULL..**.*
d470: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
d480: 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66  _MASK portion of
d490: 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61   P5 must be an a
d4a0: 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65  ffinity characte
d4b0: 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  r -.** SQLITE_AF
d4c0: 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41  F_TEXT, SQLITE_A
d4d0: 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20  FF_INTEGER, and 
d4e0: 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74  so forth. An att
d4f0: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a  empt is made .**
d500: 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20   to coerce both 
d510: 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67  inputs according
d520: 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74   to this affinit
d530: 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20  y before the.** 
d540: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61  comparison is ma
d550: 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54  de. If the SQLIT
d560: 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78  E_AFF_MASK is 0x
d570: 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63  00, then numeric
d580: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20  .** affinity is 
d590: 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20  used. Note that 
d5a0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e  the affinity con
d5b0: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f  versions are sto
d5c0: 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f  red.** back into
d5d0: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
d5e0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20  ters P1 and P3. 
d5f0: 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   So this opcode 
d600: 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72  can cause.** per
d610: 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20  sistent changes 
d620: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20  to registers P1 
d630: 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e  and P3..**.** On
d640: 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f  ce any conversio
d650: 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c  ns have taken pl
d660: 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72  ace, and neither
d670: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
d680: 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61  .** the values a
d690: 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20  re compared. If 
d6a0: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20  both values are 
d6b0: 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d  blobs then memcm
d6c0: 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  p() is.** used t
d6d0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
d6e0: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
d6f0: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62  omparison.  If b
d700: 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  oth values.** ar
d710: 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65  e text, then the
d720: 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c   appropriate col
d730: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
d740: 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20  specified in.** 
d750: 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64  P4 is  used to d
d760: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
d770: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
d780: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
d790: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
d7a0: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
d7b0: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
d7c0: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
d7d0: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
d7e0: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
d7f0: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
d800: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
d810: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
d820: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
d830: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
d840: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
d850: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
d860: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
d870: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
d880: 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   blobs..**.** If
d890: 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52   the SQLITE_STOR
d8a0: 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73  EP2 bit of P5 is
d8b0: 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f   set, then do no
d8c0: 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64  t jump.  Instead
d8d0: 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f  ,.** store a boo
d8e0: 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74  lean result (eit
d8f0: 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20  her 0, or 1, or 
d900: 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65  NULL) in registe
d910: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P2..**.** If t
d920: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
d930: 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50   bit is set in P
d940: 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c  5, then NULL val
d950: 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
d960: 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f  ed.** equal to o
d970: 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76  ne another, prov
d980: 69 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64  ided that they d
d990: 6f 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72  o not have their
d9a0: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20   MEM_Cleared.** 
d9b0: 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f  bit set..*/./* O
d9c0: 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20  pcode: Ne P1 P2 
d9d0: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
d9e0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
d9f0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
da00: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
da10: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
da20: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
da30: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
da40: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f  P1 and P3 are no
da50: 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68  t equal.  See th
da60: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a  e Lt opcode for.
da70: 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  ** additional in
da80: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
da90: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
daa0: 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74  Q is set in P5 t
dab0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
dac0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
dad0: 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a  always either.**
dae0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61   true or false a
daf0: 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c  nd is never NULL
db00: 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61  .  If both opera
db10: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  nds are NULL the
db20: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  n the result.** 
db30: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
db40: 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74 68   false.  If eith
db50: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
db60: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
db70: 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49  lt is true..** I
db80: 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  f neither operan
db90: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65  d is NULL the re
dba0: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
dbb0: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
dbc0: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
dbd0: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
dbe0: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
dbf0: 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  5..*/./* Opcode:
dc00: 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20   Eq P1 P2 P3 P4 
dc10: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
dc20: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
dc30: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
dc40: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
dc50: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
dc60: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
dc70: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
dc80: 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a   P3 are equal..*
dc90: 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63  * See the Lt opc
dca0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
dcb0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
dcc0: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
dcd0: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
dce0: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
dcf0: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
dd00: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
dd10: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
dd20: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
dd30: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
dd40: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
dd50: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
dd60: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
dd70: 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66 20  on is true.  If 
dd80: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
dd90: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
dda0: 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e  result is false.
ddb0: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
ddc0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
ddd0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
dde0: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
ddf0: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
de00: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
de10: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
de20: 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70  rom P5..*/./* Op
de30: 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50  code: Le P1 P2 P
de40: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
de50: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
de60: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
de70: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
de80: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
de90: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
dea0: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
deb0: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
dec0: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
ded0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
dee0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
def0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
df00: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
df10: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
df20: 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33  ode: Gt P1 P2 P3
df30: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
df40: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
df50: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
df60: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
df70: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
df80: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
df90: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
dfa0: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
dfb0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
dfc0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
dfd0: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
dfe0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
dff0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
e000: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31  /* Opcode: Ge P1
e010: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
e020: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
e030: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
e040: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
e050: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
e060: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
e070: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
e080: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
e090: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
e0a0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
e0b0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
e0c0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
e0d0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
e0e0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e0f0: 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20  /.case OP_Eq:   
e100: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e110: 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75  ame as TK_EQ, ju
e120: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
e130: 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20  case OP_Ne:     
e140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e150: 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70  e as TK_NE, jump
e160: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
e170: 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20  se OP_Lt:       
e180: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
e190: 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20  as TK_LT, jump, 
e1a0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
e1b0: 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20   OP_Le:         
e1c0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
e1d0: 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LE, jump, in
e1e0: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
e1f0: 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20  P_Gt:           
e200: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e210: 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GT, jump, in1,
e220: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
e230: 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  Ge: {           
e240: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
e250: 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GE, jump, in1, i
e260: 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  n3 */.  int res;
e270: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
e280: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d  esult of the com
e290: 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20  parison of pIn1 
e2a0: 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a  against pIn3 */.
e2b0: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
e2c0: 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74        /* Affinit
e2d0: 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d  y to use for com
e2e0: 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36  parison */.  u16
e2f0: 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20   flags1;        
e300: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74   /* Copy of init
e310: 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e  ial value of pIn
e320: 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31  1->flags */.  u1
e330: 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20  6 flags3;       
e340: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69    /* Copy of ini
e350: 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49  tial value of pI
e360: 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20  n3->flags */..  
e370: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e380: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
e390: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
e3a0: 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d    flags1 = pIn1-
e3b0: 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33  >flags;.  flags3
e3c0: 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a   = pIn3->flags;.
e3d0: 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20    if( (flags1 | 
e3e0: 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c  flags3)&MEM_Null
e3f0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f   ){.    /* One o
e400: 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  r both operands 
e410: 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20  are NULL */.    
e420: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
e430: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20  LITE_NULLEQ ){. 
e440: 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54       /* If SQLIT
e450: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
e460: 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79  (which will only
e470: 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f   happen if the o
e480: 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20  perator is.     
e490: 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f   ** OP_Eq or OP_
e4a0: 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68  Ne) then take th
e4b0: 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65  e jump or not de
e4c0: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
e4d0: 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e  er.      ** or n
e4e0: 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  ot both operands
e4f0: 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20   are null..     
e500: 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
e510: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
e520: 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  P_Eq || pOp->opc
e530: 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20  ode==OP_Ne );.  
e540: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61      assert( (fla
e550: 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65  gs1 & MEM_Cleare
e560: 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  d)==0 );.      i
e570: 66 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e  f( (flags1&MEM_N
e580: 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26  ull)!=0.       &
e590: 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75  & (flags3&MEM_Nu
e5a0: 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26  ll)!=0.       &&
e5b0: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65   (flags3&MEM_Cle
e5c0: 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29  ared)==0.      )
e5d0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
e5e0: 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61  0;  /* Results a
e5f0: 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  re equal */.    
e600: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
e610: 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65   res = 1;  /* Re
e620: 73 75 6c 74 73 20 61 72 65 20 6e 6f 74 20 65 71  sults are not eq
e630: 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20  ual */.      }. 
e640: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
e650: 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  /* SQLITE_NULLEQ
e660: 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74   is clear and at
e670: 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61   least one opera
e680: 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20  nd is NULL,.    
e690: 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65    ** then the re
e6a0: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e  sult is always N
e6b0: 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68  ULL..      ** Th
e6c0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e6d0: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  if the SQLITE_JU
e6e0: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20  MPIFNULL bit is 
e6f0: 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  set..      */.  
e700: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
e710: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
e720: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74   ){.        pOut
e730: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
e740: 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65  ];.        MemSe
e750: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
e760: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20  MEM_Null);.     
e770: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
e780: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
e790: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
e7a0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
e7b0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
e7c0: 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f  .        pc = pO
e7d0: 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20 20 7d  p->p2-1;.      }
e7e0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
e7f0: 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
e800: 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72   /* Neither oper
e810: 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f  and is NULL.  Do
e820: 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a   a comparison. *
e830: 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d  /.    affinity =
e840: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
e850: 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20  E_AFF_MASK;.    
e860: 69 66 28 20 61 66 66 69 6e 69 74 79 20 29 7b 0a  if( affinity ){.
e870: 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e        applyAffin
e880: 69 74 79 28 70 49 6e 31 2c 20 61 66 66 69 6e 69  ity(pIn1, affini
e890: 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ty, encoding);. 
e8a0: 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69       applyAffini
e8b0: 74 79 28 70 49 6e 33 2c 20 61 66 66 69 6e 69 74  ty(pIn3, affinit
e8c0: 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  y, encoding);.  
e8d0: 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c      if( db->mall
e8e0: 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
e8f0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20  no_mem;.    }.. 
e900: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
e910: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
e920: 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43  EQ || pOp->p4.pC
e930: 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 45 78  oll==0 );.    Ex
e940: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a  pandBlob(pIn1);.
e950: 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70      ExpandBlob(p
e960: 49 6e 33 29 3b 0a 20 20 20 20 72 65 73 20 3d 20  In3);.    res = 
e970: 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
e980: 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f  e(pIn3, pIn1, pO
e990: 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20  p->p4.pColl);.  
e9a0: 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d  }.  switch( pOp-
e9b0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63  >opcode ){.    c
e9c0: 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65  ase OP_Eq:    re
e9d0: 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20  s = res==0;     
e9e0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
e9f0: 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20  OP_Ne:    res = 
ea00: 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61  res!=0;     brea
ea10: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c  k;.    case OP_L
ea20: 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c  t:    res = res<
ea30: 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  0;      break;. 
ea40: 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20     case OP_Le:  
ea50: 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20    res = res<=0; 
ea60: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
ea70: 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65  ase OP_Gt:    re
ea80: 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20  s = res>0;      
ea90: 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75  break;.    defau
eaa0: 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20  lt:       res = 
eab0: 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61  res>=0;     brea
eac0: 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f  k;.  }..  if( pO
ead0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
eae0: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f  TOREP2 ){.    pO
eaf0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
eb00: 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  p2];.    memAbou
eb10: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
eb20: 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  t);.    MemSetTy
eb30: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
eb40: 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  _Int);.    pOut-
eb50: 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20  >u.i = res;.    
eb60: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
eb70: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
eb80: 20 7d 65 6c 73 65 20 69 66 28 20 72 65 73 20 29   }else if( res )
eb90: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
eba0: 70 32 2d 31 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  p2-1;.  }..  /* 
ebb0: 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73  Undo any changes
ebc0: 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66   made by applyAf
ebd0: 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20  finity() to the 
ebe0: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e  input registers.
ebf0: 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   */.  pIn1->flag
ec00: 73 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  s = (pIn1->flags
ec10: 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20  &~MEM_TypeMask) 
ec20: 7c 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 54 79  | (flags1&MEM_Ty
ec30: 70 65 4d 61 73 6b 29 3b 0a 20 20 70 49 6e 33 2d  peMask);.  pIn3-
ec40: 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 33 2d 3e  >flags = (pIn3->
ec50: 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d  flags&~MEM_TypeM
ec60: 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 26 4d  ask) | (flags3&M
ec70: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20  EM_TypeMask);.  
ec80: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
ec90: 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e  ode: Permutation
eca0: 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
ecb0: 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74  * Set the permut
ecc0: 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68  ation used by th
ecd0: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65  e OP_Compare ope
ece0: 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20  rator to be the 
ecf0: 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65  array.** of inte
ed00: 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a  gers in P4..**.*
ed10: 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f  * The permutatio
ed20: 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  n is only valid 
ed30: 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f  until the next O
ed40: 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 2c 20 4f  P_Permutation, O
ed50: 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f 50  P_Compare,.** OP
ed60: 5f 48 61 6c 74 2c 20 6f 72 20 4f 50 5f 52 65 73  _Halt, or OP_Res
ed70: 75 6c 74 52 6f 77 2e 20 20 54 79 70 69 63 61 6c  ultRow.  Typical
ed80: 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74  ly the OP_Permut
ed90: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6f 63 63  ation should occ
eda0: 75 72 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ur.** immediatel
edb0: 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f  y prior to the O
edc0: 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61  P_Compare..*/.ca
edd0: 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  se OP_Permutatio
ede0: 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  n: {.  assert( p
edf0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
ee00: 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73  NTARRAY );.  ass
ee10: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20  ert( pOp->p4.ai 
ee20: 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20  );.  aPermute = 
ee30: 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72  pOp->p4.ai;.  br
ee40: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
ee50: 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32  e: Compare P1 P2
ee60: 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43   P3 P4 *.**.** C
ee70: 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f  ompare two vecto
ee80: 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  rs of registers 
ee90: 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28  in reg(P1)..reg(
eea0: 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74  P1+P3-1) (call t
eeb0: 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41  his.** vector "A
eec0: 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32  ") and in reg(P2
eed0: 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20  )..reg(P2+P3-1) 
eee0: 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65  ("B").  Save the
eef0: 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
ef00: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72  e comparison for
ef10: 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74   use by the next
ef20: 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63   OP_Jump instruc
ef30: 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  t..**.** P4 is a
ef40: 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
ef50: 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  re that defines 
ef60: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
ef70: 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20  ces and sort.** 
ef80: 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63  orders for the c
ef90: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20  omparison.  The 
efa0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c  permutation appl
efb0: 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ies to registers
efc0: 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b  .** only.  The K
efd0: 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20  eyInfo elements 
efe0: 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74  are used sequent
eff0: 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ially..**.** The
f000: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
f010: 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e   sort comparison
f020: 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61  , so NULLs compa
f030: 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c  re equal,.** NUL
f040: 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  Ls are less than
f050: 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72   numbers, number
f060: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
f070: 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20  strings,.** and 
f080: 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73  strings are less
f090: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a   than blobs..*/.
f0a0: 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a  case OP_Compare:
f0b0: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e   {.  int n;.  in
f0c0: 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20  t i;.  int p1;. 
f0d0: 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74   int p2;.  const
f0e0: 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
f0f0: 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  fo;.  int idx;. 
f100: 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b   CollSeq *pColl;
f110: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
f120: 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65   sequence to use
f130: 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f   on this term */
f140: 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20  .  int bRev;    
f150: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f        /* True fo
f160: 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72  r DESCENDING sor
f170: 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 6e 20  t order */..  n 
f180: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65  = pOp->p3;.  pKe
f190: 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
f1a0: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
f1b0: 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
f1c0: 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
f1d0: 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
f1e0: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
f1f0: 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  p2;.#if SQLITE_D
f200: 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
f210: 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
f220: 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
f230: 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
f240: 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
f250: 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
f260: 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
f270: 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
f280: 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  x<=p->nMem+1 );.
f290: 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
f2a0: 20 26 26 20 70 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d   && p2+mx<=p->nM
f2b0: 65 6d 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  em+1 );.  }else{
f2c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
f2d0: 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d  0 && p1+n<=p->nM
f2e0: 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  em+1 );.    asse
f2f0: 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e  rt( p2>0 && p2+n
f300: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20  <=p->nMem+1 );. 
f310: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
f320: 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66  ITE_DEBUG */.  f
f330: 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
f340: 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65  ){.    idx = aPe
f350: 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65  rmute ? aPermute
f360: 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73  [i] : i;.    ass
f370: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
f380: 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29  &aMem[p1+idx]) )
f390: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
f3a0: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
f3b0: 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52  2+idx]) );.    R
f3c0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31  EGISTER_TRACE(p1
f3d0: 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69  +idx, &aMem[p1+i
f3e0: 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  dx]);.    REGIST
f3f0: 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c  ER_TRACE(p2+idx,
f400: 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b   &aMem[p2+idx]);
f410: 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70  .    assert( i<p
f420: 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20  KeyInfo->nField 
f430: 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70  );.    pColl = p
f440: 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69  KeyInfo->aColl[i
f450: 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b  ];.    bRev = pK
f460: 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64  eyInfo->aSortOrd
f470: 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70  er[i];.    iComp
f480: 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  are = sqlite3Mem
f490: 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31  Compare(&aMem[p1
f4a0: 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b  +idx], &aMem[p2+
f4b0: 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20  idx], pColl);.  
f4c0: 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29    if( iCompare )
f4d0: 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76  {.      if( bRev
f4e0: 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69   ) iCompare = -i
f4f0: 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62  Compare;.      b
f500: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
f510: 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a    aPermute = 0;.
f520: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
f530: 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50  pcode: Jump P1 P
f540: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
f550: 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72  ump to the instr
f560: 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73  uction at addres
f570: 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20  s P1, P2, or P3 
f580: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
f590: 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d  ther.** in the m
f5a0: 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f  ost recent OP_Co
f5b0: 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f  mpare instructio
f5c0: 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20  n the P1 vector 
f5d0: 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  was less than.**
f5e0: 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72   equal to, or gr
f5f0: 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50  eater than the P
f600: 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63  2 vector, respec
f610: 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20  tively..*/.case 
f620: 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20  OP_Jump: {      
f630: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
f640: 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65  /.  if( iCompare
f650: 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  <0 ){.    pc = p
f660: 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65  Op->p1 - 1;.  }e
f670: 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65  lse if( iCompare
f680: 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ==0 ){.    pc = 
f690: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
f6a0: 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70  else{.    pc = p
f6b0: 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p3 - 1;.  }.
f6c0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
f6d0: 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32  pcode: And P1 P2
f6e0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61   P3 * *.**.** Ta
f6f0: 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41  ke the logical A
f700: 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
f710: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
f720: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77   and P2 and.** w
f730: 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20  rite the result 
f740: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
f750: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
f760: 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20  r P1 or P2 is 0 
f770: 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65  (false) then the
f780: 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65   result is 0 eve
f790: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65  n if.** the othe
f7a0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
f7b0: 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75    A NULL and tru
f7c0: 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67  e or two NULLs g
f7d0: 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75  ive.** a NULL ou
f7e0: 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tput..*/./* Opco
f7f0: 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20  de: Or P1 P2 P3 
f800: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  * *.**.** Take t
f810: 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66  he logical OR of
f820: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
f830: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
f840: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
f850: 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67  he answer in reg
f860: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
f870: 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
f880: 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74  P2 is nonzero (t
f890: 72 75 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  rue) then the re
f8a0: 73 75 6c 74 20 69 73 20 31 20 28 74 72 75 65 29  sult is 1 (true)
f8b0: 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20  .** even if the 
f8c0: 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
f8d0: 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
f8e0: 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55   false or two NU
f8f0: 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55  LLs.** give a NU
f900: 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61  LL output..*/.ca
f910: 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20  se OP_And:      
f920: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f930: 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20  as TK_AND, in1, 
f940: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
f950: 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20  e OP_Or: {      
f960: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
f970: 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e  s TK_OR, in1, in
f980: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74  2, out3 */.  int
f990: 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20   v1;    /* Left 
f9a0: 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c  operand:  0==FAL
f9b0: 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
f9c0: 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
f9d0: 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20  */.  int v2;    
f9e0: 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64  /* Right operand
f9f0: 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54  : 0==FALSE, 1==T
fa00: 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
fa10: 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49  or NULL */..  pI
fa20: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
fa30: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
fa40: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
fa50: 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b  l ){.    v1 = 2;
fa60: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31  .  }else{.    v1
fa70: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
fa80: 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
fa90: 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61  .  }.  pIn2 = &a
faa0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
fab0: 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  if( pIn2->flags 
fac0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
fad0: 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v2 = 2;.  }els
fae0: 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69  e{.    v2 = sqli
faf0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
fb00: 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn2)!=0;.  }.  
fb10: 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
fb20: 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73  =OP_And ){.    s
fb30: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
fb40: 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f  gned char and_lo
fb50: 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20  gic[] = { 0, 0, 
fb60: 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32  0, 0, 1, 2, 0, 2
fb70: 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
fb80: 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76  and_logic[v1*3+v
fb90: 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2];.  }else{.   
fba0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
fbb0: 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c  signed char or_l
fbc0: 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c  ogic[] = { 0, 1,
fbd0: 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20   2, 1, 1, 1, 2, 
fbe0: 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  1, 2 };.    v1 =
fbf0: 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76   or_logic[v1*3+v
fc00: 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d  2];.  }.  pOut =
fc10: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
fc20: 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a  .  if( v1==2 ){.
fc30: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
fc40: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
fc50: 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  l);.  }else{.   
fc60: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b   pOut->u.i = v1;
fc70: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
fc80: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
fc90: 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
fca0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
fcb0: 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
fcc0: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
fcd0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
fce0: 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
fcf0: 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
fd00: 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61  re the.** boolea
fd10: 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20  n complement in 
fd20: 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
fd30: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
fd40: 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a  gister P1 is .**
fd50: 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55   NULL, then a NU
fd60: 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  LL is stored in 
fd70: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
fd80: 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
fd90: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
fda0: 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  TK_NOT, in1, out
fdb0: 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
fdc0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
fdd0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
fde0: 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
fdf0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
fe00: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
fe10: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
fe20: 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  (pOut);.  }else{
fe30: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
fe40: 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
fe50: 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e  , !sqlite3VdbeIn
fe60: 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20  tValue(pIn1));. 
fe70: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
fe80: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74  * Opcode: BitNot
fe90: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
fea0: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
feb0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
fec0: 73 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e  ster P1 as an in
fed0: 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68  teger.  Store th
fee0: 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65  e.** ones-comple
fef0: 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76  ment of the P1 v
ff00: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
ff10: 65 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f  er P2.  If P1 ho
ff20: 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68  lds.** a NULL th
ff30: 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  en store a NULL 
ff40: 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
ff50: 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20  P_BitNot: {     
ff60: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ff70: 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e  as TK_BITNOT, in
ff80: 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
ff90: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
ffa0: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
ffb0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
ffc0: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
ffd0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
ffe0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
fff0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
10000 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
10010 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
10020 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33  4(pOut, ~sqlite3
10030 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
10040 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1));.  }.  break
10050 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10060 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  Once P1 P2 * * *
10070 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 69 66 20  .**.** Check if 
10080 4f 50 5f 4f 6e 63 65 20 66 6c 61 67 20 50 31 20  OP_Once flag P1 
10090 69 73 20 73 65 74 2e 20 49 66 20 73 6f 2c 20 6a  is set. If so, j
100a0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
100b0 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  on P2. Otherwise
100c0 2c 0a 2a 2a 20 73 65 74 20 74 68 65 20 66 6c 61  ,.** set the fla
100d0 67 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  g and fall throu
100e0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
100f0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
10100 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4a 75 6d 70  * See also: Jump
10110 4f 6e 63 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  Once.*/.case OP_
10120 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20  Once: {         
10130 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
10140 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
10150 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 29 3b  <p->nOnceFlag );
10160 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63 65 46  .  if( p->aOnceF
10170 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a  lag[pOp->p1] ){.
10180 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
10190 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
101a0 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f   p->aOnceFlag[pO
101b0 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a  p->p1] = 1;.  }.
101c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
101d0 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20  pcode: If P1 P2 
101e0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
101f0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
10200 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
10210 20 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68   P1 is true.  Th
10220 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f  e value.** is co
10230 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66  nsidered true if
10240 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61   it is numeric a
10250 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66  nd non-zero.  If
10260 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
10270 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P1 is NULL then
10280 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
10290 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
102a0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
102b0 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a  IfNot P1 P2 P3 *
102c0 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
102d0 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
102e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
102f0 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76  is False.  The v
10300 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  alue.** is consi
10310 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20 69  dered false if i
10320 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20  t has a numeric 
10330 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20  value of zero.  
10340 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
10350 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
10360 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
10370 20 69 66 20 50 33 20 69 73 20 7a 65 72 6f 2e 0a   if P3 is zero..
10380 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20  */.case OP_If:  
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
103a0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63  * jump, in1 */.c
103b0 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20  ase OP_IfNot: { 
103c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
103d0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
103e0 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   c;.  pIn1 = &aM
103f0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
10400 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
10410 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
10420 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   c = pOp->p3;.  
10430 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51  }else{.#ifdef SQ
10440 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
10450 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d  NG_POINT.    c =
10460 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
10470 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23  alue(pIn1)!=0;.#
10480 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c  else.    c = sql
10490 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
104a0 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65  e(pIn1)!=0.0;.#e
104b0 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70  ndif.    if( pOp
104c0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e  ->opcode==OP_IfN
104d0 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d  ot ) c = !c;.  }
104e0 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20  .  if( c ){.    
104f0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
10500 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
10510 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
10520 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
10530 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
10540 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
10550 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55  egister P1 is NU
10560 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  LL..*/.case OP_I
10570 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  sNull: {        
10580 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
10590 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  K_ISNULL, jump, 
105a0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
105b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
105c0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
105d0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
105e0 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
105f0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
10600 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10610 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31  code: NotNull P1
10620 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
10630 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
10640 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
10650 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55  ter P1 is not NU
10660 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  LL.  .*/.case OP
10670 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  _NotNull: {     
10680 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
10690 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75  s TK_NOTNULL, ju
106a0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
106b0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
106c0 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
106d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
106e0 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  l)==0 ){.    pc 
106f0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
10700 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10710 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e  * Opcode: Column
10720 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
10730 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
10740 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75  the data that cu
10750 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
10760 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65  o as a structure
10770 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20   built using.** 
10780 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  the MakeRecord i
10790 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65  nstruction.  (Se
107a0 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  e the MakeRecord
107b0 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
107c0 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d  tional.** inform
107d0 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
107e0 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61  format of the da
107f0 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68  ta.)  Extract th
10800 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a  e P2-th column.*
10810 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f  * from this reco
10820 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  rd.  If there ar
10830 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b  e less that (P2+
10840 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e  1) .** values in
10850 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74   the record, ext
10860 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a  ract a NULL..**.
10870 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74  ** The value ext
10880 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64  racted is stored
10890 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
108a0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f  .**.** If the co
108b0 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65  lumn contains fe
108c0 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c  wer than P2 fiel
108d0 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74  ds, then extract
108e0 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a   a NULL.  Or,.**
108f0 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   if the P4 argum
10900 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20  ent is a P4_MEM 
10910 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  use the value of
10920 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
10930 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c   as.** the resul
10940 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
10950 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
10960 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20  E bit is set on 
10970 50 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70  P5 and P1 is a p
10980 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
10990 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  or,.** then the 
109a0 63 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72  cache of the cur
109b0 73 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69  sor is reset pri
109c0 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67  or to extracting
109d0 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20   the column..** 
109e0 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c  The first OP_Col
109f0 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73  umn against a ps
10a00 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72  eudo-table after
10a10 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
10a20 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67  e content.** reg
10a30 69 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65  ister has change
10a40 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68  d should have th
10a50 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  is bit set..**.*
10a60 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
10a70 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
10a80 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62  FLAG_TYPEOFARG b
10a90 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50  its are set on P
10aa0 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65  5 when.** the re
10ab0 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65  sult is guarante
10ac0 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73  ed to only be us
10ad0 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
10ae0 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29  nt of a length()
10af0 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20  .** or typeof() 
10b00 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63  function, respec
10b10 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61  tively.  The loa
10b20 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c  ding of large bl
10b30 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b  obs can be.** sk
10b40 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68  ipped for length
10b50 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65  () and all conte
10b60 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62  nt loading can b
10b70 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79  e skipped for ty
10b80 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  peof()..*/.case 
10b90 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75  OP_Column: {.  u
10ba0 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20  32 payloadSize; 
10bb0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
10bc0 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
10bd0 72 64 20 2a 2f 0a 20 20 69 36 34 20 70 61 79 6c  rd */.  i64 payl
10be0 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75  oadSize64; /* Nu
10bf0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
10c00 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
10c10 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
10c20 20 20 20 20 2f 2a 20 50 31 20 76 61 6c 75 65 20      /* P1 value 
10c30 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f  of the opcode */
10c40 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
10c50 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20        /* column 
10c60 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65  number to retrie
10c70 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ve */.  VdbeCurs
10c80 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
10c90 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
10ca0 0a 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20 20  .  char *zRec;  
10cb0 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
10cc0 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65 63   to complete rec
10cd0 6f 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74  ord-data */.  Bt
10ce0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
10cf0 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
10d00 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
10d10 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Type;        /* 
10d20 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74  aType[i] holds t
10d30 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20  he numeric type 
10d40 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75  of the i-th colu
10d50 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  mn */.  u32 *aOf
10d60 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
10d70 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
10d80 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
10d90 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
10da0 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  umn */.  int nFi
10db0 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e  eld;        /* n
10dc0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
10dd0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
10de0 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20  .  int len;     
10df0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e        /* The len
10e00 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61  gth of the seria
10e10 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74  lized data for t
10e20 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  he column */.  i
10e30 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
10e40 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
10e50 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61  r */.  char *zDa
10e60 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61 72  ta;       /* Par
10e70 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
10e80 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
10e90 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20  .  Mem *pDest;  
10ea0 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74        /* Where t
10eb0 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72  o write the extr
10ec0 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20  acted value */. 
10ed0 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
10ee0 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
10ef0 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
10f00 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
10f10 20 75 38 20 2a 7a 49 64 78 3b 20 20 20 20 20 20   u8 *zIdx;      
10f20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
10f30 6f 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 38  o header */.  u8
10f40 20 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20 20 20   *zEndHdr;      
10f50 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66   /* Pointer to f
10f60 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20  irst byte after 
10f70 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
10f80 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20  u32 offset;     
10f90 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74     /* Offset int
10fa0 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20  o the data */.  
10fb0 75 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20 20  u32 szField;    
10fc0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10fd0 62 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6e  bytes in the con
10fe0 74 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64 20  tent of a field 
10ff0 2a 2f 0a 20 20 69 6e 74 20 73 7a 48 64 72 3b 20  */.  int szHdr; 
11000 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
11010 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 73 69  of the header si
11020 7a 65 20 66 69 65 6c 64 20 61 74 20 73 74 61 72  ze field at star
11030 74 20 6f 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20  t of record */. 
11040 20 69 6e 74 20 61 76 61 69 6c 3b 20 20 20 20 20   int avail;     
11050 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11060 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61   bytes of availa
11070 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33  ble data */.  u3
11080 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  2 t;            
11090 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20   /* A type code 
110a0 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20  from the record 
110b0 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  header */.  Mem 
110c0 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  *pReg;         /
110d0 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e  * PseudoTable in
110e0 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
110f0 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
11100 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
11110 3b 0a 20 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65  ;.  pC = 0;.  me
11120 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
11130 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
11140 61 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43  assert( p1<p->nC
11150 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
11160 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
11170 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
11180 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61   );.  pDest = &a
11190 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
111a0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
111b0 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 7a 52  (p, pDest);.  zR
111c0 65 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68  ec = 0;..  /* Th
111d0 69 73 20 62 6c 6f 63 6b 20 73 65 74 73 20 74 68  is block sets th
111e0 65 20 76 61 72 69 61 62 6c 65 20 70 61 79 6c 6f  e variable paylo
111f0 61 64 53 69 7a 65 20 74 6f 20 62 65 20 74 68 65  adSize to be the
11200 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
11210 0a 20 20 2a 2a 20 62 79 74 65 73 20 69 6e 20 74  .  ** bytes in t
11220 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a  he record..  **.
11230 20 20 2a 2a 20 7a 52 65 63 20 69 73 20 73 65 74    ** zRec is set
11240 20 74 6f 20 62 65 20 74 68 65 20 63 6f 6d 70 6c   to be the compl
11250 65 74 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  ete text of the 
11260 72 65 63 6f 72 64 20 69 66 20 69 74 20 69 73 20  record if it is 
11270 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20  available..  ** 
11280 54 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63  The complete rec
11290 6f 72 64 20 74 65 78 74 20 69 73 20 61 6c 77 61  ord text is alwa
112a0 79 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  ys available for
112b0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20   pseudo-tables. 
112c0 20 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72   ** If the recor
112d0 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  d is stored in a
112e0 20 63 75 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d   cursor, the com
112f0 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78  plete record tex
11300 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20  t.  ** might be 
11310 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65  available in the
11320 20 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65    pC->aRow cache
11330 2e 20 20 4f 72 20 69 74 20 6d 69 67 68 74 20 6e  .  Or it might n
11340 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74  ot be..  ** If t
11350 68 65 20 64 61 74 61 20 69 73 20 75 6e 61 76 61  he data is unava
11360 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20 69 73  ilable,  zRec is
11370 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20   set to NULL..  
11380 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20  **.  ** We also 
11390 63 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  compute the numb
113a0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
113b0 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 46 6f   the record.  Fo
113c0 72 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20  r cursors,.  ** 
113d0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
113e0 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72 65 64 20  lumns is stored 
113f0 69 6e 20 74 68 65 20 56 64 62 65 43 75 72 73 6f  in the VdbeCurso
11400 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74  r.nField element
11410 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d  ..  */.  pC = p-
11420 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73  >apCsr[p1];.  as
11430 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
11440 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
11450 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
11460 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56    assert( pC->pV
11470 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a  tabCursor==0 );.
11480 23 65 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d  #endif.  pCrsr =
11490 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
114a0 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a  if( pCrsr!=0 ){.
114b0 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
114c0 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  d is stored in a
114d0 20 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20 72   B-Tree */.    r
114e0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
114f0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
11500 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
11510 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
11520 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
11530 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
11540 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
11550 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 0;.    }else i
11560 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
11570 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us==p->cacheCtr 
11580 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64  ){.      payload
11590 53 69 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f  Size = pC->paylo
115a0 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52  adSize;.      zR
115b0 65 63 20 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e  ec = (char*)pC->
115c0 61 52 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20  aRow;.    }else 
115d0 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  if( pC->isIndex 
115e0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
115f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
11600 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
11610 29 20 29 3b 0a 20 20 20 20 20 20 56 56 41 5f 4f  ) );.      VVA_O
11620 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
11630 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
11640 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a  rsr, &payloadSiz
11650 65 36 34 29 3b 0a 20 20 20 20 20 20 61 73 73 65  e64);.      asse
11660 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
11670 4b 20 29 3b 20 20 20 2f 2a 20 54 72 75 65 20 62  K );   /* True b
11680 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
11690 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62  Moveto() call ab
116a0 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20  ove */.      /* 
116b0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73  sqlite3BtreePars
116c0 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20  eCellPtr() uses 
116d0 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f  getVarint32() to
116e0 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20   extract the.   
116f0 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69     ** payload si
11700 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70  ze, so it is imp
11710 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c  ossible for payl
11720 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a  oadSize64 to be.
11730 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20        ** larger 
11740 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f  than 32 bits. */
11750 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
11760 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20  payloadSize64 & 
11770 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d  SQLITE_MAX_U32)=
11780 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a  =(u64)payloadSiz
11790 65 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61 79  e64 );.      pay
117a0 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29  loadSize = (u32)
117b0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20  payloadSize64;. 
117c0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
117d0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
117e0 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
117f0 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
11800 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
11810 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
11820 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61  aSize(pCrsr, &pa
11830 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20  yloadSize);.    
11840 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
11850 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
11860 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f  DataSize() canno
11870 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 7d 0a  t fail */.    }.
11880 20 20 7d 65 6c 73 65 20 69 66 28 20 41 4c 57 41    }else if( ALWA
11890 59 53 28 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  YS(pC->pseudoTab
118a0 6c 65 52 65 67 3e 30 29 20 29 7b 0a 20 20 20 20  leReg>0) ){.    
118b0 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d  pReg = &aMem[pC-
118c0 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d  >pseudoTableReg]
118d0 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6d 75  ;.    if( pC->mu
118e0 6c 74 69 50 73 65 75 64 6f 20 29 7b 0a 20 20 20  ltiPseudo ){.   
118f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
11900 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65  mShallowCopy(pDe
11910 73 74 2c 20 70 52 65 67 2b 70 32 2c 20 4d 45 4d  st, pReg+p2, MEM
11920 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 20 20 44  _Ephem);.      D
11930 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 44  eephemeralize(pD
11940 65 73 74 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  est);.      goto
11950 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
11960 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
11970 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20  ( pReg->flags & 
11980 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
11990 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
119a0 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20  id(pReg) );.    
119b0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 52  payloadSize = pR
119c0 65 67 2d 3e 6e 3b 0a 20 20 20 20 7a 52 65 63 20  eg->n;.    zRec 
119d0 3d 20 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 70  = pReg->z;.    p
119e0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
119f0 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47   (pOp->p5&OPFLAG
11a00 5f 43 4c 45 41 52 43 41 43 48 45 29 20 3f 20 43  _CLEARCACHE) ? C
11a10 41 43 48 45 5f 53 54 41 4c 45 20 3a 20 70 2d 3e  ACHE_STALE : p->
11a20 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 61 73  cacheCtr;.    as
11a30 73 65 72 74 28 20 70 61 79 6c 6f 61 64 53 69 7a  sert( payloadSiz
11a40 65 3d 3d 30 20 7c 7c 20 7a 52 65 63 21 3d 30 20  e==0 || zRec!=0 
11a50 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11a60 2f 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 65 20  /* Consider the 
11a70 72 6f 77 20 74 6f 20 62 65 20 4e 55 4c 4c 20 2a  row to be NULL *
11a80 2f 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a  /.    payloadSiz
11a90 65 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  e = 0;.  }..  /*
11aa0 20 49 66 20 70 61 79 6c 6f 61 64 53 69 7a 65 20   If payloadSize 
11ab0 69 73 20 30 2c 20 74 68 65 6e 20 6a 75 73 74 20  is 0, then just 
11ac0 73 74 6f 72 65 20 61 20 4e 55 4c 4c 2e 20 20 54  store a NULL.  T
11ad0 68 69 73 20 63 61 6e 20 68 61 70 70 65 6e 20 62  his can happen b
11ae0 65 63 61 75 73 65 20 6f 66 0a 20 20 2a 2a 20 6e  ecause of.  ** n
11af0 75 6c 6c 52 6f 77 20 6f 72 20 62 65 63 61 75 73  ullRow or becaus
11b00 65 20 6f 66 20 61 20 63 6f 72 72 75 70 74 20 64  e of a corrupt d
11b10 61 74 61 62 61 73 65 2e 20 2a 2f 0a 20 20 69 66  atabase. */.  if
11b20 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30  ( payloadSize==0
11b30 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79   ){.    MemSetTy
11b40 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45  peFlag(pDest, ME
11b50 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 67 6f 74  M_Null);.    got
11b60 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
11b70 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64  .  }.  assert( d
11b80 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
11b90 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d  _LIMIT_LENGTH]>=
11ba0 30 20 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f  0 );.  if( paylo
11bb0 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62  adSize > (u32)db
11bc0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
11bd0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
11be0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
11bf0 67 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64  g;.  }..  nField
11c00 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20   = pC->nField;. 
11c10 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65   assert( p2<nFie
11c20 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64  ld );..  /* Read
11c30 20 61 6e 64 20 70 61 72 73 65 20 74 68 65 20 74   and parse the t
11c40 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74  able header.  St
11c50 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ore the results 
11c60 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a  of the parse.  *
11c70 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  * into the recor
11c80 64 20 68 65 61 64 65 72 20 63 61 63 68 65 20 66  d header cache f
11c90 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72  ields of the cur
11ca0 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70  sor..  */.  aTyp
11cb0 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20  e = pC->aType;. 
11cc0 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74   if( pC->cacheSt
11cd0 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74  atus==p->cacheCt
11ce0 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74  r ){.    aOffset
11cf0 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a   = pC->aOffset;.
11d00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
11d10 65 72 74 28 61 54 79 70 65 29 3b 0a 20 20 20 20  ert(aType);.    
11d20 61 76 61 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70  avail = 0;.    p
11d30 43 2d 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f 66  C->aOffset = aOf
11d40 66 73 65 74 20 3d 20 26 61 54 79 70 65 5b 6e 46  fset = &aType[nF
11d50 69 65 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70  ield];.    pC->p
11d60 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61 79  ayloadSize = pay
11d70 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 70 43  loadSize;.    pC
11d80 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
11d90 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20 20  p->cacheCtr;..  
11da0 20 20 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20    /* Figure out 
11db0 68 6f 77 20 6d 61 6e 79 20 62 79 74 65 73 20 61  how many bytes a
11dc0 72 65 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  re in the header
11dd0 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a 52 65 63   */.    if( zRec
11de0 20 29 7b 0a 20 20 20 20 20 20 7a 44 61 74 61 20   ){.      zData 
11df0 3d 20 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73  = zRec;.    }els
11e00 65 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  e{.      if( pC-
11e10 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
11e20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61      zData = (cha
11e30 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 4b  r*)sqlite3BtreeK
11e40 65 79 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  eyFetch(pCrsr, &
11e50 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65  avail);.      }e
11e60 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61  lse{.        zDa
11e70 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69  ta = (char*)sqli
11e80 74 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63  te3BtreeDataFetc
11e90 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29  h(pCrsr, &avail)
11ea0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
11eb0 2f 2a 20 49 66 20 4b 65 79 46 65 74 63 68 28 29  /* If KeyFetch()
11ec0 2f 44 61 74 61 46 65 74 63 68 28 29 20 6d 61 6e  /DataFetch() man
11ed0 61 67 65 64 20 74 6f 20 67 65 74 20 74 68 65 20  aged to get the 
11ee0 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a  entire payload,.
11ef0 20 20 20 20 20 20 2a 2a 20 73 61 76 65 20 74 68        ** save th
11f00 65 20 70 61 79 6c 6f 61 64 20 69 6e 20 74 68 65  e payload in the
11f10 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e   pC->aRow cache.
11f20 20 20 54 68 61 74 20 77 69 6c 6c 20 73 61 76 65    That will save
11f30 20 75 73 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a   us from.      *
11f40 2a 20 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65  * having to make
11f50 20 61 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c   additional call
11f60 73 20 74 6f 20 66 65 74 63 68 20 74 68 65 20 63  s to fetch the c
11f70 6f 6e 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f  ontent portion o
11f80 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72  f.      ** the r
11f90 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a  ecord..      */.
11fa0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76        assert( av
11fb0 61 69 6c 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20  ail>=0 );.      
11fc0 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20  if( payloadSize 
11fd0 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b  <= (u32)avail ){
11fe0 0a 20 20 20 20 20 20 20 20 7a 52 65 63 20 3d 20  .        zRec = 
11ff0 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 20 20 70  zData;.        p
12000 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a  C->aRow = (u8*)z
12010 44 61 74 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Data;.      }els
12020 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  e{.        pC->a
12030 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  Row = 0;.      }
12040 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68  .    }.    /* Th
12050 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65  e following asse
12060 72 74 20 69 73 20 74 72 75 65 20 69 6e 20 61 6c  rt is true in al
12070 6c 20 63 61 73 65 73 20 65 78 63 65 70 74 20 77  l cases except w
12080 68 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 64  hen.    ** the d
12090 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 61 73  atabase file has
120a0 20 62 65 65 6e 20 63 6f 72 72 75 70 74 65 64 20   been corrupted 
120b0 65 78 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20  externally..    
120c0 2a 2a 20 20 20 20 61 73 73 65 72 74 28 20 7a 52  **    assert( zR
120d0 65 63 21 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d  ec!=0 || avail>=
120e0 70 61 79 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61  payloadSize || a
120f0 76 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20  vail>=9 ); */.  
12100 20 20 73 7a 48 64 72 20 3d 20 67 65 74 56 61 72    szHdr = getVar
12110 69 6e 74 33 32 28 28 75 38 2a 29 7a 44 61 74 61  int32((u8*)zData
12120 2c 20 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20 20  , offset);..    
12130 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63  /* Make sure a c
12140 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20  orrupt database 
12150 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73  has not given us
12160 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61   an oversize hea
12170 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74  der..    ** Do t
12180 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64  his now to avoid
12190 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d   an oversize mem
121a0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a  ory allocation..
121b0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79      **.    ** Ty
121c0 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62  pe entries can b
121d0 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
121e0 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42  5 bytes each.  B
121f0 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a  ut 4 and 5 byte.
12200 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65      ** types use
12210 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70   so much data sp
12220 61 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63  ace that there c
12230 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20  an only be 4096 
12240 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a  and 32 of.    **
12250 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76   them, respectiv
12260 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78  ely.  So the max
12270 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67  imum header leng
12280 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  th results from 
12290 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20  a.    ** 3-byte 
122a0 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66  type for each of
122b0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
122c0 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c  32768 columns pl
122d0 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20  us three.    ** 
122e0 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20  extra bytes for 
122f0 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74  the header lengt
12300 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38  h itself.  32768
12310 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a  *3 + 3 = 98307..
12320 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f      */.    if( o
12330 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 29 7b  ffset > 98307 ){
12340 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
12350 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
12360 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
12370 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
12380 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65  ..    /* Compute
12390 20 69 6e 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62   in len the numb
123a0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
123b0 61 74 61 20 77 65 20 6e 65 65 64 20 74 6f 20 72  ata we need to r
123c0 65 61 64 20 69 6e 20 6f 72 64 65 72 0a 20 20 20  ead in order.   
123d0 20 2a 2a 20 74 6f 20 67 65 74 20 6e 46 69 65 6c   ** to get nFiel
123e0 64 20 74 79 70 65 20 76 61 6c 75 65 73 2e 20 20  d type values.  
123f0 6f 66 66 73 65 74 20 69 73 20 61 6e 20 75 70 70  offset is an upp
12400 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73  er bound on this
12410 2e 20 20 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46  .  But.    ** nF
12420 69 65 6c 64 20 6d 69 67 68 74 20 62 65 20 73 69  ield might be si
12430 67 6e 69 66 69 63 61 6e 74 6c 79 20 6c 65 73 73  gnificantly less
12440 20 74 68 61 6e 20 74 68 65 20 74 72 75 65 20 6e   than the true n
12450 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
12460 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 74  .    ** in the t
12470 61 62 6c 65 2c 20 61 6e 64 20 69 6e 20 74 68 61  able, and in tha
12480 74 20 63 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64  t case, 5*nField
12490 2b 33 20 6d 69 67 68 74 20 62 65 20 73 6d 61 6c  +3 might be smal
124a0 6c 65 72 20 74 68 61 6e 20 6f 66 66 73 65 74 2e  ler than offset.
124b0 0a 20 20 20 20 2a 2a 20 57 65 20 77 61 6e 74 20  .    ** We want 
124c0 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20  to minimize len 
124d0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69  in order to limi
124e0 74 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  t the size of th
124f0 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20  e memory.    ** 
12500 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65  allocation, espe
12510 63 69 61 6c 6c 79 20 69 66 20 61 20 63 6f 72 72  cially if a corr
12520 75 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c  upt database fil
12530 65 20 68 61 73 20 63 61 75 73 65 64 20 6f 66 66  e has caused off
12540 73 65 74 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  set.    ** to be
12550 20 6f 76 65 72 73 69 7a 65 64 2e 20 4f 66 66 73   oversized. Offs
12560 65 74 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f  et is limited to
12570 20 39 38 33 30 37 20 61 62 6f 76 65 2e 20 20 42   98307 above.  B
12580 75 74 20 39 38 33 30 37 20 6d 69 67 68 74 0a 20  ut 98307 might. 
12590 20 20 20 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65     ** still exce
125a0 65 64 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79  ed Robson memory
125b0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69   allocation limi
125c0 74 73 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69  ts on some confi
125d0 67 75 72 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a  gurations..    *
125e0 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 74 68 61  * On systems tha
125f0 74 20 63 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74  t cannot tolerat
12600 65 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61  e large memory a
12610 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65  llocations, nFie
12620 6c 64 2a 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69  ld*5+3.    ** wi
12630 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63  ll likely be muc
12640 68 20 73 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20  h smaller since 
12650 6e 46 69 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65  nField will like
12660 6c 79 20 62 65 20 6c 65 73 73 20 74 68 61 6e 0a  ly be less than.
12670 20 20 20 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e      ** 20 or so.
12680 20 20 54 68 69 73 20 69 6e 73 75 72 65 73 20 74    This insures t
12690 68 61 74 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72  hat Robson memor
126a0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d  y allocation lim
126b0 69 74 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e  its are.    ** n
126c0 6f 74 20 65 78 63 65 65 64 65 64 20 65 76 65 6e  ot exceeded even
126d0 20 66 6f 72 20 63 6f 72 72 75 70 74 20 64 61 74   for corrupt dat
126e0 61 62 61 73 65 20 66 69 6c 65 73 2e 0a 20 20 20  abase files..   
126f0 20 2a 2f 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46   */.    len = nF
12700 69 65 6c 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20  ield*5 + 3;.    
12710 69 66 28 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f  if( len > (int)o
12720 66 66 73 65 74 20 29 20 6c 65 6e 20 3d 20 28 69  ffset ) len = (i
12730 6e 74 29 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20  nt)offset;..    
12740 2f 2a 20 54 68 65 20 4b 65 79 46 65 74 63 68 28  /* The KeyFetch(
12750 29 20 6f 72 20 44 61 74 61 46 65 74 63 68 28 29  ) or DataFetch()
12760 20 61 62 6f 76 65 20 61 72 65 20 66 61 73 74 20   above are fast 
12770 61 6e 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65  and will get the
12780 20 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72   entire.    ** r
12790 65 63 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20  ecord header in 
127a0 6d 6f 73 74 20 63 61 73 65 73 2e 20 20 42 75 74  most cases.  But
127b0 20 74 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20   they will fail 
127c0 74 6f 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c  to get the compl
127d0 65 74 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72  ete.    ** recor
127e0 64 20 68 65 61 64 65 72 20 69 66 20 74 68 65 20  d header if the 
127f0 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f  record header do
12800 65 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20  es not fit on a 
12810 73 69 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20  single page.    
12820 2a 2a 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65  ** in the B-Tree
12830 2e 20 20 57 68 65 6e 20 74 68 61 74 20 68 61 70  .  When that hap
12840 70 65 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65  pens, use sqlite
12850 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
12860 65 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63  e() to.    ** ac
12870 71 75 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65  quire the comple
12880 74 65 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a  te header text..
12890 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21      */.    if( !
128a0 7a 52 65 63 20 26 26 20 61 76 61 69 6c 3c 6c 65  zRec && avail<le
128b0 6e 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e  n ){.      sMem.
128c0 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20  flags = 0;.     
128d0 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20   sMem.db = 0;.  
128e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
128f0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
12900 28 70 43 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20  (pCrsr, 0, len, 
12910 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d  pC->isIndex, &sM
12920 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  em);.      if( r
12930 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
12940 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
12950 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
12960 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20    }.      zData 
12970 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a  = sMem.z;.    }.
12980 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75      zEndHdr = (u
12990 38 20 2a 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b  8 *)&zData[len];
129a0 0a 20 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20  .    zIdx = (u8 
129b0 2a 29 26 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b  *)&zData[szHdr];
129c0 0a 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20 74 68  ..    /* Scan th
129d0 65 20 68 65 61 64 65 72 20 61 6e 64 20 75 73 65  e header and use
129e0 20 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74   it to fill in t
129f0 68 65 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 61  he aType[] and a
12a00 4f 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20  Offset[].    ** 
12a10 61 72 72 61 79 73 2e 20 20 61 54 79 70 65 5b 69  arrays.  aType[i
12a20 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74  ] will contain t
12a30 68 65 20 74 79 70 65 20 69 6e 74 65 67 65 72 20  he type integer 
12a40 66 6f 72 20 74 68 65 20 69 2d 74 68 0a 20 20 20  for the i-th.   
12a50 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61   ** column and a
12a60 4f 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63  Offset[i] will c
12a70 6f 6e 74 61 69 6e 20 74 68 65 20 6f 66 66 73 65  ontain the offse
12a80 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
12a90 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74  ning.    ** of t
12aa0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 74 68 65  he record to the
12ab0 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 64 61   start of the da
12ac0 74 61 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20  ta for the i-th 
12ad0 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20  column.    */.  
12ae0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69    for(i=0; i<nFi
12af0 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  eld; i++){.     
12b00 20 69 66 28 20 7a 49 64 78 3c 7a 45 6e 64 48 64   if( zIdx<zEndHd
12b10 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61 4f 66  r ){.        aOf
12b20 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74  fset[i] = offset
12b30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 49  ;.        if( zI
12b40 64 78 5b 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20  dx[0]<0x80 ){.  
12b50 20 20 20 20 20 20 20 20 74 20 3d 20 7a 49 64 78          t = zIdx
12b60 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7a  [0];.          z
12b70 49 64 78 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  Idx++;.        }
12b80 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
12b90 7a 49 64 78 20 2b 3d 20 73 71 6c 69 74 65 33 47  zIdx += sqlite3G
12ba0 65 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c  etVarint32(zIdx,
12bb0 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a   &t);.        }.
12bc0 20 20 20 20 20 20 20 20 61 54 79 70 65 5b 69 5d          aType[i]
12bd0 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 73 7a   = t;.        sz
12be0 46 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56  Field = sqlite3V
12bf0 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
12c00 28 74 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66  (t);.        off
12c10 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a  set += szField;.
12c20 20 20 20 20 20 20 20 20 69 66 28 20 6f 66 66 73          if( offs
12c30 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f  et<szField ){  /
12c40 2a 20 54 72 75 65 20 69 66 20 6f 66 66 73 65 74  * True if offset
12c50 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20   overflows */.  
12c60 20 20 20 20 20 20 20 20 7a 49 64 78 20 3d 20 26          zIdx = &
12c70 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20  zEndHdr[1];  /* 
12c80 46 6f 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f  Forces SQLITE_CO
12c90 52 52 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c  RRUPT return bel
12ca0 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ow */.          
12cb0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
12cc0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
12cd0 20 20 20 20 20 20 2f 2a 20 49 66 20 69 20 69 73        /* If i is
12ce0 20 6c 65 73 73 20 74 68 61 74 20 6e 46 69 65 6c   less that nFiel
12cf0 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 61 72  d, then there ar
12d00 65 20 66 65 77 65 72 20 66 69 65 6c 64 73 20 69  e fewer fields i
12d10 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a  n this.        *
12d20 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20 53 65  * record than Se
12d30 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64 69  tNumColumns indi
12d40 63 61 74 65 64 20 74 68 65 72 65 20 61 72 65 20  cated there are 
12d50 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20  columns in the. 
12d60 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 2e         ** table.
12d70 20 53 65 74 20 74 68 65 20 6f 66 66 73 65 74 20   Set the offset 
12d80 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20 63 6f  for any extra co
12d90 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65 6e  lumns not presen
12da0 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20  t in.        ** 
12db0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 30 2e  the record to 0.
12dc0 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f 64 65   This tells code
12dd0 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65 20   below to store 
12de0 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
12df0 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72  e.        ** for
12e00 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 73 74   the column inst
12e10 65 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c 69  ead of deseriali
12e20 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72 6f  zing a value fro
12e30 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  m the record..  
12e40 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
12e50 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b   aOffset[i] = 0;
12e60 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
12e70 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
12e80 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
12e90 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20  .    sMem.flags 
12ea0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20  = MEM_Null;..   
12eb0 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72   /* If we have r
12ec0 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20  ead more header 
12ed0 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f  data than was co
12ee0 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68  ntained in the h
12ef0 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72  eader,.    ** or
12f00 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
12f10 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
12f20 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74  pears to be past
12f30 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
12f40 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f      ** record, o
12f50 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
12f60 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
12f70 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66  ppears to be bef
12f80 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20  ore the end.    
12f90 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
12fa0 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64   (when all field
12fb0 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e  s present), then
12fc0 20 77 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c   we must be deal
12fd0 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74 68  ing .    ** with
12fe0 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
12ff0 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ase..    */.    
13000 69 66 28 20 28 7a 49 64 78 20 3e 20 7a 45 6e 64  if( (zIdx > zEnd
13010 48 64 72 29 20 7c 7c 20 28 6f 66 66 73 65 74 20  Hdr) || (offset 
13020 3e 20 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20  > payloadSize). 
13030 20 20 20 20 20 20 20 20 7c 7c 20 28 7a 49 64 78          || (zIdx
13040 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66  ==zEndHdr && off
13050 73 65 74 21 3d 70 61 79 6c 6f 61 64 53 69 7a 65  set!=payloadSize
13060 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  ) ){.      rc = 
13070 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
13080 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
13090 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
130a0 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47     }.  }..  /* G
130b0 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  et the column in
130c0 66 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20 61 4f  formation. If aO
130d0 66 66 73 65 74 5b 70 32 5d 20 69 73 20 6e 6f 6e  ffset[p2] is non
130e0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20 20 2a  -zero, then .  *
130f0 2a 20 64 65 73 65 72 69 61 6c 69 7a 65 20 74 68  * deserialize th
13100 65 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  e value from the
13110 20 72 65 63 6f 72 64 2e 20 49 66 20 61 4f 66 66   record. If aOff
13120 73 65 74 5b 70 32 5d 20 69 73 20 7a 65 72 6f 2c  set[p2] is zero,
13130 0a 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 72 65  .  ** then there
13140 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20   are not enough 
13150 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
13160 63 6f 72 64 20 74 6f 20 73 61 74 69 73 66 79 20  cord to satisfy 
13170 74 68 65 0a 20 20 2a 2a 20 72 65 71 75 65 73 74  the.  ** request
13180 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
13190 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 4e   set the value N
131a0 55 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69 66 20  ULL or to P4 if 
131b0 50 34 20 69 73 0a 20 20 2a 2a 20 61 20 70 6f 69  P4 is.  ** a poi
131c0 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d 20 6f 62  nter to a Mem ob
131d0 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  ject..  */.  if(
131e0 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 29 7b 0a   aOffset[p2] ){.
131f0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
13200 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20  SQLITE_OK );.   
13210 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20   if( zRec ){.   
13220 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68     /* This is th
13230 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68  e common case wh
13240 65 72 65 20 74 68 65 20 77 68 6f 6c 65 20 72 6f  ere the whole ro
13250 77 20 66 69 74 73 20 6f 6e 20 61 20 73 69 6e 67  w fits on a sing
13260 6c 65 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 20  le page */.     
13270 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28   VdbeMemRelease(
13280 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 73 71  pDest);.      sq
13290 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
132a0 65 74 28 28 75 38 20 2a 29 26 7a 52 65 63 5b 61  et((u8 *)&zRec[a
132b0 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61 54 79  Offset[p2]], aTy
132c0 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
132d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
132e0 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20   /* This branch 
132f0 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65  happens only whe
13300 6e 20 74 68 65 20 72 6f 77 20 6f 76 65 72 66 6c  n the row overfl
13310 6f 77 73 20 6f 6e 74 6f 20 6d 75 6c 74 69 70 6c  ows onto multipl
13320 65 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 20  e pages */.     
13330 20 74 20 3d 20 61 54 79 70 65 5b 70 32 5d 3b 0a   t = aType[p2];.
13340 20 20 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e        if( (pOp->
13350 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e  p5 & (OPFLAG_LEN
13360 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59  GTHARG|OPFLAG_TY
13370 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20  PEOFARG))!=0.   
13380 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26      && ((t>=12 &
13390 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28  & (t&1)==0) || (
133a0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
133b0 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29 0a  _TYPEOFARG)!=0).
133c0 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
133d0 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69   /* Content is i
133e0 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 20 74 68  rrelevant for th
133f0 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  e typeof() funct
13400 69 6f 6e 20 61 6e 64 20 66 6f 72 0a 20 20 20 20  ion and for.    
13410 20 20 20 20 2a 2a 20 74 68 65 20 6c 65 6e 67 74      ** the lengt
13420 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66  h(X) function if
13430 20 58 20 69 73 20 61 20 62 6c 6f 62 2e 20 20 53   X is a blob.  S
13440 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65  o we might as we
13450 6c 6c 20 75 73 65 0a 20 20 20 20 20 20 20 20 2a  ll use.        *
13460 2a 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  * bogus content 
13470 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61 64  rather than read
13480 69 6e 67 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d  ing content from
13490 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20 77 6f 72   disk.  NULL wor
134a0 6b 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 6f  ks.        ** fo
134b0 72 20 74 65 78 74 20 61 6e 64 20 62 6c 6f 62 20  r text and blob 
134c0 61 6e 64 20 77 68 61 74 65 76 65 72 20 69 73 20  and whatever is 
134d0 69 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53 69  in the payloadSi
134e0 7a 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20 20  ze64 variable.  
134f0 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f        ** will wo
13500 72 6b 20 66 6f 72 20 65 76 65 72 79 74 68 69 6e  rk for everythin
13510 67 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 20 20 20  g else. */.     
13520 20 20 20 7a 44 61 74 61 20 3d 20 74 3c 31 32 20     zData = t<12 
13530 3f 20 28 63 68 61 72 2a 29 26 70 61 79 6c 6f 61  ? (char*)&payloa
13540 64 53 69 7a 65 36 34 20 3a 20 30 3b 0a 20 20 20  dSize64 : 0;.   
13550 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13560 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56    len = sqlite3V
13570 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
13580 28 74 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  (t);.        sql
13590 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
135a0 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20  &sMem, pDest);. 
135b0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
135c0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
135d0 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73  ree(pCrsr, aOffs
135e0 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 20 70 43  et[p2], len,  pC
135f0 2d 3e 69 73 49 6e 64 65 78 2c 0a 20 20 20 20 20  ->isIndex,.     
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13620 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20  &sMem);.        
13630 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
13640 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
13650 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
13660 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
13670 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65       zData = sMe
13680 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  m.z;.      }.   
13690 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
136a0 72 69 61 6c 47 65 74 28 28 75 38 2a 29 7a 44 61  rialGet((u8*)zDa
136b0 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20  ta, t, pDest);. 
136c0 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e     }.    pDest->
136d0 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
136e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28    }else{.    if(
136f0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
13700 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73 71  _MEM ){.      sq
13710 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
13720 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70  lowCopy(pDest, p
13730 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d  Op->p4.pMem, MEM
13740 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d 65  _Static);.    }e
13750 6c 73 65 7b 0a 20 20 20 20 20 20 4d 65 6d 53 65  lse{.      MemSe
13760 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
13770 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
13780 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77  }.  }..  /* If w
13790 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  e dynamically al
137a0 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f  located space to
137b0 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28   hold the data (
137c0 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69  in the.  ** sqli
137d0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
137e0 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  ree() call above
137f0 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72 20  ) then transfer 
13800 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a  control of that.
13810 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79    ** dynamically
13820 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
13830 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44 65   over to the pDe
13840 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20  st structure..  
13850 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73  ** This prevents
13860 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a   a memory copy..
13870 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e    */.  if( sMem.
13880 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61  zMalloc ){.    a
13890 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73  ssert( sMem.z==s
138a0 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20  Mem.zMalloc );. 
138b0 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65     assert( !(pDe
138c0 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  st->flags & MEM_
138d0 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73 65  Dyn) );.    asse
138e0 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61  rt( !(pDest->fla
138f0 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
13900 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73  EM_Str)) || pDes
13910 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a  t->z==sMem.z );.
13920 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
13930 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c   &= ~(MEM_Ephem|
13940 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
13950 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d   pDest->flags |=
13960 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70   MEM_Term;.    p
13970 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a  Dest->z = sMem.z
13980 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61  ;.    pDest->zMa
13990 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c  lloc = sMem.zMal
139a0 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d  loc;.  }..  rc =
139b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
139c0 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44 65  akeWriteable(pDe
139d0 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  st);..op_column_
139e0 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  out:.  UPDATE_MA
139f0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
13a00 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
13a10 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
13a20 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st);.  break;.}.
13a30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69  ./* Opcode: Affi
13a40 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20  nity P1 P2 * P4 
13a50 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66  *.**.** Apply af
13a60 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61  finities to a ra
13a70 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74  nge of P2 regist
13a80 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74  ers starting wit
13a90 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  h P1..**.** P4 i
13aa0 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
13ab0 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
13ac0 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63   long. The nth c
13ad0 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
13ae0 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
13af0 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
13b00 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
13b10 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
13b20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72  the nth.** memor
13b30 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
13b40 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
13b50 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
13b60 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
13b70 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
13b80 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
13b90 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63  lied */.  char c
13ba0 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aff;            
13bb0 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63     /* A single c
13bc0 68 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69  haracter of affi
13bd0 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  nity */..  zAffi
13be0 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
13bf0 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
13c00 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
13c10 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b  sert( zAffinity[
13c20 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20  pOp->p2]==0 );. 
13c30 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
13c40 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28  p->p1];.  while(
13c50 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69   (cAff = *(zAffi
13c60 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20  nity++))!=0 ){. 
13c70 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20     assert( pIn1 
13c80 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e  <= &p->aMem[p->n
13c90 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  Mem] );.    asse
13ca0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
13cb0 49 6e 31 29 20 29 3b 0a 20 20 20 20 45 78 70 61  In1) );.    Expa
13cc0 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
13cd0 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
13ce0 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f  pIn1, cAff, enco
13cf0 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b  ding);.    pIn1+
13d00 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
13d10 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  }../* Opcode: Ma
13d20 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50  keRecord P1 P2 P
13d30 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e  3 P4 *.**.** Con
13d40 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
13d50 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
13d60 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
13d70 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
13d80 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
13d90 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
13da0 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
13db0 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
13dc0 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
13dd0 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
13de0 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
13df0 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
13e00 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
13e10 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
13e20 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
13e30 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20  e nth character 
13e40 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
13e50 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
13e60 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
13e70 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
13e80 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a  ed for the nth.*
13e90 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69  * field of the i
13ea0 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20  ndex key..**.** 
13eb0 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d  The mapping from
13ec0 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66   character to af
13ed0 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20  finity is given 
13ee0 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  by the SQLITE_AF
13ef0 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66  F_.** macros def
13f00 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e  ined in sqliteIn
13f10 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  t.h..**.** If P4
13f20 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c   is NULL then al
13f30 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68  l index fields h
13f40 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79  ave the affinity
13f50 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NONE..*/.case O
13f60 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a  P_MakeRecord: {.
13f70 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64    u8 *zNewRecord
13f80 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75  ;        /* A bu
13f90 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65  ffer to hold the
13fa0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65   data for the ne
13fb0 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  w record */.  Me
13fc0 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20  m *pRec;        
13fd0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
13fe0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20  record */.  u64 
13ff0 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  nData;          
14000 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14010 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
14020 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64  ace */.  int nHd
14030 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
14040 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
14050 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
14060 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  ce */.  i64 nByt
14070 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
14080 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71  * Data space req
14090 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72  uired for this r
140a0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
140b0 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20  Zero;           
140c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
140d0 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
140e0 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
140f0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72  rd */.  int nVar
14100 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
14110 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
14120 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f  s in a varint */
14130 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79  .  u32 serial_ty
14140 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70  pe;       /* Typ
14150 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d  e field */.  Mem
14160 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20   *pData0;       
14170 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65      /* First fie
14180 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65  ld to be combine
14190 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  d into the recor
141a0 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73  d */.  Mem *pLas
141b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
141c0 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74   Last field of t
141d0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
141e0 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
141f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14200 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
14210 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61   record */.  cha
14220 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
14230 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
14240 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ity string for t
14250 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
14260 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  nt file_format; 
14270 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f        /* File fo
14280 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20  rmat to use for 
14290 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
142a0 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
142b0 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
142c0 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
142d0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  [] */.  int len;
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
142f0 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69  * Length of a fi
14300 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  eld */..  /* Ass
14310 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  uming the record
14320 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c   contains N fiel
14330 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66  ds, the record f
14340 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a  ormat looks.  **
14350 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a   like this:.  **
14360 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
14370 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14380 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14390 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
143a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
143b0 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c   ** | hdr-size |
143c0 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31   type 0 | type 1
143d0 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d   | ... | type N-
143e0 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20  1 | data0 | ... 
143f0 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20  | data N-1 | .  
14400 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
14410 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14420 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14430 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14440 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
14450 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73  .  ** Data(0) is
14460 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
14470 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31  ster P1.  Data(1
14480 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67  ) comes from reg
14490 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20  ister P1+1.  ** 
144a0 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20  and so froth..  
144b0 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70  **.  ** Each typ
144c0 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72  e field is a var
144d0 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67  int representing
144e0 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65   the serial type
144f0 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f   of the .  ** co
14500 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61  rresponding data
14510 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71   element (see sq
14520 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14530 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a  ype()). The.  **
14540 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20   hdr-size field 
14550 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74  is also a varint
14560 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
14570 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
14580 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20  ginning.  ** of 
14590 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61  the record to da
145a0 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74  ta0..  */.  nDat
145b0 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
145c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
145d0 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
145e0 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20  */.  nHdr = 0;  
145f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14600 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
14610 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
14620 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20  nZero = 0;      
14630 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14640 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
14650 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
14660 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  ord */.  nField 
14670 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66  = pOp->p1;.  zAf
14680 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
14690 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46  .z;.  assert( nF
146a0 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ield>0 && pOp->p
146b0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
146c0 46 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  Field<=p->nMem+1
146d0 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
146e0 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
146f0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
14700 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
14710 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
14720 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
14730 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
14740 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
14750 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
14760 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
14770 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
14780 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
14790 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
147a0 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
147b0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
147c0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
147d0 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
147e0 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
147f0 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
14800 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
14810 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
14820 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
14830 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
14840 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
14850 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
14860 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30   for(pRec=pData0
14870 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70  ; pRec<=pLast; p
14880 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  Rec++){.    asse
14890 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
148a0 52 65 63 29 20 29 3b 0a 20 20 20 20 69 66 28 20  Rec) );.    if( 
148b0 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20  zAffinity ){.   
148c0 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
148d0 28 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79  (pRec, zAffinity
148e0 5b 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65  [pRec-pData0], e
148f0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a  ncoding);.    }.
14900 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
14910 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20  ags&MEM_Zero && 
14920 70 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20  pRec->n>0 ){.   
14930 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
14940 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63  mExpandBlob(pRec
14950 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72  );.    }.    ser
14960 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
14970 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
14980 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
14990 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73  at);.    len = s
149a0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
149b0 54 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74  TypeLen(serial_t
149c0 79 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20  ype);.    nData 
149d0 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72  += len;.    nHdr
149e0 20 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e   += sqlite3Varin
149f0 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
14a00 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
14a10 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
14a20 6f 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e  o ){.      /* On
14a30 6c 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c  ly pure zero-fil
14a40 6c 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65  led BLOBs can be
14a50 20 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f   input to this O
14a60 70 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20  pcode..      ** 
14a70 57 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  We do not allow 
14a80 62 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65  blobs with a pre
14a90 66 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66  fix and a zero-f
14aa0 69 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20  illed tail. */. 
14ab0 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52       nZero += pR
14ac0 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
14ad0 20 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29   }else if( len )
14ae0 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20  {.      nZero = 
14af0 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  0;.    }.  }..  
14b00 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69  /* Add the initi
14b10 61 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74  al header varint
14b20 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73   and total the s
14b30 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d  ize */.  nHdr +=
14b40 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74   nVarint = sqlit
14b50 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
14b60 29 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74  );.  if( nVarint
14b70 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65  <sqlite3VarintLe
14b80 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e  n(nHdr) ){.    n
14b90 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79  Hdr++;.  }.  nBy
14ba0 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d  te = nHdr+nData-
14bb0 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79  nZero;.  if( nBy
14bc0 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
14bd0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
14be0 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
14bf0 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f  oo_big;.  }..  /
14c00 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
14c10 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
14c20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72  has a buffer lar
14c30 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f  ge enough to sto
14c40 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77  re .  ** the new
14c50 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74   record. The out
14c60 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f  put register (pO
14c70 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c  p->p3) is not al
14c80 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65  lowed to.  ** be
14c90 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75   one of the inpu
14ca0 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63  t registers (bec
14cb0 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ause the followi
14cc0 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20  ng call to.  ** 
14cd0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
14ce0 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62  ow() could clobb
14cf0 65 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66  er the value bef
14d00 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e  ore it is used).
14d10 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
14d20 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
14d30 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c  Out, (int)nByte,
14d40 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
14d50 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
14d60 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
14d70 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
14d80 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
14d90 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
14da0 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
14db0 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70  , nHdr);.  for(p
14dc0 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
14dd0 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
14de0 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
14df0 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
14e00 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
14e10 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
14e20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74    i += putVarint
14e30 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  32(&zNewRecord[i
14e40 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  ], serial_type);
14e50 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20        /* serial 
14e60 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f  type */.  }.  fo
14e70 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
14e80 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
14e90 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20  ++){  /* serial 
14ea0 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d  data */.    i +=
14eb0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
14ec0 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
14ed0 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74  d[i], (int)(nByt
14ee0 65 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f  e-i), pRec,file_
14ef0 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61  format);.  }.  a
14f00 73 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20  ssert( i==nByte 
14f10 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
14f20 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
14f30 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
14f40 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
14f50 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
14f60 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20  lags = MEM_Blob 
14f70 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75  | MEM_Dyn;.  pOu
14f80 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69  t->xDel = 0;.  i
14f90 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
14fa0 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
14fb0 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
14fc0 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
14fd0 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ro;.  }.  pOut->
14fe0 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
14ff0 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
15000 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
15010 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78  converted to tex
15020 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f  t */.  REGISTER_
15030 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
15040 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
15050 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
15060 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
15070 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
15080 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
15090 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
150a0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
150b0 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
150c0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
150d0 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
150e0 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
150f0 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
15100 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
15110 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
15120 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
15130 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
15140 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
15150 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42   i64 nEntry;.  B
15160 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
15170 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70  .  pCrsr = p->ap
15180 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43  Csr[pOp->p1]->pC
15190 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57  ursor;.  if( ALW
151a0 41 59 53 28 70 43 72 73 72 29 20 29 7b 0a 20 20  AYS(pCrsr) ){.  
151b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
151c0 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20  reeCount(pCrsr, 
151d0 26 6e 45 6e 74 72 79 29 3b 0a 20 20 7d 65 6c 73  &nEntry);.  }els
151e0 65 7b 0a 20 20 20 20 6e 45 6e 74 72 79 20 3d 20  e{.    nEntry = 
151f0 30 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  0;.  }.  pOut->u
15200 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62  .i = nEntry;.  b
15210 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
15220 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70  /* Opcode: Savep
15230 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a  oint P1 * * P4 *
15240 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c  .**.** Open, rel
15250 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b  ease or rollback
15260 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e   the savepoint n
15270 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65  amed by paramete
15280 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a  r P4, depending.
15290 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20  ** on the value 
152a0 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61  of P1. To open a
152b0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20   new savepoint, 
152c0 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73  P1==0. To releas
152d0 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a  e (commit) an.**
152e0 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
152f0 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74  int, P1==1, or t
15300 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78  o rollback an ex
15310 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
15320 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20   P1==2..*/.case 
15330 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a  OP_Savepoint: {.
15340 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
15350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15360 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31    /* Value of P1
15370 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68   operand */.  ch
15380 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
15390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
153a0 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69   Name of savepoi
153b0 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d  nt */.  int nNam
153c0 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  e;.  Savepoint *
153d0 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e  pNew;.  Savepoin
153e0 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  t *pSavepoint;. 
153f0 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70   Savepoint *pTmp
15400 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  ;.  int iSavepoi
15410 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20  nt;.  int ii;.. 
15420 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
15430 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34   zName = pOp->p4
15440 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74  .z;..  /* Assert
15450 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72   that the p1 par
15460 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e  ameter is valid.
15470 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68   Also that if th
15480 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20  ere is no open. 
15490 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c   ** transaction,
154a0 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e   then there cann
154b0 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f  ot be any savepo
154c0 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73  ints. .  */.  as
154d0 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
154e0 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61  oint==0 || db->a
154f0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
15500 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41    assert( p1==SA
15510 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70  VEPOINT_BEGIN||p
15520 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
15530 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EASE||p1==SAVEPO
15540 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a  INT_ROLLBACK );.
15550 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
15560 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e  avepoint || db->
15570 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
15580 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61  epoint==0 );.  a
15590 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
155a0 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
155b0 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56  ;..  if( p1==SAV
155c0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a  EPOINT_BEGIN ){.
155d0 20 20 20 20 69 66 28 20 64 62 2d 3e 77 72 69 74      if( db->writ
155e0 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20  eVdbeCnt>0 ){.  
155f0 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76      /* A new sav
15600 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65  epoint cannot be
15610 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72   created if ther
15620 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
15630 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61  te .      ** sta
15640 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70  tements (i.e. op
15650 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e  en read/write in
15660 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68  cremental blob h
15670 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a  andles)..      *
15680 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
15690 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
156a0 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
156b0 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74  t open savepoint
156c0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
156d0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
156e0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
156f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
15700 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
15710 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
15720 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
15730 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
15740 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
15750 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
15760 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
15770 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
15780 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
15790 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
157a0 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
157b0 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
157c0 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
157d0 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
157e0 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
157f0 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
15800 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
15810 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
15820 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
15830 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
15840 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
15850 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
15860 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
15870 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
15880 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
15890 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
158a0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
158b0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
158c0 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
158d0 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158f0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
15900 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
15910 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
15920 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
15930 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
15940 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
15950 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
15960 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
15970 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
15980 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
15990 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
159a0 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
159b0 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
159c0 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
159d0 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
159e0 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
159f0 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
15a00 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
15a10 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
15a20 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
15a30 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
15a40 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
15a50 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
15a60 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
15a70 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
15a80 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
15a90 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
15aa0 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
15ab0 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
15ac0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
15ad0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
15ae0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
15af0 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
15b00 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
15b10 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
15b20 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
15b30 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20      }.    .     
15b40 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
15b50 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
15b60 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
15b70 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
15b80 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
15b90 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
15ba0 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
15bb0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
15bc0 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
15bd0 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
15be0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
15bf0 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20  dCons;.      }. 
15c00 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
15c10 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30    iSavepoint = 0
15c20 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74  ;..    /* Find t
15c30 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69  he named savepoi
15c40 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20  nt. If there is 
15c50 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
15c60 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a  t, then an.    *
15c70 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  * an error is re
15c80 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
15c90 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28  er.  */.    for(
15ca0 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
15cb0 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
15cc0 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65  nt; .      pSave
15cd0 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33  point && sqlite3
15ce0 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69  StrICmp(pSavepoi
15cf0 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  nt->zName, zName
15d00 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  );.      pSavepo
15d10 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
15d20 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20  ->pNext.    ){. 
15d30 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b       iSavepoint+
15d40 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
15d50 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a   !pSavepoint ){.
15d60 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
15d70 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
15d80 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68  sg, db, "no such
15d90 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c   savepoint: %s",
15da0 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72   zName);.      r
15db0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
15dc0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
15dd0 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74  db->writeVdbeCnt
15de0 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f  >0 && p1==SAVEPO
15df0 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
15e00 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f       /* It is no
15e10 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65  t possible to re
15e20 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
15e30 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68   savepoint if th
15e40 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a  ere are .      *
15e50 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20 73  * active write s
15e60 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20  tatements..     
15e70 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
15e80 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
15e90 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20  ErrMsg, db, .   
15ea0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 72 65 6c       "cannot rel
15eb0 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d  ease savepoint -
15ec0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
15ed0 69 6e 20 70 72 6f 67 72 65 73 73 22 0a 20 20 20  in progress".   
15ee0 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d     );.      rc =
15ef0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
15f00 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20    }else{..      
15f10 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65  /* Determine whe
15f20 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73  ther or not this
15f30 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
15f40 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  n savepoint. If 
15f50 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  so,.      ** and
15f60 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
15f70 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e  SE command, then
15f80 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
15f90 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20  nsaction .      
15fa0 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e  ** is committed.
15fb0 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20   .      */.     
15fc0 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69   int isTransacti
15fd0 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  on = pSavepoint-
15fe0 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d  >pNext==0 && db-
15ff0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
16000 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69  vepoint;.      i
16010 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  f( isTransaction
16020 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
16030 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
16040 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73       if( (rc = s
16050 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
16060 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
16070 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
16080 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
16090 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
160a0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
160b0 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  mit = 1;.       
160c0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
160d0 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
160e0 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
160f0 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
16100 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
16110 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
16120 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
16130 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
16140 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
16150 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
16160 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
16170 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
16180 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20  avepoint = 0;.  
16190 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63        rc = p->rc
161a0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
161b0 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
161c0 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
161d0 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
161e0 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  - 1;.        if(
161f0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
16200 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20  OLLBACK ){.     
16210 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
16220 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
16230 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
16240 6c 69 74 65 33 42 74 72 65 65 54 72 69 70 41 6c  lite3BtreeTripAl
16250 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62  lCursors(db->aDb
16260 5b 69 69 5d 2e 70 42 74 2c 20 53 51 4c 49 54 45  [ii].pBt, SQLITE
16270 5f 41 42 4f 52 54 29 3b 0a 20 20 20 20 20 20 20  _ABORT);.       
16280 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
16290 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b         for(ii=0;
162a0 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
162b0 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63  +){.          rc
162c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
162d0 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62  avepoint(db->aDb
162e0 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53  [ii].pBt, p1, iS
162f0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
16300 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
16310 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
16320 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
16330 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
16340 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
16350 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
16360 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
16370 4f 4c 4c 42 41 43 4b 20 26 26 20 28 64 62 2d 3e  OLLBACK && (db->
16380 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 49 6e 74  flags&SQLITE_Int
16390 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 20 29  ernChanges)!=0 )
163a0 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
163b0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
163c0 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
163d0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
163e0 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
163f0 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
16400 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  );.          db-
16410 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c  >flags = (db->fl
16420 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74  ags | SQLITE_Int
16430 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20  ernChanges);.   
16440 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
16450 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72   .      /* Regar
16460 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
16470 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
16480 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20  SE or ROLLBACK, 
16490 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20  destroy all .   
164a0 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73     ** savepoints
164b0 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f   nested inside o
164c0 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  f the savepoint 
164d0 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
164e0 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c  n. */.      whil
164f0 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  e( db->pSavepoin
16500 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b  t!=pSavepoint ){
16510 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20  .        pTmp = 
16520 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
16530 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
16540 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70  epoint = pTmp->p
16550 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
16560 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
16570 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64  pTmp);.        d
16580 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
16590 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
165a0 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45  /* If it is a RE
165b0 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74  LEASE, then dest
165c0 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e  roy the savepoin
165d0 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
165e0 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f   on .      ** to
165f0 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f  o. If it is a RO
16600 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20  LLBACK TO, then 
16610 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  set the number o
16620 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20  f deferred .    
16630 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20    ** constraint 
16640 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65  violations prese
16650 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
16660 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  se to the value 
16670 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20  stored.      ** 
16680 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69  when the savepoi
16690 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20  nt was created. 
166a0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31   */.      if( p1
166b0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
166c0 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ASE ){.        a
166d0 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e  ssert( pSavepoin
166e0 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t==db->pSavepoin
166f0 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  t );.        db-
16700 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53  >pSavepoint = pS
16710 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b  avepoint->pNext;
16720 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
16730 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65  DbFree(db, pSave
16740 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
16750 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
16760 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  on ){.          
16770 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
16780 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
16790 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
167a0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
167b0 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
167c0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
167d0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69        }..      i
167e0 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
167f0 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  n ){.        rc 
16800 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
16810 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69  epoint(db, p1, i
16820 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
16830 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
16840 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
16850 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
16860 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
16870 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   }..  break;.}..
16880 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43  /* Opcode: AutoC
16890 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20  ommit P1 P2 * * 
168a0 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
168b0 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f  database auto-co
168c0 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20  mmit flag to P1 
168d0 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20  (1 or 0). If P2 
168e0 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a  is true, roll.**
168f0 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e   back any curren
16900 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65  tly active btree
16910 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49   transactions. I
16920 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20  f there are any 
16930 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61  active.** VMs (a
16940 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f  part from this o
16950 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c  ne), then a ROLL
16960 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43  BACK fails.  A C
16970 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a  OMMIT fails if.*
16980 2a 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  * there are acti
16990 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f  ve writing VMs o
169a0 72 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61  r active VMs tha
169b0 74 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63  t use shared cac
169c0 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  he..**.** This i
169d0 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65  nstruction cause
169e0 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74  s the VM to halt
169f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74  ..*/.case OP_Aut
16a00 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74  oCommit: {.  int
16a10 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
16a20 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62  it;.  int iRollb
16a30 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f  ack;.  int turnO
16a40 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64 41  nAC;..  desiredA
16a50 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d  utoCommit = pOp-
16a60 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b  >p1;.  iRollback
16a70 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75   = pOp->p2;.  tu
16a80 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65 64  rnOnAC = desired
16a90 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64  AutoCommit && !d
16aa0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  b->autoCommit;. 
16ab0 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
16ac0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
16ad0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
16ae0 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
16af0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
16b00 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c  mmit==1 || iRoll
16b10 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73  back==0 );.  ass
16b20 65 72 74 28 20 64 62 2d 3e 61 63 74 69 76 65 56  ert( db->activeV
16b30 64 62 65 43 6e 74 3e 30 20 29 3b 20 20 2f 2a 20  dbeCnt>0 );  /* 
16b40 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e  At least this on
16b50 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a  e VM is active *
16b60 2f 0a 0a 23 69 66 20 30 0a 20 20 69 66 28 20 74  /..#if 0.  if( t
16b70 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c  urnOnAC && iRoll
16b80 62 61 63 6b 20 26 26 20 64 62 2d 3e 61 63 74 69  back && db->acti
16b90 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20  veVdbeCnt>1 ){. 
16ba0 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
16bb0 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
16bc0 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20  ents a ROLLBACK 
16bd0 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
16be0 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72  e.    ** still r
16bf0 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72  unning, and a tr
16c00 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
16c10 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65  ive, return an e
16c20 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a  rror indicating.
16c30 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20      ** that the 
16c40 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
16c50 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
16c60 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
16c70 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
16c80 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
16c90 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72  nnot rollback tr
16ca0 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20  ansaction - ".  
16cb0 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
16cc0 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
16cd0 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  s");.    rc = SQ
16ce0 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
16cf0 73 65 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  se.#endif.  if( 
16d00 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f  turnOnAC && !iRo
16d10 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 77 72  llback && db->wr
16d20 69 74 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a  iteVdbeCnt>0 ){.
16d30 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
16d40 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
16d50 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61  ments a COMMIT a
16d60 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  nd other VMs are
16d70 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20   writing.    ** 
16d80 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
16d90 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
16da0 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
16db0 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
16dc0 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  t. .    */.    s
16dd0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
16de0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
16df0 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
16e00 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a  transaction - ".
16e10 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
16e20 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
16e30 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20  ess");.    rc = 
16e40 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
16e50 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64  else if( desired
16e60 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e  AutoCommit!=db->
16e70 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
16e80 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20    if( iRollback 
16e90 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
16ea0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
16eb0 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73  it==1 );.      s
16ec0 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
16ed0 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f  l(db, SQLITE_ABO
16ee0 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20  RT_ROLLBACK);.  
16ef0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
16f00 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  it = 1;.    }els
16f10 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69  e if( (rc = sqli
16f20 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
16f30 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
16f40 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76   ){.      goto v
16f50 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
16f60 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
16f70 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
16f80 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  8)desiredAutoCom
16f90 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73  mit;.      if( s
16fa0 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
16fb0 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
16fc0 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20  {.        p->pc 
16fd0 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62  = pc;.        db
16fe0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
16ff0 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74  u8)(1-desiredAut
17000 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20  oCommit);.      
17010 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
17020 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
17030 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
17040 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20  turn;.      }.  
17050 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
17060 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d  db->nStatement==
17070 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
17080 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
17090 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  db);.    if( p->
170a0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
170b0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
170c0 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c  TE_DONE;.    }el
170d0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  se{.      rc = S
170e0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
170f0 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65   }.    goto vdbe
17100 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65  _return;.  }else
17110 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
17120 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
17130 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20  sg, db,.        
17140 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  (!desiredAutoCom
17150 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61  mit)?"cannot sta
17160 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
17170 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
17180 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20  ction":(.       
17190 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61   (iRollback)?"ca
171a0 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20  nnot rollback - 
171b0 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
171c0 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20  s active":.     
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
171e0 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e  annot commit - n
171f0 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
17200 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20   active"));.    
17210 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53       .    rc = S
17220 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
17230 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
17240 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74  Opcode: Transact
17250 69 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ion P1 P2 * * *.
17260 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72  **.** Begin a tr
17270 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20  ansaction.  The 
17280 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64 73  transaction ends
17290 20 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20 6f   when a Commit o
172a0 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70  r Rollback.** op
172b0 63 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e 74 65  code is encounte
172c0 72 65 64 2e 20 20 44 65 70 65 6e 64 69 6e 67 20  red.  Depending 
172d0 6f 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  on the ON CONFLI
172e0 43 54 20 73 65 74 74 69 6e 67 2c 20 74 68 65 0a  CT setting, the.
172f0 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  ** transaction m
17300 69 67 68 74 20 61 6c 73 6f 20 62 65 20 72 6f 6c  ight also be rol
17310 6c 65 64 20 62 61 63 6b 20 69 66 20 61 6e 20 65  led back if an e
17320 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
17330 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  red..**.** P1 is
17340 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
17350 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
17360 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61  on which the tra
17370 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73  nsaction is.** s
17380 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30  tarted.  Index 0
17390 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
173a0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69  abase file and i
173b0 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a  ndex 1 is the.**
173c0 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74   file used for t
173d0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
173e0 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f    Indices of 2 o
173f0 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20  r more are used 
17400 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20  for.** attached 
17410 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a  databases..**.**
17420 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65   If P2 is non-ze
17430 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65  ro, then a write
17440 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
17450 73 74 61 72 74 65 64 2e 20 20 41 20 52 45 53 45  started.  A RESE
17460 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20  RVED lock is.** 
17470 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20  obtained on the 
17480 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68  database file wh
17490 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
174a0 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
174b0 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20  d.  No.** other 
174c0 70 72 6f 63 65 73 73 20 63 61 6e 20 73 74 61 72  process can star
174d0 74 20 61 6e 6f 74 68 65 72 20 77 72 69 74 65 20  t another write 
174e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c  transaction whil
174f0 65 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  e this transacti
17500 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61  on is.** underwa
17510 79 2e 20 20 53 74 61 72 74 69 6e 67 20 61 20 77  y.  Starting a w
17520 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
17530 20 61 6c 73 6f 20 63 72 65 61 74 65 73 20 61 20   also creates a 
17540 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
17550 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20 74 72 61  . A.** write tra
17560 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65  nsaction must be
17570 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20   started before 
17580 61 6e 79 20 63 68 61 6e 67 65 73 20 63 61 6e 20  any changes can 
17590 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a  be made to the.*
175a0 2a 20 64 61 74 61 62 61 73 65 2e 20 20 49 66 20  * database.  If 
175b0 50 32 20 69 73 20 32 20 6f 72 20 67 72 65 61 74  P2 is 2 or great
175c0 65 72 20 74 68 65 6e 20 61 6e 20 45 58 43 4c 55  er then an EXCLU
175d0 53 49 56 45 20 6c 6f 63 6b 20 69 73 20 61 6c 73  SIVE lock is als
175e0 6f 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 6f 6e  o obtained.** on
175f0 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a   the file..**.**
17600 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e   If a write-tran
17610 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
17620 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e  ed and the Vdbe.
17630 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
17640 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20  flag is.** true 
17650 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65  (this flag is se
17660 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61  t if the Vdbe ma
17670 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68  y modify more th
17680 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d  an one row and m
17690 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41  ay.** throw an A
176a0 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c  BORT exception),
176b0 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
176c0 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73  nsaction may als
176d0 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20  o be opened..** 
176e0 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c  More specificall
176f0 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  y, a statement t
17700 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70  ransaction is op
17710 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74  ened iff the dat
17720 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
17730 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ion is currently
17740 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d   not in autocomm
17750 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74  it mode, or if t
17760 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a  here are other.*
17770 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  * active stateme
17780 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74  nts. A statement
17790 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c   transaction all
177a0 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65 73 20  ows the changes 
177b0 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20  made by this.** 
177c0 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65  VDBE to be rolle
177d0 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20  d back after an 
177e0 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61  error without ha
177f0 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63  ving to roll bac
17800 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  k the.** entire 
17810 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20  transaction. If 
17820 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  no error is enco
17830 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61  untered, the sta
17840 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
17850 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d  on.** will autom
17860 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20  atically commit 
17870 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61  when the VDBE ha
17880 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  lts..**.** If P2
17890 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
178a0 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62   read-lock is ob
178b0 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
178c0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a  tabase file..*/.
178d0 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
178e0 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a  ion: {.  Btree *
178f0 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
17900 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
17910 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
17920 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
17930 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
17940 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70  bMask)1)<<pOp->p
17950 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20  1))!=0 );.  pBt 
17960 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
17970 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70  1].pBt;..  if( p
17980 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  Bt ){.    rc = s
17990 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
179a0 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e  Trans(pBt, pOp->
179b0 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  p2);.    if( rc=
179c0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
179d0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
179e0 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
179f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17a00 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
17a10 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
17a20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
17a30 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
17a40 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
17a50 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20  _error;.    }.. 
17a60 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26     if( pOp->p2 &
17a70 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  & p->usesStmtJou
17a80 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64  rnal .     && (d
17a90 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
17aa0 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56 64   || db->activeVd
17ab0 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b  beCnt>1) .    ){
17ac0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
17ad0 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
17ae0 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20  rans(pBt) );.   
17af0 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65     if( p->iState
17b00 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ment==0 ){.     
17b10 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
17b20 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20  Statement>=0 && 
17b30 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d  db->nSavepoint>=
17b40 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  0 );.        db-
17b50 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a  >nStatement++; .
17b60 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74          p->iStat
17b70 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  ement = db->nSav
17b80 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74  epoint + db->nSt
17b90 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d  atement;.      }
17ba0 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ..      rc = sql
17bb0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
17bc0 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
17bd0 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65  BEGIN, p->iState
17be0 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69  ment-1);.      i
17bf0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
17c00 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
17c10 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
17c20 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69  inStmt(pBt, p->i
17c30 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20  Statement);.    
17c40 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74    }..      /* St
17c50 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ore the current 
17c60 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74  value of the dat
17c70 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65  abase handles de
17c80 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
17c90 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74  t.      ** count
17ca0 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 74 65  er. If the state
17cb0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
17cc0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c   needs to be rol
17cd0 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20  led back,.      
17ce0 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
17cf0 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65  this counter nee
17d00 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65  ds to be restore
17d10 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20  d too.  */.     
17d20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73   p->nStmtDefCons
17d30 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
17d40 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Cons;.    }.  }.
17d50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
17d60 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69  pcode: ReadCooki
17d70 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
17d80 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65  *.** Read cookie
17d90 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20   number P3 from 
17da0 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
17db0 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65  write it into re
17dc0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33  gister P2..** P3
17dd0 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
17de0 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d  a version.  P3==
17df0 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
17e00 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d  e format..** P3=
17e10 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
17e20 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
17e30 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  e size, and so f
17e40 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a  orth.  P1==0 is.
17e50 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
17e60 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
17e70 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
17e80 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
17e90 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72   store.** tempor
17ea0 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
17eb0 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20  * There must be 
17ec0 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74  a read-lock on t
17ed0 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74  he database (eit
17ee0 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
17ef0 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61  n.** must be sta
17f00 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75  rted or there mu
17f10 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75  st be an open cu
17f20 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20  rsor) before.** 
17f30 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69  executing this i
17f40 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
17f50 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69  ase OP_ReadCooki
17f60 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
17f70 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
17f80 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69  lease */.  int i
17f90 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Meta;.  int iDb;
17fa0 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a  .  int iCookie;.
17fb0 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
17fc0 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f  ;.  iCookie = pO
17fd0 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
17fe0 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f   pOp->p3<SQLITE_
17ff0 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
18000 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
18010 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
18020 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
18030 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30  >aDb[iDb].pBt!=0
18040 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
18050 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
18060 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62  (yDbMask)1)<<iDb
18070 29 29 21 3d 30 20 29 3b 0a 0a 20 20 73 71 6c 69  ))!=0 );..  sqli
18080 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28  te3BtreeGetMeta(
18090 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
180a0 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20  , iCookie, (u32 
180b0 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75  *)&iMeta);.  pOu
180c0 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a  t->u.i = iMeta;.
180d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
180e0 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65  pcode: SetCookie
180f0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
18100 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f  .** Write the co
18110 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
18120 72 20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65  r P3 (interprete
18130 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29  d as an integer)
18140 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20  .** into cookie 
18150 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74  number P2 of dat
18160 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31  abase P1.  P2==1
18170 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76   is the schema v
18180 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d  ersion.  .** P2=
18190 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
181a0 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33  se format. P2==3
181b0 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e   is the recommen
181c0 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20  ded pager cache 
181d0 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  .** size, and so
181e0 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
181f0 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
18200 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
18210 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61  =1 is the .** da
18220 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
18230 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72   to store tempor
18240 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
18250 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  * A transaction 
18260 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
18270 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67  before executing
18280 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
18290 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b  .case OP_SetCook
182a0 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69  ie: {       /* i
182b0 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b  n3 */.  Db *pDb;
182c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
182d0 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p2<SQLITE_N_BTRE
182e0 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65  E_META );.  asse
182f0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
18300 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
18310 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
18320 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
18330 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
18340 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
18350 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
18360 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
18370 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
18380 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
18390 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
183a0 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  ld(db, pOp->p1, 
183b0 30 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26  0) );.  pIn3 = &
183c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
183d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
183e0 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b  ntegerify(pIn3);
183f0 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61  .  /* See note a
18400 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74  bout index shift
18410 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f  ing on OP_ReadCo
18420 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73  okie */.  rc = s
18430 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74  qlite3BtreeUpdat
18440 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20  eMeta(pDb->pBt, 
18450 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49  pOp->p2, (int)pI
18460 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20  n3->u.i);.  if( 
18470 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53  pOp->p2==BTREE_S
18480 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b  CHEMA_VERSION ){
18490 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65  .    /* When the
184a0 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
184b0 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74  hanges, record t
184c0 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e  he new cookie in
184d0 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20  ternally */.    
184e0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63  pDb->pSchema->sc
184f0 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69  hema_cookie = (i
18500 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn3->u.i;.  
18510 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53    db->flags |= S
18520 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
18530 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ges;.  }else if(
18540 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f   pOp->p2==BTREE_
18550 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20  FILE_FORMAT ){. 
18560 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61     /* Record cha
18570 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65  nges in the file
18580 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70   format */.    p
18590 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
185a0 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70  e_format = (u8)p
185b0 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20  In3->u.i;.  }.  
185c0 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29  if( pOp->p1==1 )
185d0 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64  {.    /* Invalid
185e0 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64  ate all prepared
185f0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e   statements when
18600 65 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61  ever the TEMP da
18610 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63  tabase.    ** sc
18620 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e  hema is changed.
18630 20 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a    Ticket #1644 *
18640 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  /.    sqlite3Exp
18650 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
18660 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70  ments(db);.    p
18670 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20  ->expired = 0;. 
18680 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
18690 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72 69 66 79  * Opcode: Verify
186a0 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
186b0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  * *.**.** Check 
186c0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f  the value of glo
186d0 62 61 6c 20 64 61 74 61 62 61 73 65 20 70 61 72  bal database par
186e0 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30 20  ameter number 0 
186f0 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76  (the.** schema v
18700 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65  ersion) and make
18710 20 73 75 72 65 20 69 74 20 69 73 20 65 71 75 61   sure it is equa
18720 6c 20 74 6f 20 50 32 20 61 6e 64 20 74 68 61 74  l to P2 and that
18730 20 74 68 65 0a 2a 2a 20 67 65 6e 65 72 61 74 69   the.** generati
18740 6f 6e 20 63 6f 75 6e 74 65 72 20 6f 6e 20 74 68  on counter on th
18750 65 20 6c 6f 63 61 6c 20 73 63 68 65 6d 61 20 70  e local schema p
18760 61 72 73 65 20 65 71 75 61 6c 73 20 50 33 2e 0a  arse equals P3..
18770 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
18780 64 61 74 61 62 61 73 65 20 6e 75 6d 62 65 72 20  database number 
18790 77 68 69 63 68 20 69 73 20 30 20 66 6f 72 20 74  which is 0 for t
187a0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
187b0 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31 20 66   file.** and 1 f
187c0 6f 72 20 74 68 65 20 66 69 6c 65 20 68 6f 6c 64  or the file hold
187d0 69 6e 67 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ing temporary ta
187e0 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20 68 69  bles and some hi
187f0 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a 20 66  gher number.** f
18800 6f 72 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  or auxiliary dat
18810 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  abases..**.** Th
18820 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  e cookie changes
18830 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65   its value whene
18840 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
18850 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e   schema changes.
18860 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
18870 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  on is used to de
18880 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74  tect when that t
18890 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68  he cookie has ch
188a0 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61  anged.** and tha
188b0 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  t the current pr
188c0 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72  ocess needs to r
188d0 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61  eread the schema
188e0 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72 20 61  ..**.** Either a
188f0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65   transaction nee
18900 64 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20  ds to have been 
18910 73 74 61 72 74 65 64 20 6f 72 20 61 6e 20 4f 50  started or an OP
18920 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a 20 74  _Open needs.** t
18930 6f 20 62 65 20 65 78 65 63 75 74 65 64 20 28 74  o be executed (t
18940 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20 72 65  o establish a re
18950 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72 65 20  ad lock) before 
18960 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a  this opcode is.*
18970 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61  * invoked..*/.ca
18980 73 65 20 4f 50 5f 56 65 72 69 66 79 43 6f 6f 6b  se OP_VerifyCook
18990 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 65 74  ie: {.  int iMet
189a0 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 20  a;.  int iGen;. 
189b0 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
189c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
189d0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
189e0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
189f0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
18a00 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
18a10 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
18a20 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
18a30 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
18a40 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  ld(db, pOp->p1, 
18a50 30 29 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  0) );.  pBt = db
18a60 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
18a70 42 74 3b 0a 20 20 69 66 28 20 70 42 74 20 29 7b  Bt;.  if( pBt ){
18a80 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
18a90 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54  eGetMeta(pBt, BT
18aa0 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
18ab0 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ON, (u32 *)&iMet
18ac0 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64  a);.    iGen = d
18ad0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
18ae0 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61  pSchema->iGenera
18af0 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  tion;.  }else{. 
18b00 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20     iGen = iMeta 
18b10 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  = 0;.  }.  if( i
18b20 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20 7c 7c  Meta!=pOp->p2 ||
18b30 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 33 20 29   iGen!=pOp->p3 )
18b40 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
18b50 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
18b60 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
18b70 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53  Msg = sqlite3DbS
18b80 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62  trDup(db, "datab
18b90 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
18ba0 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a  hanged");.    /*
18bb0 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63   If the schema-c
18bc0 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64  ookie from the d
18bd0 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74  atabase file mat
18be0 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20  ches the cookie 
18bf0 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77  .    ** stored w
18c00 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72  ith the in-memor
18c10 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  y representation
18c20 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20   of the schema, 
18c30 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65  do.    ** not re
18c40 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  load the schema 
18c50 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
18c60 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20  e file..    **. 
18c70 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c     ** If virtual
18c80 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75  -tables are in u
18c90 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  se, this is not 
18ca0 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61  just an optimiza
18cb0 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74  tion..    ** Oft
18cc0 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f  en, v-tables sto
18cd0 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e  re their data in
18ce0 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61   other SQLite ta
18cf0 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20  bles, which.    
18d00 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66  ** are queried f
18d10 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74  rom within xNext
18d20 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74  () and other v-t
18d30 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69  able methods usi
18d40 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72  ng.    ** prepar
18d50 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73  ed queries. If s
18d60 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f  uch a query is o
18d70 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64  ut-of-date, we d
18d80 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20  o not want to.  
18d90 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65    ** discard the
18da0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
18db0 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f  , as the user co
18dc0 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  de implementing 
18dd0 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62  the.    ** v-tab
18de0 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f  le would have to
18df0 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68   be ready for th
18e00 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  e sqlite3_vtab s
18e10 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a  tructure itself.
18e20 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76      ** to be inv
18e30 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65  alidated wheneve
18e40 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
18e50 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
18e60 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61  within .    ** a
18e70 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e   v-table method.
18e80 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
18e90 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
18ea0 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
18eb0 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29  _cookie!=iMeta )
18ec0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
18ed0 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
18ee0 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
18ef0 7d 0a 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  }..    p->expire
18f00 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20  d = 1;.    rc = 
18f10 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20  SQLITE_SCHEMA;. 
18f20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
18f30 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65  * Opcode: OpenRe
18f40 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ad P1 P2 P3 P4 P
18f50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  5.**.** Open a r
18f60 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
18f70 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
18f80 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
18f90 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
18fa0 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
18fb0 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
18fc0 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
18fd0 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
18fe0 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
18ff0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
19000 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
19010 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
19020 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
19030 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
19040 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
19050 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
19060 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
19070 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
19080 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
19090 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
190a0 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
190b0 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
190c0 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
190d0 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
190e0 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
190f0 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
19100 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
19110 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
19120 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
19130 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
19140 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
19150 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
19160 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
19170 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
19180 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
19190 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
191a0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
191b0 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
191c0 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
191d0 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
191e0 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
191f0 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
19200 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
19210 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
19220 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
19230 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
19240 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
19250 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
19260 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
19270 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
19280 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
19290 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
192a0 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
192b0 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
192c0 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
192d0 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
192e0 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
192f0 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
19300 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
19310 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
19320 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
19330 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
19340 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
19350 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
19360 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
19370 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
19380 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
19390 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
193a0 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
193b0 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
193c0 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
193d0 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
193e0 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
193f0 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
19400 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
19410 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
19420 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
19430 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
19440 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
19450 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
19460 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
19470 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
19480 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
19490 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
194a0 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
194b0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
194c0 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
194d0 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57  * See also OpenW
194e0 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  rite..*/./* Opco
194f0 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
19500 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
19510 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77  ** Open a read/w
19520 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65  rite cursor name
19530 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c  d P1 on the tabl
19540 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
19550 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73   root.** page is
19560 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d   P2.  Or if P5!=
19570 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  0 use the conten
19580 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
19590 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20   to find the.** 
195a0 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a  root page..**.**
195b0 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
195c0 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
195d0 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
195e0 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
195f0 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
19600 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
19610 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
19620 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
19630 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
19640 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
19650 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
19660 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
19670 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
19680 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
19690 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
196a0 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
196b0 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
196c0 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
196d0 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
196e0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
196f0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f   in the table, o
19700 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67  r to the.** larg
19710 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79  est index of any
19720 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74   column of the t
19730 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63 74  able that is act
19740 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a  ually used..**.*
19750 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
19760 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  on works just li
19770 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65  ke OpenRead exce
19780 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
19790 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69   the cursor.** i
197a0 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64  n read/write mod
197b0 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20  e.  For a given 
197c0 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e  table, there can
197d0 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   be one or more 
197e0 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72  read-only.** cur
197f0 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65  sors or a single
19800 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
19810 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e  or but not both.
19820 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
19830 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73  OpenRead..*/.cas
19840 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63  e OP_OpenRead:.c
19850 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ase OP_OpenWrite
19860 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64  : {.  int nField
19870 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
19880 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b  yInfo;.  int p2;
19890 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
198a0 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65  t wrFlag;.  Btre
198b0 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72  e *pX;.  VdbeCur
198c0 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20  sor *pCur;.  Db 
198d0 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pDb;..  assert(
198e0 20 28 70 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41   (pOp->p5&(OPFLA
198f0 47 5f 50 32 49 53 52 45 47 7c 4f 50 46 4c 41 47  G_P2ISREG|OPFLAG
19900 5f 42 55 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d  _BULKCSR))==pOp-
19910 3e 70 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >p5 );.  assert(
19920 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
19930 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f  _OpenWrite || pO
19940 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 0a 20 20 69  p->p5==0 );..  i
19950 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b  f( p->expired ){
19960 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
19970 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61  _ABORT;.    brea
19980 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64  k;.  }..  nField
19990 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f   = 0;.  pKeyInfo
199a0 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70   = 0;.  p2 = pOp
199b0 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f  ->p2;.  iDb = pO
199c0 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
199d0 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
199e0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
199f0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
19a00 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
19a10 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20  )<<iDb))!=0 );. 
19a20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
19a30 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62  iDb];.  pX = pDb
19a40 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28  ->pBt;.  assert(
19a50 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pX!=0 );.  if( 
19a60 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
19a70 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20  OpenWrite ){.   
19a80 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20   wrFlag = 1;.   
19a90 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
19aa0 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
19ab0 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
19ac0 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68     if( pDb->pSch
19ad0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
19ae0 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   < p->minWriteFi
19af0 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20  leFormat ){.    
19b00 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c    p->minWriteFil
19b10 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70  eFormat = pDb->p
19b20 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
19b30 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  mat;.    }.  }el
19b40 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d  se{.    wrFlag =
19b50 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   0;.  }.  if( pO
19b60 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  p->p5 & OPFLAG_P
19b70 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73  2ISREG ){.    as
19b80 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20  sert( p2>0 );.  
19b90 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 70 2d    assert( p2<=p-
19ba0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 70 49 6e  >nMem );.    pIn
19bb0 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  2 = &aMem[p2];. 
19bc0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
19bd0 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20  Valid(pIn2) );. 
19be0 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32     assert( (pIn2
19bf0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
19c00 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  t)!=0 );.    sql
19c10 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
19c20 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20  erify(pIn2);.   
19c30 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d   p2 = (int)pIn2-
19c40 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65  >u.i;.    /* The
19c50 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73   p2 value always
19c60 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72   comes from a pr
19c70 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62  ior OP_CreateTab
19c80 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20  le opcode and.  
19c90 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65    ** that opcode
19ca0 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74   will always set
19cb0 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f   the p2 value to
19cc0 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c   2 or more or el
19cd0 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20  se fail..    ** 
19ce0 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20  If there were a 
19cf0 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65  failure, the pre
19d00 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
19d10 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65  would have halte
19d20 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20  d.    ** before 
19d30 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e  reaching this in
19d40 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  struction. */.  
19d50 20 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32    if( NEVER(p2<2
19d60 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d  ) ) {.      rc =
19d70 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
19d80 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BKPT;.      goto
19d90 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19da0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ror;.    }.  }. 
19db0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
19dc0 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a  ==P4_KEYINFO ){.
19dd0 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70      pKeyInfo = p
19de0 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
19df0 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  .    pKeyInfo->e
19e00 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b  nc = ENC(p->db);
19e10 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b  .    nField = pK
19e20 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31  eyInfo->nField+1
19e30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
19e40 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
19e50 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c  T32 ){.    nFiel
19e60 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
19e70 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
19e80 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 75  ->p1>=0 );.  pCu
19e90 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
19ea0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e  or(p, pOp->p1, n
19eb0 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a  Field, iDb, 1);.
19ec0 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20    if( pCur==0 ) 
19ed0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
19ee0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  Cur->nullRow = 1
19ef0 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65  ;.  pCur->isOrde
19f00 72 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  red = 1;.  rc = 
19f10 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
19f20 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61  or(pX, p2, wrFla
19f30 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75  g, pKeyInfo, pCu
19f40 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  r->pCursor);.  p
19f50 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
19f60 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
19f70 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  rt( OPFLAG_BULKC
19f80 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f  SR==BTREE_BULKLO
19f90 41 44 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42  AD );.  sqlite3B
19fa0 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74 73 28  treeCursorHints(
19fb0 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c 20 28  pCur->pCursor, (
19fc0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
19fd0 5f 42 55 4c 4b 43 53 52 29 29 3b 0a 0a 20 20 2f  _BULKCSR));..  /
19fe0 2a 20 53 69 6e 63 65 20 69 74 20 70 65 72 66 6f  * Since it perfo
19ff0 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c  rms no memory al
1a000 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f 2c 20  location or IO, 
1a010 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65 20 74  the only value t
1a020 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  hat.  ** sqlite3
1a030 42 74 72 65 65 43 75 72 73 6f 72 28 29 20 6d 61  BtreeCursor() ma
1a040 79 20 72 65 74 75 72 6e 20 69 73 20 53 51 4c 49  y return is SQLI
1a050 54 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61 73 73 65  TE_OK. */.  asse
1a060 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
1a070 4b 20 29 3b 0a 0a 20 20 2f 2a 20 53 65 74 20 74  K );..  /* Set t
1a080 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73  he VdbeCursor.is
1a090 54 61 62 6c 65 20 61 6e 64 20 69 73 49 6e 64 65  Table and isInde
1a0a0 78 20 76 61 72 69 61 62 6c 65 73 2e 20 50 72 65  x variables. Pre
1a0b0 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
1a0c0 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73  f.  ** SQLite us
1a0d0 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
1a0e0 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61  he root-page fla
1a0f0 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20  gs were sane at 
1a100 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20  this point.  ** 
1a110 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62  and report datab
1a120 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ase corruption i
1a130 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c  f they were not,
1a140 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20   but this check 
1a150 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d  has.  ** since m
1a160 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74  oved into the bt
1a170 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20  ree layer.  */  
1a180 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  .  pCur->isTable
1a190 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d   = pOp->p4type!=
1a1a0 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 70 43  P4_KEYINFO;.  pC
1a1b0 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70  ur->isIndex = !p
1a1c0 43 75 72 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20  Cur->isTable;.  
1a1d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1a1e0 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72  ode: OpenEphemer
1a1f0 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  al P1 P2 * P4 P5
1a200 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
1a210 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  w cursor P1 to a
1a220 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1a230 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
1a240 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64  is always opened
1a250 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e   read/write even
1a260 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e   if .** the main
1a270 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61   database is rea
1a280 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68  d-only.  The eph
1a290 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  emeral.** table 
1a2a0 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d  is deleted autom
1a2b0 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68  atically when th
1a2c0 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73  e cursor is clos
1a2d0 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  ed..**.** P2 is 
1a2e0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1a2f0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68  lumns in the eph
1a300 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  emeral table..**
1a310 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   The cursor poin
1a320 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61  ts to a BTree ta
1a330 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64  ble if P4==0 and
1a340 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65   to a BTree inde
1a350 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f  x.** if P4 is no
1a360 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e  t 0.  If P4 is n
1a370 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e  ot NULL, it poin
1a380 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  ts to a KeyInfo 
1a390 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61  structure.** tha
1a3a0 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f  t defines the fo
1a3b0 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20  rmat of keys in 
1a3c0 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a  the index..**.**
1a3d0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73   This opcode was
1a3e0 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f 70 65   once called Ope
1a3f0 6e 54 65 6d 70 2e 20 20 42 75 74 20 74 68 61 74  nTemp.  But that
1a400 20 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f 6e 66   created.** conf
1a410 75 73 69 6f 6e 20 62 65 63 61 75 73 65 20 74 68  usion because th
1a420 65 20 74 65 72 6d 20 22 74 65 6d 70 20 74 61 62  e term "temp tab
1a430 6c 65 22 2c 20 6d 69 67 68 74 20 72 65 66 65 72  le", might refer
1a440 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20 61 20   either.** to a 
1a450 54 45 4d 50 20 74 61 62 6c 65 20 61 74 20 74 68  TEMP table at th
1a460 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f 72 20  e SQL level, or 
1a470 74 6f 20 61 20 74 61 62 6c 65 20 6f 70 65 6e 65  to a table opene
1a480 64 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f 70 63  d by.** this opc
1a490 6f 64 65 2e 20 20 54 68 65 6e 20 74 68 69 73 20  ode.  Then this 
1a4a0 6f 70 63 6f 64 65 20 77 61 73 20 63 61 6c 6c 20  opcode was call 
1a4b0 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20 20 42 75  OpenVirtual.  Bu
1a4c0 74 0a 2a 2a 20 74 68 61 74 20 63 72 65 61 74 65  t.** that create
1a4d0 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69 74 68  d confusion with
1a4e0 20 74 68 65 20 77 68 6f 6c 65 20 76 69 72 74 75   the whole virtu
1a4f0 61 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e 0a 2a  al-table idea..*
1a500 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61  *.** The P5 para
1a510 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d  meter can be a m
1a520 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45  ask of the BTREE
1a530 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
1a540 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20  .** in btree.h. 
1a550 20 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e   These flags con
1a560 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20  trol aspects of 
1a570 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  the operation of
1a580 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20  .** the btree.  
1a590 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a  The BTREE_OMIT_J
1a5a0 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45  OURNAL and BTREE
1a5b0 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72  _SINGLE flags ar
1a5c0 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d  e.** added autom
1a5d0 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20  atically..*/./* 
1a5e0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f  Opcode: OpenAuto
1a5f0 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34  index P1 P2 * P4
1a600 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
1a610 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73  code works the s
1a620 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70  ame as OP_OpenEp
1a630 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73  hemeral.  It has
1a640 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20   a.** different 
1a650 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75  name to distingu
1a660 69 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61  ish its use.  Ta
1a670 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69  bles created usi
1a680 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70  ng.** by this op
1a690 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
1a6a0 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61  d for automatica
1a6b0 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e  lly created tran
1a6c0 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73  sient.** indices
1a6d0 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61   in joins..*/.ca
1a6e0 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e  se OP_OpenAutoin
1a6f0 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70  dex: .case OP_Op
1a700 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20  enEphemeral: {. 
1a710 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1a720 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
1a730 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20   int vfsFlags = 
1a740 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1a750 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20  EN_READWRITE |. 
1a760 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1a770 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20  _CREATE |.      
1a780 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c  SQLITE_OPEN_EXCL
1a790 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51  USIVE |.      SQ
1a7a0 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45  LITE_OPEN_DELETE
1a7b0 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20  ONCLOSE |.      
1a7c0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e  SQLITE_OPEN_TRAN
1a7d0 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73  SIENT_DB;..  ass
1a7e0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1a7f0 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1a800 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1a810 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
1a820 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 1);.  if( pCx
1a830 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1a840 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1a850 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  w = 1;.  rc = sq
1a860 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64  lite3BtreeOpen(d
1a870 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20  b->pVfs, 0, db, 
1a880 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20  &pCx->pBt, .    
1a890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8a0 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a      BTREE_OMIT_J
1a8b0 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53  OURNAL | BTREE_S
1a8c0 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c  INGLE | pOp->p5,
1a8d0 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66   vfsFlags);.  if
1a8e0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1a8f0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
1a900 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
1a910 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b  ns(pCx->pBt, 1);
1a920 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
1a930 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1a940 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  /* If a transien
1a950 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69  t index is requi
1a960 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62  red, create it b
1a970 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a  y calling.    **
1a980 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1a990 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20  ateTable() with 
1a9a0 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  the BTREE_BLOBKE
1a9b0 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20  Y flag before.  
1a9c0 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e    ** opening it.
1a9d0 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
1a9e0 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65  table is require
1a9f0 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a  d, just use the.
1aa00 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63      ** automatic
1aa10 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62  ally created tab
1aa20 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67  le with root-pag
1aa30 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54  e 1 (an BLOB_INT
1aa40 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20  KEY table)..    
1aa50 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
1aa60 70 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20  p4.pKeyInfo ){. 
1aa70 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20       int pgno;. 
1aa80 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1aa90 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1aaa0 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63  INFO );.      rc
1aab0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1aac0 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e  reateTable(pCx->
1aad0 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45  pBt, &pgno, BTRE
1aae0 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d  E_BLOBKEY | pOp-
1aaf0 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28  >p5); .      if(
1ab00 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1ab10 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1ab20 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52  ( pgno==MASTER_R
1ab30 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20  OOT+1 );.       
1ab40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1ab50 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
1ab60 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20  t, pgno, 1, .   
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 28 4b 65               (Ke
1ab90 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a  yInfo*)pOp->p4.z
1aba0 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  , pCx->pCursor);
1abb0 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b  .        pCx->pK
1abc0 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1abd0 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20  .pKeyInfo;.     
1abe0 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
1abf0 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64  ->enc = ENC(p->d
1ac00 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
1ac10 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1ac20 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1ac30 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1ac40 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1ac50 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f  ->pBt, MASTER_RO
1ac60 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70  OT, 1, 0, pCx->p
1ac70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70  Cursor);.      p
1ac80 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1ac90 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78  .    }.  }.  pCx
1aca0 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70  ->isOrdered = (p
1acb0 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e  Op->p5!=BTREE_UN
1acc0 4f 52 44 45 52 45 44 29 3b 0a 20 20 70 43 78 2d  ORDERED);.  pCx-
1acd0 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d  >isIndex = !pCx-
1ace0 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61  >isTable;.  brea
1acf0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1ad00 20 4f 70 65 6e 53 6f 72 74 65 72 20 50 31 20 50   OpenSorter P1 P
1ad10 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 * P4 *.**.** T
1ad20 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
1ad30 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68   like OP_OpenEph
1ad40 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74 68  emeral except th
1ad50 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61  at it opens.** a
1ad60 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78   transient index
1ad70 20 74 68 61 74 20 69 73 20 73 70 65 63 69 66 69   that is specifi
1ad80 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74  cally designed t
1ad90 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20  o sort large.** 
1ada0 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20  tables using an 
1adb0 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73  external merge-s
1adc0 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a  ort algorithm..*
1add0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
1ade0 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
1adf0 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 23 69 66 6e  rsor *pCx;..#ifn
1ae00 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1ae10 4d 45 52 47 45 5f 53 4f 52 54 0a 20 20 70 43 78  MERGE_SORT.  pCx
1ae20 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1ae30 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1ae40 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20  p->p2, -1, 1);. 
1ae50 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1ae60 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1ae70 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70  ->pKeyInfo = pOp
1ae80 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
1ae90 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1aea0 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29  enc = ENC(p->db)
1aeb0 3b 0a 20 20 70 43 78 2d 3e 69 73 53 6f 72 74 65  ;.  pCx->isSorte
1aec0 72 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  r = 1;.  rc = sq
1aed0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49  lite3VdbeSorterI
1aee0 6e 69 74 28 64 62 2c 20 70 43 78 29 3b 0a 23 65  nit(db, pCx);.#e
1aef0 6c 73 65 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64  lse.  pOp->opcod
1af00 65 20 3d 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  e = OP_OpenEphem
1af10 65 72 61 6c 3b 0a 20 20 70 63 2d 2d 3b 0a 23 65  eral;.  pc--;.#e
1af20 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ndif.  break;.}.
1af30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1af40 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
1af50 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  * P5.**.** Open 
1af60 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
1af70 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
1af80 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
1af90 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
1afa0 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
1afb0 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
1afc0 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 6e 20  that one row in 
1afd0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d  the content of m
1afe0 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65  emory.** registe
1aff0 72 20 50 32 20 77 68 65 6e 20 50 35 3d 3d 30 2e  r P2 when P5==0.
1b000 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1b010 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f  , cursor P1 beco
1b020 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  mes an alias for
1b030 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f   the .** MEM_Blo
1b040 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69  b content contai
1b050 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  ned in register 
1b060 50 32 2e 20 20 57 68 65 6e 20 50 35 3d 3d 31 2c  P2.  When P5==1,
1b070 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 72 6f 77   then the.** row
1b080 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
1b090 62 79 20 50 33 20 63 6f 6e 73 65 63 75 74 69 76  by P3 consecutiv
1b0a0 65 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69  e registers begi
1b0b0 6e 6e 69 6e 67 20 77 69 74 68 20 50 32 2e 0a 2a  nning with P2..*
1b0c0 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61  *.** A pseudo-ta
1b0d0 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74  ble created by t
1b0e0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
1b0f0 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e  ed to hold a sin
1b100 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75  gle.** row outpu
1b110 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65  t from the sorte
1b120 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f  r so that the ro
1b130 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f  w can be decompo
1b140 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69  sed into.** indi
1b150 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75  vidual columns u
1b160 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75  sing the OP_Colu
1b170 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20  mn opcode.  The 
1b180 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
1b190 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  .** is the only 
1b1a0 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68  cursor opcode th
1b1b0 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20  at works with a 
1b1c0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a  pseudo-table..**
1b1d0 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75  .** P3 is the nu
1b1e0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1b1f0 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68  n the records th
1b200 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  at will be store
1b210 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75  d by.** the pseu
1b220 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  do-table..*/.cas
1b230 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a  e OP_OpenPseudo:
1b240 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1b250 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pCx;..  assert(
1b260 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1b270 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1b280 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1b290 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30  , pOp->p3, -1, 0
1b2a0 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1b2b0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1b2c0 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1b2d0 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f  1;.  pCx->pseudo
1b2e0 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e  TableReg = pOp->
1b2f0 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62  p2;.  pCx->isTab
1b300 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69  le = 1;.  pCx->i
1b310 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20 20 70 43  sIndex = 0;.  pC
1b320 78 2d 3e 6d 75 6c 74 69 50 73 65 75 64 6f 20 3d  x->multiPseudo =
1b330 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 62 72 65 61   pOp->p5;.  brea
1b340 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1b350 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20   Close P1 * * * 
1b360 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20  *.**.** Close a 
1b370 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c  cursor previousl
1b380 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20  y opened as P1. 
1b390 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a   If P1 is not.**
1b3a0 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c   currently open,
1b3b0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1b3c0 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  n is a no-op..*/
1b3d0 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20  .case OP_Close: 
1b3e0 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
1b3f0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1b400 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1b410 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
1b420 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
1b430 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Csr[pOp->p1]);. 
1b440 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1b450 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  1] = 0;.  break;
1b460 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1b470 65 65 6b 47 65 20 50 31 20 50 32 20 50 33 20 50  eekGe P1 P2 P3 P
1b480 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  4 *.**.** If cur
1b490 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1b4a0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1b4b0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1b4c0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1b4d0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1b4e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1b4f0 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20  as the key.  If 
1b500 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1b510 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1b520 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1b530 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1b540 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1b550 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1b560 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1b570 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1b580 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1b590 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1b5a0 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
1b5b0 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
1b5c0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1b5d0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
1b5e0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1b5f0 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1b600 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1b610 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20  rds .** greater 
1b620 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1b630 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1b640 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1b650 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1b660 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1b670 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
1b680 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c  istinct, SeekLt,
1b690 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a   SeekGt, SeekLe.
1b6a0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1b6b0 65 6b 47 74 20 50 31 20 50 32 20 50 33 20 50 34  ekGt P1 P2 P3 P4
1b6c0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73   *.**.** If curs
1b6d0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1b6e0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1b6f0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1b700 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1b710 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1b720 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1b730 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1b740 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1b750 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1b760 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1b770 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1b780 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1b790 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1b7a0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1b7b0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1b7c0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1b7d0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1b7e0 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1b7f0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1b800 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1b810 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
1b820 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1b830 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1b840 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
1b850 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1b860 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1b870 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1b880 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1b890 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1b8a0 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
1b8b0 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
1b8c0 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1b8d0 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20 50  : SeekLt P1 P2 P
1b8e0 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66  3 P4 * .**.** If
1b8f0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1b900 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1b910 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1b920 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1b930 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1b940 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1b950 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1b960 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1b970 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1b980 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1b990 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1b9a0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1b9b0 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1b9c0 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1b9d0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1b9e0 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1b9f0 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1ba00 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1ba10 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
1ba20 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1ba30 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
1ba40 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1ba50 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1ba60 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a  ords less than .
1ba70 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
1ba80 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1ba90 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1baa0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1bab0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1bac0 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47   Distinct, SeekG
1bad0 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1bae0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1baf0 53 65 65 6b 4c 65 20 50 31 20 50 32 20 50 33 20  SeekLe P1 P2 P3 
1bb00 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
1bb10 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1bb20 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1bb30 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1bb40 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1bb50 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1bb60 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1bb70 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1bb80 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1bb90 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1bba0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1bbb0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1bbc0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1bbd0 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1bbe0 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1bbf0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1bc00 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1bc10 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1bc20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1bc30 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1bc40 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1bc50 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1bc60 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1bc70 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1bc80 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1bc90 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1bca0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1bcb0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1bcc0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1bcd0 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
1bce0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1bcf0 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
1bd00 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1bd10 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  eekLt.*/.case OP
1bd20 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20 20 20  _SeekLt:        
1bd30 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1bd40 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a  .case OP_SeekLe:
1bd50 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1bd60 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1bd70 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20 20 20  _SeekGe:        
1bd80 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1bd90 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a  .case OP_SeekGt:
1bda0 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
1bdb0 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
1bdc0 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20  es;.  int oc;.  
1bdd0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1bde0 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1bdf0 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   r;.  int nField
1be00 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  ;.  i64 iKey;   
1be10 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
1be20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
1be30 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  o */..  assert( 
1be40 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1be50 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1be60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1be70 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
1be80 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1be90 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1bea0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1beb0 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1bec0 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73  leReg==0 );.  as
1bed0 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 65 20  sert( OP_SeekLe 
1bee0 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 31 20 29  == OP_SeekLt+1 )
1bef0 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1bf00 65 65 6b 47 65 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGe == OP_Seek
1bf10 4c 74 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74  Lt+2 );.  assert
1bf20 28 20 4f 50 5f 53 65 65 6b 47 74 20 3d 3d 20 4f  ( OP_SeekGt == O
1bf30 50 5f 53 65 65 6b 4c 74 2b 33 20 29 3b 0a 20 20  P_SeekLt+3 );.  
1bf40 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
1bf50 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28 20 41  dered );.  if( A
1bf60 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f  LWAYS(pC->pCurso
1bf70 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 6f 63 20  r!=0) ){.    oc 
1bf80 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
1bf90 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
1bfa0 20 30 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   0;.    if( pC->
1bfb0 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20  isTable ){.     
1bfc0 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61   /* The input va
1bfd0 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20  lue in P3 might 
1bfe0 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20  be of any type: 
1bff0 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73  integer, real, s
1c000 74 72 69 6e 67 2c 0a 20 20 20 20 20 20 2a 2a 20  tring,.      ** 
1c010 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20  blob, or NULL.  
1c020 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20  But it needs to 
1c030 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  be an integer be
1c040 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20  fore we can do. 
1c050 20 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b       ** the seek
1c060 2c 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e 20  , so covert it. 
1c070 2a 2f 0a 20 20 20 20 20 20 70 49 6e 33 20 3d 20  */.      pIn3 = 
1c080 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1c090 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
1c0a0 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 29  icAffinity(pIn3)
1c0b0 3b 0a 20 20 20 20 20 20 69 4b 65 79 20 3d 20 73  ;.      iKey = s
1c0c0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
1c0d0 75 65 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20  ue(pIn3);.      
1c0e0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1c0f0 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20   = 0;..      /* 
1c100 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1c110 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e  could not be con
1c120 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
1c130 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20  nteger without. 
1c140 20 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20       ** loss of 
1c150 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
1c160 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73  n special proces
1c170 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64  sing is required
1c180 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ... */.      if(
1c190 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1c1a0 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
1c1b0 20 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33         if( (pIn3
1c1c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
1c1d0 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
1c1e0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
1c1f0 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65   value cannot be
1c200 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
1c210 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75  any kind of a nu
1c220 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  mber,.          
1c230 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b  ** then the seek
1c240 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
1c250 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20  , so jump to P2 
1c260 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 70 63 20  */.          pc 
1c270 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1c280 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
1c290 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1c2a0 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
1c2b0 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65   this point, the
1c2c0 6e 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d  n the P3 value m
1c2d0 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69 6e  ust be a floatin
1c2e0 67 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 6f 69  g.        ** poi
1c2f0 6e 74 20 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20 20  nt number. */.  
1c300 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
1c310 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1c320 5f 52 65 61 6c 29 21 3d 30 20 29 3b 0a 0a 20 20  _Real)!=0 );..  
1c330 20 20 20 20 20 20 69 66 28 20 69 4b 65 79 3d 3d        if( iKey==
1c340 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 26  SMALLEST_INT64 &
1c350 26 20 28 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62  & (pIn3->r<(doub
1c360 6c 65 29 69 4b 65 79 20 7c 7c 20 70 49 6e 33 2d  le)iKey || pIn3-
1c370 3e 72 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 20  >r>0) ){.       
1c380 20 20 20 2f 2a 20 54 68 65 20 50 33 20 76 61 6c     /* The P3 val
1c390 75 65 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20  ue is too large 
1c3a0 69 6e 20 6d 61 67 6e 69 74 75 64 65 20 74 6f 20  in magnitude to 
1c3b0 62 65 20 65 78 70 72 65 73 73 65 64 20 61 73 20  be expressed as 
1c3c0 61 6e 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  an.          ** 
1c3d0 69 6e 74 65 67 65 72 2e 20 2a 2f 0a 20 20 20 20  integer. */.    
1c3e0 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20        res = 1;. 
1c3f0 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1c400 33 2d 3e 72 3c 30 20 29 7b 0a 20 20 20 20 20 20  3->r<0 ){.      
1c410 20 20 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50        if( oc>=OP
1c420 5f 53 65 65 6b 47 65 20 29 7b 20 20 61 73 73 65  _SeekGe ){  asse
1c430 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  rt( oc==OP_SeekG
1c440 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  e || oc==OP_Seek
1c450 47 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Gt );.          
1c460 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1c470 42 74 72 65 65 46 69 72 73 74 28 70 43 2d 3e 70  BtreeFirst(pC->p
1c480 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1c490 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28               if(
1c4a0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1c4b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1c4c0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1c4d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1c4e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1c4f0 20 20 20 20 20 69 66 28 20 6f 63 3c 3d 4f 50 5f       if( oc<=OP_
1c500 53 65 65 6b 4c 65 20 29 7b 20 20 61 73 73 65 72  SeekLe ){  asser
1c510 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74  t( oc==OP_SeekLt
1c520 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
1c530 65 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  e );.           
1c540 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1c550 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75  treeLast(pC->pCu
1c560 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1c570 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72             if( r
1c580 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1c590 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1c5a0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1c5b0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1c5c0 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  }.          if( 
1c5d0 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20  res ){.         
1c5e0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1c5f0 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  - 1;.          }
1c600 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
1c610 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
1c620 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  if( oc==OP_SeekL
1c630 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
1c640 47 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  Ge ){.          
1c650 2f 2a 20 55 73 65 20 74 68 65 20 63 65 69 6c 69  /* Use the ceili
1c660 6e 67 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f  ng() function to
1c670 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69   convert real->i
1c680 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  nt */.          
1c690 69 66 28 20 70 49 6e 33 2d 3e 72 20 3e 20 28 64  if( pIn3->r > (d
1c6a0 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65  ouble)iKey ) iKe
1c6b0 79 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  y++;.        }el
1c6c0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a  se{.          /*
1c6d0 20 55 73 65 20 74 68 65 20 66 6c 6f 6f 72 28 29   Use the floor()
1c6e0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e   function to con
1c6f0 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a  vert real->int *
1c700 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  /.          asse
1c710 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
1c720 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  e || oc==OP_Seek
1c730 47 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Gt );.          
1c740 69 66 28 20 70 49 6e 33 2d 3e 72 20 3c 20 28 64  if( pIn3->r < (d
1c750 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65  ouble)iKey ) iKe
1c760 79 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  y--;.        }. 
1c770 20 20 20 20 20 7d 20 0a 20 20 20 20 20 20 72 63       } .      rc
1c780 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1c790 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1c7a0 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75  ->pCursor, 0, (u
1c7b0 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  64)iKey, 0, &res
1c7c0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
1c7d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1c7e0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1c7f0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1c800 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
1c810 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
1c820 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1c830 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  lid = 1;.       
1c840 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   pC->lastRowid =
1c850 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 7d 0a 20   iKey;.      }. 
1c860 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1c870 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
1c880 2e 69 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  .i;.      assert
1c890 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1c8a0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 20  4_INT32 );.     
1c8b0 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
1c8c0 30 20 29 3b 0a 20 20 20 20 20 20 72 2e 70 4b 65  0 );.      r.pKe
1c8d0 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
1c8e0 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46  Info;.      r.nF
1c8f0 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65  ield = (u16)nFie
1c900 6c 64 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68  ld;..      /* Th
1c910 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63  e next line of c
1c920 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20  ode computes as 
1c930 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61  follows, only fa
1c940 73 74 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20  ster:.      **  
1c950 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
1c960 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Gt || oc==OP_See
1c970 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20 2a 2a 20  kLe ){.      ** 
1c980 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e      r.flags = UN
1c990 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a  PACKED_INCRKEY;.
1c9a0 20 20 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65        **   }else
1c9b0 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 72  {.      **     r
1c9c0 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20  .flags = 0;.    
1c9d0 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 20 20 2a    **   }.      *
1c9e0 2f 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20  /.      r.flags 
1c9f0 3d 20 28 75 31 36 29 28 55 4e 50 41 43 4b 45 44  = (u16)(UNPACKED
1ca00 5f 49 4e 43 52 4b 45 59 20 2a 20 28 31 20 26 20  _INCRKEY * (1 & 
1ca10 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 74 29  (oc - OP_SeekLt)
1ca20 29 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ));.      assert
1ca30 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 74 20  ( oc!=OP_SeekGt 
1ca40 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41  || r.flags==UNPA
1ca50 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a  CKED_INCRKEY );.
1ca60 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63        assert( oc
1ca70 21 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 72  !=OP_SeekLe || r
1ca80 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44  .flags==UNPACKED
1ca90 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20 20  _INCRKEY );.    
1caa0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1cab0 5f 53 65 65 6b 47 65 20 7c 7c 20 72 2e 66 6c 61  _SeekGe || r.fla
1cac0 67 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  gs==0 );.      a
1cad0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1cae0 65 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d  ekLt || r.flags=
1caf0 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 72 2e 61  =0 );..      r.a
1cb00 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
1cb10 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
1cb20 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20 20  ITE_DEBUG.      
1cb30 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
1cb40 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
1cb50 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
1cb60 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
1cb70 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
1cb80 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72      ExpandBlob(r
1cb90 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 20 20 72 63  .aMem);.      rc
1cba0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1cbb0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1cbc0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30  ->pCursor, &r, 0
1cbd0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1cbe0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1cbf0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
1cc00 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1cc10 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1cc20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1cc30 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1cc40 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  }.    pC->deferr
1cc50 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1cc60 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1cc70 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1cc80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1cc90 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  EST.    sqlite3_
1cca0 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
1ccb0 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 6f  #endif.    if( o
1ccc0 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20  c>=OP_SeekGe ){ 
1ccd0 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1cce0 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGe || oc==OP
1ccf0 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20  _SeekGt );.     
1cd00 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72   if( res<0 || (r
1cd10 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
1cd20 53 65 65 6b 47 74 29 20 29 7b 0a 20 20 20 20 20  SeekGt) ){.     
1cd30 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1cd40 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43 75  treeNext(pC->pCu
1cd50 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1cd60 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1cd70 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1cd80 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1cd90 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f  ;.        pC->ro
1cda0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1cdb0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1cdc0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1cdd0 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
1cde0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1cdf0 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20  c==OP_SeekLt || 
1ce00 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b  oc==OP_SeekLe );
1ce10 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3e 30  .      if( res>0
1ce20 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
1ce30 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29 20 29 7b  c==OP_SeekLt) ){
1ce40 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1ce50 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
1ce60 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  us(pC->pCursor, 
1ce70 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69  &res);.        i
1ce80 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1ce90 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1cea0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1ceb0 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1cec0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20  alid = 0;.      
1ced0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
1cee0 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e  * res might be n
1cef0 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20  egative because 
1cf00 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70  the table is emp
1cf10 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20  ty.  Check to.  
1cf20 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20        ** see if 
1cf30 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65  this is the case
1cf40 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
1cf50 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74       res = sqlit
1cf60 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70  e3BtreeEof(pC->p
1cf70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1cf80 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
1cf90 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
1cfa0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1cfb0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1cfc0 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  2 - 1;.    }.  }
1cfd0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69  else{.    /* Thi
1cfe0 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61  s happens when a
1cff0 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65  ttempting to ope
1d000 6e 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6d 61  n the sqlite3_ma
1d010 73 74 65 72 20 74 61 62 6c 65 0a 20 20 20 20 2a  ster table.    *
1d020 2a 20 66 6f 72 20 72 65 61 64 20 61 63 63 65 73  * for read acces
1d030 73 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  s returns SQLITE
1d040 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68 69 73 20  _EMPTY. In this 
1d050 63 61 73 65 20 61 6c 77 61 79 73 0a 20 20 20 20  case always.    
1d060 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  ** take the jump
1d070 20 28 73 69 6e 63 65 20 74 68 65 72 65 20 61 72   (since there ar
1d080 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 69 6e 20  e no records in 
1d090 74 68 65 20 74 61 62 6c 65 29 2e 0a 20 20 20 20  the table)..    
1d0a0 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  */.    pc = pOp-
1d0b0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
1d0c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1d0d0 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32 20 2a  de: Seek P1 P2 *
1d0e0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73   * *.**.** P1 is
1d0f0 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63   an open table c
1d100 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20  ursor and P2 is 
1d110 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e  a rowid integer.
1d120 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72    Arrange.** for
1d130 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74   P1 to move so t
1d140 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1d150 20 74 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e   the rowid given
1d160 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P2..**.** Th
1d170 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  is is actually a
1d180 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20   deferred seek. 
1d190 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c   Nothing actuall
1d1a0 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a  y happens until.
1d1b0 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  ** the cursor is
1d1c0 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20   used to read a 
1d1d0 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61  record.  That wa
1d1e0 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a  y, if no reads.*
1d1f0 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65  * occur, no unne
1d200 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70  cessary I/O happ
1d210 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ens..*/.case OP_
1d220 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e  Seek: {    /* in
1d230 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
1d240 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
1d250 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1d260 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1d270 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1d280 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1d290 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1d2a0 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
1d2b0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20  pC->pCursor!=0) 
1d2c0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1d2d0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1d2e0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1d2f0 30 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61  0;.    pIn2 = &a
1d300 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
1d310 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
1d320 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  et = sqlite3Vdbe
1d330 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
1d340 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1d350 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43  alid = 0;.    pC
1d360 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1d370 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
1d380 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f  k;.}.  ../* Opco
1d390 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20  de: Found P1 P2 
1d3a0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
1d3b0 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
1d3c0 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
1d3d0 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1d3e0 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
1d3f0 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
1d400 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
1d410 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
1d420 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
1d430 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
1d440 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a  ** record..**.**
1d450 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1d460 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1d470 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1d480 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1d490 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20   and P4.** is a 
1d4a0 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
1d4b0 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
1d4c0 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
1d4d0 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73   P2 and.** P1 is
1d4e0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1d4f0 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65  t the matching e
1d500 6e 74 72 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  ntry..*/./* Opco
1d510 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20  de: NotFound P1 
1d520 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1d530 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1d540 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1d550 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1d560 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1d570 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1d580 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1d590 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1d5a0 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1d5b0 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1d5c0 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1d5d0 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
1d5e0 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
1d5f0 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
1d600 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
1d610 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
1d620 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78  s not the prefix
1d630 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
1d640 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
1d650 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20  is made to P2.  
1d660 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63  If P1 .** does c
1d670 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20  ontain an entry 
1d680 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74  whose prefix mat
1d690 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72  ches the P3/P4 r
1d6a0 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72  ecord then contr
1d6b0 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f  ol.** falls thro
1d6c0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
1d6d0 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20  instruction and 
1d6e0 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
1d6f0 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61  ing at the.** ma
1d700 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
1d710 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1d720 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
1d730 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65  IsUnique.*/.case
1d740 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20   OP_NotFound:   
1d750 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1d760 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e   */.case OP_Foun
1d770 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
1d780 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
1d790 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  t alreadyExists;
1d7a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1d7b0 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
1d7c0 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55  char *pFree;.  U
1d7d0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
1d7e0 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b  IdxKey;.  Unpack
1d7f0 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68  edRecord r;.  ch
1d800 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e  ar aTempRec[ROUN
1d810 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b  D8(sizeof(Unpack
1d820 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a  edRecord)) + siz
1d830 65 6f 66 28 4d 65 6d 29 2a 33 20 2b 20 37 5d 3b  eof(Mem)*3 + 7];
1d840 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1d850 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 66  TEST.  sqlite3_f
1d860 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  ound_count++;.#e
1d870 6e 64 69 66 0a 0a 20 20 61 6c 72 65 61 64 79 45  ndif..  alreadyE
1d880 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 61 73 73  xists = 0;.  ass
1d890 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1d8a0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1d8b0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1d8c0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
1d8d0 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43  P4_INT32 );.  pC
1d8e0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1d8f0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1d900 70 43 21 3d 30 20 29 3b 0a 20 20 70 49 6e 33 20  pC!=0 );.  pIn3 
1d910 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1d920 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
1d930 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29  C->pCursor!=0) )
1d940 7b 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  {..    assert( p
1d950 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
1d960 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
1d970 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 20 72 2e  .i>0 ){.      r.
1d980 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1d990 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72  KeyInfo;.      r
1d9a0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
1d9b0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20  Op->p4.i;.      
1d9c0 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23  r.aMem = pIn3;.#
1d9d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1d9e0 55 47 0a 20 20 20 20 20 20 7b 20 69 6e 74 20 69  UG.      { int i
1d9f0 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
1da00 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
1da10 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
1da20 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
1da30 23 65 6e 64 69 66 0a 20 20 20 20 20 20 72 2e 66  #endif.      r.f
1da40 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
1da50 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
1da60 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72      pIdxKey = &r
1da70 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1da80 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c     pIdxKey = sql
1da90 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70  ite3VdbeAllocUnp
1daa0 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20 20 20  ackedRecord(.   
1dab0 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49         pC->pKeyI
1dac0 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73  nfo, aTempRec, s
1dad0 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c  izeof(aTempRec),
1dae0 20 26 70 46 72 65 65 0a 20 20 20 20 20 20 29 3b   &pFree.      );
1daf0 20 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 78   .      if( pIdx
1db00 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Key==0 ) goto no
1db10 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 61 73 73 65  _mem;.      asse
1db20 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
1db30 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
1db40 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
1db50 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  3->flags & MEM_Z
1db60 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a  ero)==0 );  /* z
1db70 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79  eroblobs already
1db80 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20   expanded */.   
1db90 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
1dba0 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
1dbb0 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
1dbc0 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b  , pIn3->z, pIdxK
1dbd0 65 79 29 3b 0a 20 20 20 20 20 20 70 49 64 78 4b  ey);.      pIdxK
1dbe0 65 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50  ey->flags |= UNP
1dbf0 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54  ACKED_PREFIX_MAT
1dc00 43 48 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63  CH;.    }.    rc
1dc10 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1dc20 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1dc30 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b  ->pCursor, pIdxK
1dc40 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  ey, 0, 0, &res);
1dc50 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
1dc60 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  .i==0 ){.      s
1dc70 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
1dc80 20 70 46 72 65 65 29 3b 0a 20 20 20 20 7d 0a 20   pFree);.    }. 
1dc90 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1dca0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 72  E_OK ){.      br
1dcb0 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  eak;.    }.    a
1dcc0 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
1dcd0 72 65 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d  res==0);.    pC-
1dce0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1dcf0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
1dd00 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1dd10 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66  _STALE;.  }.  if
1dd20 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1dd30 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69  P_Found ){.    i
1dd40 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  f( alreadyExists
1dd50 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20   ) pc = pOp->p2 
1dd60 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
1dd70 20 20 69 66 28 20 21 61 6c 72 65 61 64 79 45 78    if( !alreadyEx
1dd80 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d  ists ) pc = pOp-
1dd90 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
1dda0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1ddb0 64 65 3a 20 49 73 55 6e 69 71 75 65 20 50 31 20  de: IsUnique P1 
1ddc0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1ddd0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 70   Cursor P1 is op
1dde0 65 6e 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  en on an index b
1ddf0 2d 74 72 65 65 20 2d 20 74 68 61 74 20 69 73 20  -tree - that is 
1de00 74 6f 20 73 61 79 2c 20 61 20 62 74 72 65 65 20  to say, a btree 
1de10 77 68 69 63 68 0a 2a 2a 20 6e 6f 20 64 61 74 61  which.** no data
1de20 20 61 6e 64 20 77 68 65 72 65 20 74 68 65 20 6b   and where the k
1de30 65 79 20 61 72 65 20 72 65 63 6f 72 64 73 20 67  ey are records g
1de40 65 6e 65 72 61 74 65 64 20 62 79 20 4f 50 5f 4d  enerated by OP_M
1de50 61 6b 65 52 65 63 6f 72 64 20 77 69 74 68 0a 2a  akeRecord with.*
1de60 2a 20 74 68 65 20 6c 69 73 74 20 66 69 65 6c 64  * the list field
1de70 20 62 65 69 6e 67 20 74 68 65 20 69 6e 74 65 67   being the integ
1de80 65 72 20 52 4f 57 49 44 20 6f 66 20 74 68 65 20  er ROWID of the 
1de90 65 6e 74 72 79 20 74 68 61 74 20 74 68 65 20 69  entry that the i
1dea0 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20 72 65  ndex.** entry re
1deb0 66 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54  fers to..**.** T
1dec0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 63  he P3 register c
1ded0 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e 74 65 67  ontains an integ
1dee0 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
1def0 2e 20 43 61 6c 6c 20 74 68 69 73 20 72 65 63 6f  . Call this reco
1df00 72 64 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e  rd .** number R.
1df10 20 52 65 67 69 73 74 65 72 20 50 34 20 69 73 20   Register P4 is 
1df20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 20 73  the first in a s
1df30 65 74 20 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f  et of N contiguo
1df40 75 73 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  us registers.** 
1df50 74 68 61 74 20 6d 61 6b 65 20 75 70 20 61 6e 20  that make up an 
1df60 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1df70 65 79 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  ey that can be u
1df80 73 65 64 20 77 69 74 68 20 63 75 72 73 6f 72 20  sed with cursor 
1df90 50 31 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  P1..** The value
1dfa0 20 6f 66 20 4e 20 63 61 6e 20 62 65 20 69 6e 66   of N can be inf
1dfb0 65 72 72 65 64 20 66 72 6f 6d 20 74 68 65 20 63  erred from the c
1dfc0 75 72 73 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65  ursor. N include
1dfd0 73 20 74 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76  s the rowid.** v
1dfe0 61 6c 75 65 20 61 70 70 65 6e 64 65 64 20 74 6f  alue appended to
1dff0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
1e000 69 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 54 68  index record. Th
1e010 69 73 20 72 6f 77 69 64 20 76 61 6c 75 65 20 6d  is rowid value m
1e020 61 79 0a 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74  ay.** or may not
1e030 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20   be the same as 
1e040 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20  R..**.** If any 
1e050 6f 66 20 74 68 65 20 4e 20 72 65 67 69 73 74 65  of the N registe
1e060 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  rs beginning wit
1e070 68 20 72 65 67 69 73 74 65 72 20 50 34 20 63 6f  h register P4 co
1e080 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a  ntains a NULL.**
1e090 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d   value, jump imm
1e0a0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
1e0b0 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c  **.** Otherwise,
1e0c0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1e0d0 6e 20 63 68 65 63 6b 73 20 69 66 20 63 75 72 73  n checks if curs
1e0e0 6f 72 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61  or P1 contains a
1e0f0 6e 20 65 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65  n entry.** where
1e100 20 74 68 65 20 66 69 72 73 74 20 28 4e 2d 31 29   the first (N-1)
1e110 20 66 69 65 6c 64 73 20 6d 61 74 63 68 20 62 75   fields match bu
1e120 74 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75  t the rowid valu
1e130 65 20 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20  e at the end.** 
1e140 6f 66 20 74 68 65 20 69 6e 64 65 78 20 65 6e 74  of the index ent
1e150 72 79 20 69 73 20 6e 6f 74 20 52 2e 20 49 66 20  ry is not R. If 
1e160 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
1e170 20 65 6e 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20   entry, control 
1e180 6a 75 6d 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74  jumps.** to inst
1e190 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
1e1a0 72 77 69 73 65 2c 20 74 68 65 20 72 6f 77 69 64  rwise, the rowid
1e1b0 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74   of the conflict
1e1c0 69 6e 67 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74  ing index.** ent
1e1d0 72 79 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20  ry is copied to 
1e1e0 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20  register P3 and 
1e1f0 63 6f 6e 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68  control falls th
1e200 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1e210 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  t.** instruction
1e220 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1e230 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45  : NotFound, NotE
1e240 78 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a  xists, Found.*/.
1e250 63 61 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65  case OP_IsUnique
1e260 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
1e270 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36  mp, in3 */.  u16
1e280 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f   ii;.  VdbeCurso
1e290 72 20 2a 70 43 78 3b 0a 20 20 42 74 43 75 72 73  r *pCx;.  BtCurs
1e2a0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 31 36  or *pCrsr;.  u16
1e2b0 20 6e 46 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a   nField;.  Mem *
1e2c0 61 4d 78 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  aMx;.  UnpackedR
1e2d0 65 63 6f 72 64 20 72 3b 20 20 20 20 20 20 20 20  ecord r;        
1e2e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 2d 54            /* B-T
1e2f0 72 65 65 20 69 6e 64 65 78 20 73 65 61 72 63 68  ree index search
1e300 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b   key */.  i64 R;
1e310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e330 52 6f 77 69 64 20 73 74 6f 72 65 64 20 69 6e 20  Rowid stored in 
1e340 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a  register P3 */..
1e350 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1e360 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 4d 78 20 3d  Op->p3];.  aMx =
1e370 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69   &aMem[pOp->p4.i
1e380 5d 3b 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74  ];.  /* Assert t
1e390 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 6f  hat the values o
1e3a0 66 20 70 61 72 61 6d 65 74 65 72 73 20 50 31 20  f parameters P1 
1e3b0 61 6e 64 20 50 34 20 61 72 65 20 69 6e 20 72 61  and P4 are in ra
1e3c0 6e 67 65 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74  nge. */.  assert
1e3d0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1e3e0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73  4_INT32 );.  ass
1e3f0 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30  ert( pOp->p4.i>0
1e400 20 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70   && pOp->p4.i<=p
1e410 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65  ->nMem );.  asse
1e420 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1e430 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1e440 72 73 6f 72 20 29 3b 0a 0a 20 20 2f 2a 20 46 69  rsor );..  /* Fi
1e450 6e 64 20 74 68 65 20 69 6e 64 65 78 20 63 75 72  nd the index cur
1e460 73 6f 72 2e 20 2a 2f 0a 20 20 70 43 78 20 3d 20  sor. */.  pCx = 
1e470 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1e480 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  ];.  assert( pCx
1e490 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1e4a0 3d 3d 30 20 29 3b 0a 20 20 70 43 78 2d 3e 73 65  ==0 );.  pCx->se
1e4b0 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  ekResult = 0;.  
1e4c0 70 43 78 2d 3e 63 61 63 68 65 53 74 61 74 75 73  pCx->cacheStatus
1e4d0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1e4e0 20 20 70 43 72 73 72 20 3d 20 70 43 78 2d 3e 70    pCrsr = pCx->p
1e4f0 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66  Cursor;..  /* If
1e500 20 61 6e 79 20 6f 66 20 74 68 65 20 76 61 6c 75   any of the valu
1e510 65 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 61 6b  es are NULL, tak
1e520 65 20 74 68 65 20 6a 75 6d 70 2e 20 2a 2f 0a 20  e the jump. */. 
1e530 20 6e 46 69 65 6c 64 20 3d 20 70 43 78 2d 3e 70   nField = pCx->p
1e540 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 3b  KeyInfo->nField;
1e550 0a 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c  .  for(ii=0; ii<
1e560 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20  nField; ii++){. 
1e570 20 20 20 69 66 28 20 61 4d 78 5b 69 69 5d 2e 66     if( aMx[ii].f
1e580 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
1e590 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
1e5a0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
1e5b0 20 70 43 72 73 72 20 3d 20 30 3b 0a 20 20 20 20   pCrsr = 0;.    
1e5c0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
1e5d0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d   }.  assert( (aM
1e5e0 78 5b 6e 46 69 65 6c 64 5d 2e 66 6c 61 67 73 20  x[nField].flags 
1e5f0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
1e600 3b 0a 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d  ;..  if( pCrsr!=
1e610 30 20 29 7b 0a 20 20 20 20 2f 2a 20 50 6f 70 75  0 ){.    /* Popu
1e620 6c 61 74 65 20 74 68 65 20 69 6e 64 65 78 20 73  late the index s
1e630 65 61 72 63 68 20 6b 65 79 2e 20 2a 2f 0a 20 20  earch key. */.  
1e640 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1e650 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  Cx->pKeyInfo;.  
1e660 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 6e 46 69    r.nField = nFi
1e670 65 6c 64 20 2b 20 31 3b 0a 20 20 20 20 72 2e 66  eld + 1;.    r.f
1e680 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
1e690 50 52 45 46 49 58 5f 53 45 41 52 43 48 3b 0a 20  PREFIX_SEARCH;. 
1e6a0 20 20 20 72 2e 61 4d 65 6d 20 3d 20 61 4d 78 3b     r.aMem = aMx;
1e6b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1e6c0 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69  EBUG.    { int i
1e6d0 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
1e6e0 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
1e6f0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
1e700 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
1e710 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 45  #endif..    /* E
1e720 78 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  xtract the value
1e730 20 6f 66 20 52 20 66 72 6f 6d 20 72 65 67 69 73   of R from regis
1e740 74 65 72 20 50 33 2e 20 2a 2f 0a 20 20 20 20 73  ter P3. */.    s
1e750 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
1e760 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20  egerify(pIn3);. 
1e770 20 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75 2e 69     R = pIn3->u.i
1e780 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63 68  ;..    /* Search
1e790 20 74 68 65 20 42 2d 54 72 65 65 20 69 6e 64 65   the B-Tree inde
1e7a0 78 2e 20 49 66 20 6e 6f 20 63 6f 6e 66 6c 69 63  x. If no conflic
1e7b0 74 69 6e 67 20 72 65 63 6f 72 64 20 69 73 20 66  ting record is f
1e7c0 6f 75 6e 64 2c 20 6a 75 6d 70 0a 20 20 20 20 2a  ound, jump.    *
1e7d0 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69  * to P2. Otherwi
1e7e0 73 65 2c 20 63 6f 70 79 20 74 68 65 20 72 6f 77  se, copy the row
1e7f0 69 64 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69  id of the confli
1e800 63 74 69 6e 67 20 72 65 63 6f 72 64 20 74 6f 0a  cting record to.
1e810 20 20 20 20 2a 2a 20 72 65 67 69 73 74 65 72 20      ** register 
1e820 50 33 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  P3 and fall thro
1e830 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
1e840 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 2a 2f  instruction.  */
1e850 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1e860 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1e870 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20  cked(pCrsr, &r, 
1e880 30 2c 20 30 2c 20 26 70 43 78 2d 3e 73 65 65 6b  0, 0, &pCx->seek
1e890 52 65 73 75 6c 74 29 3b 0a 20 20 20 20 69 66 28  Result);.    if(
1e8a0 20 28 72 2e 66 6c 61 67 73 20 26 20 55 4e 50 41   (r.flags & UNPA
1e8b0 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52  CKED_PREFIX_SEAR
1e8c0 43 48 29 20 7c 7c 20 72 2e 72 6f 77 69 64 3d 3d  CH) || r.rowid==
1e8d0 52 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  R ){.      pc = 
1e8e0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1e8f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 49   }else{.      pI
1e900 6e 33 2d 3e 75 2e 69 20 3d 20 72 2e 72 6f 77 69  n3->u.i = r.rowi
1e910 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  d;.    }.  }.  b
1e920 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1e930 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
1e940 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1e950 20 55 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   Use the content
1e960 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
1e970 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6b 65  as an integer ke
1e980 79 2e 20 20 49 66 20 61 20 72 65 63 6f 72 64 20  y.  If a record 
1e990 0a 2a 2a 20 77 69 74 68 20 74 68 61 74 20 6b 65  .** with that ke
1e9a0 79 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  y does not exist
1e9b0 20 69 6e 20 74 61 62 6c 65 20 6f 66 20 50 31 2c   in table of P1,
1e9c0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1e9d0 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63  . .** If the rec
1e9e0 6f 72 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  ord does exist, 
1e9f0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
1ea00 68 2e 20 20 54 68 65 20 63 75 72 73 6f 72 20 69  h.  The cursor i
1ea10 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74  s left .** point
1ea20 69 6e 67 20 74 6f 20 74 68 65 20 72 65 63 6f 72  ing to the recor
1ea30 64 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  d if it exists..
1ea40 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72  **.** The differ
1ea50 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 69  ence between thi
1ea60 73 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  s operation and 
1ea70 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74 68 61 74  NotFound is that
1ea80 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
1ea90 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 65 20 6b  on assumes the k
1eaa0 65 79 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  ey is an integer
1eab0 20 61 6e 64 20 74 68 61 74 20 50 31 20 69 73 20   and that P1 is 
1eac0 61 20 74 61 62 6c 65 20 77 68 65 72 65 61 73 0a  a table whereas.
1ead0 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75  ** NotFound assu
1eae0 6d 65 73 20 6b 65 79 20 69 73 20 61 20 62 6c 6f  mes key is a blo
1eaf0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72  b constructed fr
1eb00 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e  om MakeRecord an
1eb10 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e  d.** P1 is an in
1eb20 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  dex..**.** See a
1eb30 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1eb40 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a  ound, IsUnique.*
1eb50 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
1eb60 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  sts: {        /*
1eb70 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1eb80 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1eb90 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1eba0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
1ebb0 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e  u64 iKey;..  pIn
1ebc0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1ebd0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  3];.  assert( pI
1ebe0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1ebf0 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
1ec00 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1ec10 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1ec20 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1ec30 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1ec40 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1ec50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1ec60 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
1ec70 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
1ec80 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
1ec90 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1eca0 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  sor;.  if( ALWAY
1ecb0 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20  S(pCrsr!=0) ){. 
1ecc0 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
1ecd0 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  iKey = pIn3->u.i
1ece0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1ecf0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1ed00 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20  acked(pCrsr, 0, 
1ed10 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
1ed20 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69      pC->lastRowi
1ed30 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  d = pIn3->u.i;. 
1ed40 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1ed50 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a  lid = res==0 ?1:
1ed60 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  0;.    pC->nullR
1ed70 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  ow = 0;.    pC->
1ed80 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1ed90 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70  CHE_STALE;.    p
1eda0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1edb0 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72  o = 0;.    if( r
1edc0 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  es!=0 ){.      p
1edd0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1ede0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1edf0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d  C->rowidIsValid=
1ee00 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  =0 );.    }.    
1ee10 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
1ee20 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   res;.  }else{. 
1ee30 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
1ee40 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74 65 6d  ns when an attem
1ee50 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72 65 61  pt to open a rea
1ee60 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65 20  d cursor on the 
1ee70 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d  .    ** sqlite_m
1ee80 61 73 74 65 72 20 74 61 62 6c 65 20 72 65 74 75  aster table retu
1ee90 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59  rns SQLITE_EMPTY
1eea0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63 20  ..    */.    pc 
1eeb0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1eec0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72     assert( pC->r
1eed0 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29  owidIsValid==0 )
1eee0 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65  ;.    pC->seekRe
1eef0 73 75 6c 74 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  sult = 0;.  }.  
1ef00 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1ef10 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31  ode: Sequence P1
1ef20 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1ef30 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76  Find the next av
1ef40 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65  ailable sequence
1ef50 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73   number for curs
1ef60 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20  or P1..** Write 
1ef70 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  the sequence num
1ef80 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ber into registe
1ef90 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71  r P2..** The seq
1efa0 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20  uence number on 
1efb0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e  the cursor is in
1efc0 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20  cremented after 
1efd0 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74  this.** instruct
1efe0 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ion.  .*/.case O
1eff0 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20  P_Sequence: {   
1f000 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1f010 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1f020 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1f030 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1f040 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1f050 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
1f060 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
1f070 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61  pOut->u.i = p->a
1f080 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73  pCsr[pOp->p1]->s
1f090 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65  eqCount++;.  bre
1f0a0 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
1f0b0 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50  e: NewRowid P1 P
1f0c0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47  2 P3 * *.**.** G
1f0d0 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72  et a new integer
1f0e0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
1f0f0 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75  a.k.a "rowid") u
1f100 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74  sed as the key t
1f110 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  o a table..** Th
1f120 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  e record number 
1f130 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
1f140 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20  y used as a key 
1f150 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
1f160 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75  ** table that cu
1f170 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
1f180 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f  o.  The new reco
1f190 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69  rd number is wri
1f1a0 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20  tten.** written 
1f1b0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
1f1c0 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68  **.** If P3>0 th
1f1d0 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73  en P3 is a regis
1f1e0 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
1f1f0 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44  frame of this VD
1f200 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a  BE that holds .*
1f210 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72  * the largest pr
1f220 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74  eviously generat
1f230 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
1f240 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20  . No new record 
1f250 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61  numbers are.** a
1f260 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73  llowed to be les
1f270 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75  s than this valu
1f280 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c  e. When this val
1f290 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20 6d  ue reaches its m
1f2a0 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53  aximum, .** an S
1f2b0 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72  QLITE_FULL error
1f2c0 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54   is generated. T
1f2d0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69  he P3 register i
1f2e0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
1f2f0 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65  he '.** generate
1f300 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
1f310 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69   This P3 mechani
1f320 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65  sm is used to he
1f330 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  lp implement the
1f340 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .** AUTOINCREMEN
1f350 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61  T feature..*/.ca
1f360 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20  se OP_NewRowid: 
1f370 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
1f380 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
1f390 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20  /.  i64 v;      
1f3a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1f3b0 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
1f3c0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1f3d0 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
1f3e0 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65  r of table to ge
1f3f0 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20  t the new rowid 
1f400 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
1f410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1f420 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69  esult of an sqli
1f430 74 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a  te3BtreeLast() *
1f440 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20  /.  int cnt;    
1f450 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1f460 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74  unter to limit t
1f470 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61  he number of sea
1f480 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  rches */.  Mem *
1f490 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
1f4a0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1f4b0 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f  lding largest ro
1f4c0 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52  wid for AUTOINCR
1f4d0 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46  EMENT */.  VdbeF
1f4e0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
1f4f0 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20    /* Root frame 
1f500 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20  of VDBE */..  v 
1f510 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  = 0;.  res = 0;.
1f520 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f530 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1f540 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1f550 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1f560 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1f570 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
1f580 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75 72 73   NEVER(pC->pCurs
1f590 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a  or==0) ){.    /*
1f5a0 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69 61   The zero initia
1f5b0 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20 69  lization above i
1f5c0 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e 65  s all that is ne
1f5d0 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  eded */.  }else{
1f5e0 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
1f5f0 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64   rowid or record
1f600 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65   number (differe
1f610 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65  nt terms for the
1f620 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69   same.    ** thi
1f630 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ng) is obtained 
1f640 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c  in a two-step al
1f650 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a  gorithm..    **.
1f660 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20      ** First we 
1f670 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
1f680 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
1f690 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61  ting rowid and a
1f6a0 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f  dd one.    ** to
1f6b0 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74   that.  But if t
1f6c0 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
1f6d0 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72  ing rowid is alr
1f6e0 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d  eady the maximum
1f6f0 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65  .    ** positive
1f700 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76   integer, we hav
1f710 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67  e to fall throug
1f720 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a  h to the second.
1f730 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69      ** probabili
1f740 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20  stic algorithm. 
1f750 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
1f760 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68   second algorith
1f770 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61  m is to select a
1f780 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d   rowid at random
1f790 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20   and see if.    
1f7a0 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  ** it already ex
1f7b0 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ists in the tabl
1f7c0 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  e.  If it does n
1f7d0 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76  ot exist, we hav
1f7e0 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64  e.    ** succeed
1f7f0 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64  ed.  If the rand
1f800 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78  om rowid does ex
1f810 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61  ist, we select a
1f820 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   new one.    ** 
1f830 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75  and try again, u
1f840 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a  p to 100 times..
1f850 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
1f860 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1f870 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
1f880 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
1f890 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
1f8a0 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
1f8b0 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
1f8c0 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
1f8d0 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
1f8e0 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
1f8f0 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
1f900 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
1f910 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
1f920 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
1f930 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
1f940 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
1f950 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
1f960 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
1f970 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
1f980 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
1f990 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
1f9a0 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
1f9b0 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
1f9c0 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
1f9d0 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
1f9e0 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
1f9f0 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
1fa00 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 76  Rowid ){.      v
1fa10 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47   = sqlite3BtreeG
1fa20 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43  etCachedRowid(pC
1fa30 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1fa40 20 20 69 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20    if( v==0 ){.  
1fa50 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1fa60 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e  e3BtreeLast(pC->
1fa70 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1fa80 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1fa90 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1faa0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1fab0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1fac0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1fad0 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
1fae0 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20         v = 1;   
1faf0 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d  /* IMP: R-61914-
1fb00 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 20  48074 */.       
1fb10 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1fb20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1fb30 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
1fb40 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  lid(pC->pCursor)
1fb50 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63   );.          rc
1fb60 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
1fb70 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73  eySize(pC->pCurs
1fb80 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  or, &v);.       
1fb90 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
1fba0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
1fbb0 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c   Cannot fail fol
1fbc0 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74  lowing BtreeLast
1fbd0 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  () */.          
1fbe0 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44  if( v>=MAX_ROWID
1fbf0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
1fc00 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1fc10 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
1fc20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1fc30 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49       v++;   /* I
1fc40 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38  MP: R-29538-3498
1fc50 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7d  7 */.          }
1fc60 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1fc70 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   }..#ifndef SQLI
1fc80 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
1fc90 45 4d 45 4e 54 0a 20 20 20 20 20 20 69 66 28 20  EMENT.      if( 
1fca0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20  pOp->p3 ){.     
1fcb0 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
1fcc0 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
1fcd0 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
1fce0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1fcf0 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
1fd00 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61       if( p->pFra
1fd10 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  me ){.          
1fd20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
1fd30 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
1fd40 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
1fd50 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
1fd60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73            /* Ass
1fd70 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
1fd80 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
1fd90 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ll. */.         
1fda0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1fdb0 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29  <=pFrame->nMem )
1fdc0 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d  ;.          pMem
1fdd0 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
1fde0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
1fdf0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1fe00 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
1fe10 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
1fe20 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
1fe30 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
1fe40 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
1fe50 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Mem );.         
1fe60 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
1fe70 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
1fe80 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
1fe90 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ge(p, pMem);.   
1fea0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61       }.        a
1feb0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1fec0 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20  d(pMem) );..    
1fed0 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
1fee0 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d  CE(pOp->p3, pMem
1fef0 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
1ff00 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1ff10 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20  ify(pMem);.     
1ff20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d     assert( (pMem
1ff30 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1ff40 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d  t)!=0 );  /* mem
1ff50 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e  (P3) holds an in
1ff60 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  teger */.       
1ff70 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
1ff80 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
1ff90 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1ffa0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
1ffb0 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
1ffc0 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35   /* IMP: R-12275
1ffd0 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20  -61338 */.      
1ffe0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1fff0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
20000 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
20010 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31  f( v<pMem->u.i+1
20020 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20   ){.          v 
20030 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b  = pMem->u.i + 1;
20040 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
20050 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76     pMem->u.i = v
20060 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
20070 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ..      sqlite3B
20080 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
20090 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
200a0 76 3c 4d 41 58 5f 52 4f 57 49 44 20 3f 20 76 2b  v<MAX_ROWID ? v+
200b0 31 20 3a 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  1 : 0);.    }.  
200c0 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e    if( pC->useRan
200d0 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
200e0 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    /* IMPLEMENTAT
200f0 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d  ION-OF: R-07677-
20100 34 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72  41881 If the lar
20110 67 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71  gest ROWID is eq
20120 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20  ual to the.     
20130 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73   ** largest poss
20140 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32  ible integer (92
20150 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
20160 37 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  7) then the data
20170 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e  base.      ** en
20180 67 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b  gine starts pick
20190 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e  ing positive can
201a0 64 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74  didate ROWIDs at
201b0 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20   random until.  
201c0 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20      ** it finds 
201d0 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  one that is not 
201e0 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e  previously used.
201f0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
20200 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20  ( pOp->p3==0 ); 
20210 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65   /* We cannot be
20220 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64   in random rowid
20230 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73   mode if this is
20240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
20260 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
20270 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20  T table. */.    
20280 20 20 2f 2a 20 6f 6e 20 74 68 65 20 66 69 72 73    /* on the firs
20290 74 20 61 74 74 65 6d 70 74 2c 20 73 69 6d 70 6c  t attempt, simpl
202a0 79 20 64 6f 20 6f 6e 65 20 6d 6f 72 65 20 74 68  y do one more th
202b0 61 6e 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  an previous */. 
202c0 20 20 20 20 20 76 20 3d 20 6c 61 73 74 52 6f 77       v = lastRow
202d0 69 64 3b 0a 20 20 20 20 20 20 76 20 26 3d 20 28  id;.      v &= (
202e0 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f  MAX_ROWID>>1); /
202f0 2a 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74  * ensure doesn't
20300 20 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a   go negative */.
20310 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e        v++; /* en
20320 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f  sure non-zero */
20330 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a  .      cnt = 0;.
20340 20 20 20 20 20 20 77 68 69 6c 65 28 20 20 20 28        while(   (
20350 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72  (rc = sqlite3Btr
20360 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
20370 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
20380 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20   (u64)v,.       
20390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203b0 20 20 20 20 20 20 20 20 20 20 30 2c 20 26 72 65            0, &re
203c0 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a  s))==SQLITE_OK).
203d0 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
203e0 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20  res==0).        
203f0 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30      && (++cnt<10
20400 30 29 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0)){.        /* 
20410 63 6f 6c 6c 69 73 69 6f 6e 20 2d 20 74 72 79 20  collision - try 
20420 61 6e 6f 74 68 65 72 20 72 61 6e 64 6f 6d 20 72  another random r
20430 6f 77 69 64 20 2a 2f 0a 20 20 20 20 20 20 20 20  owid */.        
20440 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65  sqlite3_randomne
20450 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76  ss(sizeof(v), &v
20460 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63  );.        if( c
20470 6e 74 3c 35 20 29 7b 0a 20 20 20 20 20 20 20 20  nt<5 ){.        
20480 20 20 2f 2a 20 74 72 79 20 22 73 6d 61 6c 6c 22    /* try "small"
20490 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 73 20 66   random rowids f
204a0 6f 72 20 74 68 65 20 69 6e 69 74 69 61 6c 20 61  or the initial a
204b0 74 74 65 6d 70 74 73 20 2a 2f 0a 20 20 20 20 20  ttempts */.     
204c0 20 20 20 20 20 76 20 26 3d 20 30 78 66 66 66 66       v &= 0xffff
204d0 66 66 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ff;.        }els
204e0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 26  e{.          v &
204f0 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29  = (MAX_ROWID>>1)
20500 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f 65 73  ; /* ensure does
20510 6e 27 74 20 67 6f 20 6e 65 67 61 74 69 76 65 20  n't go negative 
20520 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  */.        }.   
20530 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73       v++; /* ens
20540 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a  ure non-zero */.
20550 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
20560 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
20570 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  && res==0 ){.   
20580 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
20590 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
205a0 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a   R-38219-53002 *
205b0 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  /.        goto a
205c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
205d0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
205e0 20 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20   assert( v>0 ); 
205f0 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d   /* EV: R-40812-
20600 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20  03570 */.    }. 
20610 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
20620 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  lid = 0;.    pC-
20630 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
20640 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
20650 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
20660 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f  _STALE;.  }.  pO
20670 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62  ut->u.i = v;.  b
20680 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
20690 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32  de: Insert P1 P2
206a0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
206b0 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69  Write an entry i
206c0 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66  nto the table of
206d0 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e   cursor P1.  A n
206e0 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63  ew entry is.** c
206f0 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65  reated if it doe
20700 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69  sn't already exi
20710 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66  st or the data f
20720 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a  or an existing.*
20730 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77  * entry is overw
20740 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74  ritten.  The dat
20750 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d  a is the value M
20760 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69  EM_Blob stored i
20770 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75  n register.** nu
20780 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79  mber P2. The key
20790 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
207a0 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b  gister P3. The k
207b0 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20  ey must.** be a 
207c0 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49  MEM_Int..**.** I
207d0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
207e0 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20  ANGE flag of P5 
207f0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
20800 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e   row change coun
20810 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  t is.** incremen
20820 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
20830 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ot).  If the OPF
20840 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c  LAG_LASTROWID fl
20850 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
20860 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69  .** then rowid i
20870 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62  s stored for sub
20880 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62  sequent return b
20890 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
208a0 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
208b0 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f  id() function (o
208c0 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75  therwise it is u
208d0 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a  nmodified)..**.*
208e0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
208f0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
20900 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  ag of P5 is set 
20910 61 6e 64 20 69 66 20 74 68 65 20 72 65 73 75 6c  and if the resul
20920 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74  t of.** the last
20930 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20   seek operation 
20940 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77  (OP_NotExists) w
20950 61 73 20 61 20 73 75 63 63 65 73 73 2c 20 74 68  as a success, th
20960 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61  en this.** opera
20970 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74  tion will not at
20980 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68  tempt to find th
20990 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f  e appropriate ro
209a0 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a  w before doing.*
209b0 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62 75 74  * the insert but
209c0 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76   will instead ov
209d0 65 72 77 72 69 74 65 20 74 68 65 20 72 6f 77 20  erwrite the row 
209e0 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20  that the cursor 
209f0 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  is.** currently 
20a00 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72  pointing to.  Pr
20a10 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72  esumably, the pr
20a20 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  ior OP_NotExists
20a30 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61   opcode.** has a
20a40 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65  lready positione
20a50 64 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72  d the cursor cor
20a60 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73  rectly.  This is
20a70 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
20a80 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20  .** that boosts 
20a90 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61  performance by a
20aa0 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e  voiding redundan
20ab0 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49  t seeks..**.** I
20ac0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55  f the OPFLAG_ISU
20ad0 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65  PDATE flag is se
20ae0 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  t, then this opc
20af0 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61  ode is part of a
20b00 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72  n.** UPDATE oper
20b10 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73  ation.  Otherwis
20b20 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69  e (if the flag i
20b30 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68  s clear) then th
20b40 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  is opcode.** is 
20b50 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52  part of an INSER
20b60 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68  T operation.  Th
20b70 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20  e difference is 
20b80 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74  only important t
20b90 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20  o.** the update 
20ba0 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61  hook..**.** Para
20bb0 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69  meter P4 may poi
20bc0 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63  nt to a string c
20bd0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
20be0 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20  ble-name, or.** 
20bf0 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20  may be NULL. If 
20c00 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  it is not NULL, 
20c10 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d  then the update-
20c20 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65  hook .** (sqlite
20c30 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  3.xUpdateCallbac
20c40 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f  k) is invoked fo
20c50 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73  llowing a succes
20c60 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a  sful insert..**.
20c70 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f  ** (WARNING/TODO
20c80 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65  : If P1 is a pse
20c90 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50  udo-cursor and P
20ca0 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79  2 is dynamically
20cb0 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74  .** allocated, t
20cc0 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66  hen ownership of
20cd0 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72   P2 is transferr
20ce0 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f  ed to the pseudo
20cf0 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72  -cursor.** and r
20d00 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d  egister P2 becom
20d10 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49  es ephemeral.  I
20d20 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
20d30 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20  changed, the.** 
20d40 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
20d50 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63  r P2 will then c
20d60 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72  hange.  Make sur
20d70 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a  e this does not.
20d80 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f  ** cause any pro
20d90 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68  blems.).**.** Th
20da0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
20db0 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62  nly works on tab
20dc0 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  les.  The equiva
20dd0 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
20de0 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20  .** for indices 
20df0 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e  is OP_IdxInsert.
20e00 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
20e10 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50  nsertInt P1 P2 P
20e20 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
20e30 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  is works exactly
20e40 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20   like OP_Insert 
20e50 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
20e60 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e  key is the.** in
20e70 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20  teger value P3, 
20e80 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  not the value of
20e90 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f   the integer sto
20ea0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
20eb0 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P3..*/.case OP_I
20ec0 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f  nsert: .case OP_
20ed0 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d  InsertInt: {.  M
20ee0 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20  em *pData;      
20ef0 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
20f00 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68  ding data for th
20f10 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
20f20 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d  nserted */.  Mem
20f30 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f   *pKey;        /
20f40 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
20f50 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20  ng key  for the 
20f60 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20  record */.  i64 
20f70 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  iKey;         /*
20f80 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57   The integer ROW
20f90 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68  ID or key for th
20fa0 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
20fb0 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62  nserted */.  Vdb
20fc0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f  eCursor *pC;   /
20fd0 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c  * Cursor to tabl
20fe0 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73  e into which ins
20ff0 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a  ert is written *
21000 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20  /.  int nZero;  
21010 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21020 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f  of zero-bytes to
21030 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74   append */.  int
21040 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f   seekResult;   /
21050 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f  * Result of prio
21060 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e  r seek or 0 if n
21070 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  o USESEEKRESULT 
21080 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  flag */.  const 
21090 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64  char *zDb;  /* d
210a0 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75  atabase name - u
210b0 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74  sed by the updat
210c0 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73  e hook */.  cons
210d0 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a  t char *zTbl; /*
210e0 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73   Table name - us
210f0 65 64 20 62 79 20 74 68 65 20 6f 70 64 61 74 65  ed by the opdate
21100 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f   hook */.  int o
21110 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
21120 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74  Opcode for updat
21130 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55  e hook: SQLITE_U
21140 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f  PDATE or SQLITE_
21150 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61  INSERT */..  pDa
21160 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ta = &aMem[pOp->
21170 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
21180 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21190 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
211a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
211b0 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29  IsValid(pData) )
211c0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
211d0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
211e0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
211f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
21200 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
21210 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
21220 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
21230 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
21240 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ble );.  REGISTE
21250 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
21260 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20   pData);..  if( 
21270 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21280 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b  Insert ){.    pK
21290 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ey = &aMem[pOp->
212a0 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p3];.    assert(
212b0 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d   pKey->flags & M
212c0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73  EM_Int );.    as
212d0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
212e0 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45  (pKey) );.    RE
212f0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
21300 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20  ->p3, pKey);.   
21310 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e   iKey = pKey->u.
21320 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  i;.  }else{.    
21330 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
21340 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e  ode==OP_InsertIn
21350 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  t );.    iKey = 
21360 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20  pOp->p3;.  }..  
21370 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
21380 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
21390 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69  ->nChange++;.  i
213a0 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
213b0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20  LAG_LASTROWID ) 
213c0 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
213d0 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79  lastRowid = iKey
213e0 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
213f0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
21400 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20  ){.    pData->z 
21410 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e  = 0;.    pData->
21420 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n = 0;.  }else{.
21430 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
21440 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
21450 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
21460 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c  .  }.  seekResul
21470 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  t = ((pOp->p5 & 
21480 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
21490 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
214a0 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69  Result : 0);.  i
214b0 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
214c0 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
214d0 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d    nZero = pData-
214e0 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73  >u.nZero;.  }els
214f0 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  e{.    nZero = 0
21500 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42  ;.  }.  sqlite3B
21510 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
21520 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
21530 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  0);.  rc = sqlit
21540 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
21550 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b  ->pCursor, 0, iK
21560 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey,.            
21570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
21580 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e  ata->z, pData->n
21590 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20  , nZero,.       
215a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215b0 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46     pOp->p5 & OPF
215c0 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65 65 6b  LAG_APPEND, seek
215d0 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43  Result.  );.  pC
215e0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
215f0 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   0;.  pC->deferr
21600 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
21610 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
21620 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
21630 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
21640 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
21650 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
21660 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21670 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
21680 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
21690 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d  4.z ){.    zDb =
216a0 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
216b0 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62  ].zName;.    zTb
216c0 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
216d0 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70     op = ((pOp->p
216e0 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  5 & OPFLAG_ISUPD
216f0 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
21700 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e  DATE : SQLITE_IN
21710 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72  SERT);.    asser
21720 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
21730 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  ;.    db->xUpdat
21740 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
21750 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44  pdateArg, op, zD
21760 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
21770 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
21780 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
21790 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
217a0 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50  ode: Delete P1 P
217b0 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 * P4 *.**.** D
217c0 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64  elete the record
217d0 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31   at which the P1
217e0 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65   cursor is curre
217f0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  ntly pointing..*
21800 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  *.** The cursor 
21810 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69  will be left poi
21820 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65 72 20  nting at either 
21830 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
21840 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
21850 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
21860 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
21870 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
21880 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
21890 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
218a0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
218b0 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20  ll be a no-op.  
218c0 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74  Hence it is OK t
218d0 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65  o delete.** a re
218e0 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  cord from within
218f0 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a   an Next loop..*
21900 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
21910 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
21920 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20 74 68  of P2 is set, th
21930 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
21940 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
21950 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
21960 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a  wise not)..**.**
21970 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P1 must not be 
21980 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
21990 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65  t has to be a re
219a0 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a  al table with.**
219b0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a   multiple rows..
219c0 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
219d0 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74  ot NULL, then it
219e0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
219f0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 50  the table that P
21a00 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67  1 is.** pointing
21a10 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65   to.  The update
21a20 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e   hook will be in
21a30 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69  voked, if it exi
21a40 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73  sts..** If P4 is
21a50 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74   not NULL then t
21a60 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
21a70 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69  t have been posi
21a80 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20  tioned.** using 
21a90 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f  OP_NotFound prio
21aa0 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68  r to invoking th
21ab0 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  is opcode..*/.ca
21ac0 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a  se OP_Delete: {.
21ad0 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20 56 64    i64 iKey;.  Vd
21ae0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
21af0 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61 73 73   iKey = 0;.  ass
21b00 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
21b10 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
21b20 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
21b30 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
21b40 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
21b50 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
21b60 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
21b70 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64  ;  /* Only valid
21b80 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73   for real tables
21b90 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65  , no pseudotable
21ba0 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68  s */..  /* If th
21bb0 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69  e update-hook wi
21bc0 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73  ll be invoked, s
21bd0 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65 20 72  et iKey to the r
21be0 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a  owid of the.  **
21bf0 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65 74   row being delet
21c00 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ed..  */.  if( d
21c10 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
21c20 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
21c30 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
21c40 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
21c50 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
21c60 77 69 64 49 73 56 61 6c 69 64 20 29 3b 20 20 2f  widIsValid );  /
21c70 2a 20 6c 61 73 74 52 6f 77 69 64 20 73 65 74 20  * lastRowid set 
21c80 62 79 20 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e  by previous OP_N
21c90 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69  otFound */.    i
21ca0 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f  Key = pC->lastRo
21cb0 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54  wid;.  }..  /* T
21cc0 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63  he OP_Delete opc
21cd0 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  ode always follo
21ce0 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73  ws an OP_NotExis
21cf0 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72  ts or OP_Last or
21d00 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  .  ** OP_Column 
21d10 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  on the same tabl
21d20 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e  e without any in
21d30 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72 61 74  tervening operat
21d40 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d  ions that.  ** m
21d50 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76  ight move or inv
21d60 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73  alidate the curs
21d70 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72 73 6f  or.  Hence curso
21d80 72 20 70 43 20 69 73 20 61 6c 77 61 79 73 20 70  r pC is always p
21d90 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20  ointing.  ** to 
21da0 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 64 65  the row to be de
21db0 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
21dc0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
21dd0 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74 69 6f  oveto() operatio
21de0 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20  n.  ** below is 
21df0 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61  always a no-op a
21e00 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20  nd cannot fail. 
21e10 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69 74 20   We will run it 
21e20 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a  anyhow, though,.
21e30 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20 61 67    ** to guard ag
21e40 61 69 6e 73 74 20 66 75 74 75 72 65 20 63 68 61  ainst future cha
21e50 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f 64 65  nges to the code
21e60 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a   generator..  **
21e70 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
21e80 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
21e90 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
21ea0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
21eb0 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e  eto(pC);.  if( N
21ec0 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
21ed0 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  OK) ) goto abort
21ee0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
21ef0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
21f00 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
21f10 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20  >pCursor, 0);.  
21f20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
21f30 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72  eDelete(pC->pCur
21f40 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  sor);.  pC->cach
21f50 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21f60 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
21f70 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
21f80 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
21f90 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
21fa0 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
21fb0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
21fc0 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
21fd0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
21fe0 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
21ff0 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
22000 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62   const char *zTb
22010 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
22020 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
22030 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
22040 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45  teArg, SQLITE_DE
22050 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  LETE, zDb, zTbl,
22060 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
22070 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
22080 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
22090 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p2 & OPFLAG_NCH
220a0 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
220b0 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  e++;.  break;.}.
220c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
220d0 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a  Count * * * * *.
220e0 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
220f0 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
22100 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
22110 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
22120 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
22130 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
22140 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
22150 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
22160 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a  3_changes())..**
22170 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e   Then the VMs in
22180 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f  ternal change co
22190 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20  unter resets to 
221a0 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73  0..** This is us
221b0 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
221c0 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20  ograms..*/.case 
221d0 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b  OP_ResetCount: {
221e0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
221f0 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
22200 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e  nChange);.  p->n
22210 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72  Change = 0;.  br
22220 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
22230 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  e: SorterCompare
22240 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
22250 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63  P1 is a sorter c
22260 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74  ursor. This inst
22270 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73  ruction compares
22280 20 74 68 65 20 72 65 63 6f 72 64 20 62 6c 6f 62   the record blob
22290 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   in .** register
222a0 20 50 33 20 77 69 74 68 20 74 68 65 20 65 6e 74   P3 with the ent
222b0 72 79 20 74 68 61 74 20 74 68 65 20 73 6f 72 74  ry that the sort
222c0 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e  er cursor curren
222d0 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 0a 2a  tly points to..*
222e0 2a 20 49 66 2c 20 65 78 63 6c 75 64 69 6e 67 20  * If, excluding 
222f0 74 68 65 20 72 6f 77 69 64 20 66 69 65 6c 64 73  the rowid fields
22300 20 61 74 20 74 68 65 20 65 6e 64 2c 20 74 68 65   at the end, the
22310 20 74 77 6f 20 72 65 63 6f 72 64 73 20 61 72 65   two records are
22320 20 61 20 6d 61 74 63 68 2c 0a 2a 2a 20 66 61 6c   a match,.** fal
22330 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
22340 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
22350 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 6a 75  n. Otherwise, ju
22360 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
22370 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
22380 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20  _SorterCompare: 
22390 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
223a0 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  pC;.  int res;..
223b0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
223c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
223d0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
223e0 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
223f0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 72  em[pOp->p3];.  r
22400 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
22410 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c  orterCompare(pC,
22420 20 70 49 6e 33 2c 20 26 72 65 73 29 3b 0a 20 20   pIn3, &res);.  
22430 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
22440 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
22450 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a   }.  break;.};..
22460 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
22470 72 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20  rData P1 P2 * * 
22480 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  *.**.** Write in
22490 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
224a0 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65  he current sorte
224b0 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65  r data for sorte
224c0 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  r cursor P1..*/.
224d0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61  case OP_SorterDa
224e0 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
224f0 6f 72 20 2a 70 43 3b 0a 0a 23 69 66 6e 64 65 66  or *pC;..#ifndef
22500 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52   SQLITE_OMIT_MER
22510 47 45 5f 53 4f 52 54 0a 20 20 70 4f 75 74 20 3d  GE_SORT.  pOut =
22520 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
22530 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
22540 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
22550 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65  ert( pC->isSorte
22560 72 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  r );.  rc = sqli
22570 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77  te3VdbeSorterRow
22580 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 23  key(pC, pOut);.#
22590 65 6c 73 65 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  else.  pOp->opco
225a0 64 65 20 3d 20 4f 50 5f 52 6f 77 4b 65 79 3b 0a  de = OP_RowKey;.
225b0 20 20 70 63 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20    pc--;.#endif. 
225c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
225d0 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31  code: RowData P1
225e0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
225f0 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
22600 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
22610 65 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72  ete row data for
22620 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
22630 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
22640 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
22650 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69   data.  .** It i
22660 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e  s just copied on
22670 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74  to the P2 regist
22680 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
22690 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
226a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
226b0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
226c0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
226d0 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
226e0 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
226f0 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
22700 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
22710 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
22720 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  le..*/./* Opcode
22730 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a  : RowKey P1 P2 *
22740 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
22750 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
22760 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
22770 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f  ow key for curso
22780 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
22790 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
227a0 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
227b0 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73    .** The key is
227c0 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
227d0 20 50 33 20 72 65 67 69 73 74 65 72 20 65 78 61   P3 register exa
227e0 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
227f0 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
22800 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
22810 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
22820 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
22830 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
22840 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
22850 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
22860 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
22870 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
22880 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a  .case OP_RowKey:
22890 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61  .case OP_RowData
228a0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
228b0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
228c0 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e   *pCrsr;.  u32 n
228d0 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20  ;.  i64 n64;..  
228e0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
228f0 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p2];.  memAbou
22900 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
22910 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74  t);..  /* Note t
22920 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52  hat RowKey and R
22930 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c  owData are reall
22940 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  y exactly the sa
22950 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a  me instruction *
22960 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
22970 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22980 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
22990 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
229a0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
229b0 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72  rt( pC->isSorter
229c0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
229d0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20   pC->isTable || 
229e0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
229f0 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
22a00 65 72 74 28 20 70 43 2d 3e 69 73 49 6e 64 65 78  ert( pC->isIndex
22a10 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
22a20 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
22a30 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
22a40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22a50 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20  nullRow==0 );.  
22a60 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
22a70 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
22a80 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
22a90 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70  Cursor!=0 );.  p
22aa0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
22ab0 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71  or;.  assert( sq
22ac0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
22ad0 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
22ae0 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52  ;..  /* The OP_R
22af0 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77  owKey and OP_Row
22b00 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77  Data opcodes alw
22b10 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f  ays follow OP_No
22b20 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20  tExists or.  ** 
22b30 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78  OP_Rewind/Op_Nex
22b40 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76  t with no interv
22b50 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  ening instructio
22b60 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e  ns that might in
22b70 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74 68  validate.  ** th
22b80 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65  e cursor.  Hence
22b90 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
22ba0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
22bb0 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 69 73  Moveto() call is
22bc0 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61 20 6e   always.  ** a n
22bd0 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e 65 76  o-op and can nev
22be0 65 72 20 66 61 69 6c 2e 20 20 42 75 74 20 77 65  er fail.  But we
22bf0 20 6c 65 61 76 65 20 69 74 20 69 6e 20 70 6c 61   leave it in pla
22c00 63 65 20 61 73 20 61 20 73 61 66 65 74 79 2e 0a  ce as a safety..
22c10 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
22c20 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
22c30 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  o==0 );.  rc = s
22c40 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
22c50 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
22c60 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
22c70 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62  TE_OK) ) goto ab
22c80 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
22c90 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49  ;..  if( pC->isI
22ca0 6e 64 65 78 20 29 7b 0a 20 20 20 20 61 73 73 65  ndex ){.    asse
22cb0 72 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65  rt( !pC->isTable
22cc0 20 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59   );.    VVA_ONLY
22cd0 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
22ce0 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
22cf0 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61 73 73  , &n64);.    ass
22d00 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
22d10 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72 75 65  OK );    /* True
22d20 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
22d30 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20  orMoveto() call 
22d40 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66 28  above */.    if(
22d50 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b   n64>db->aLimit[
22d60 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
22d70 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
22d80 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
22d90 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32 29 6e  }.    n = (u32)n
22da0 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  64;.  }else{.   
22db0 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
22dc0 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
22dd0 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29 3b  Size(pCrsr, &n);
22de0 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
22df0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
22e00 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63   /* DataSize() c
22e10 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20  annot fail */.  
22e20 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d    if( n>(u32)db-
22e30 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
22e40 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
22e50 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
22e60 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ig;.    }.  }.  
22e70 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
22e80 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20  emGrow(pOut, n, 
22e90 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  0) ){.    goto n
22ea0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75  o_mem;.  }.  pOu
22eb0 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53  t->n = n;.  MemS
22ec0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
22ed0 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66   MEM_Blob);.  if
22ee0 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
22ef0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
22f00 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c  3BtreeKey(pCrsr,
22f10 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
22f20 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
22f30 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
22f40 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  ata(pCrsr, 0, n,
22f50 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20   pOut->z);.  }. 
22f60 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
22f70 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
22f80 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
22f90 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74  s ever cast to t
22fa0 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f  ext */.  UPDATE_
22fb0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
22fc0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
22fd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64  /* Opcode: Rowid
22fe0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
22ff0 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69  ** Store in regi
23000 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
23010 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
23020 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65  key of the table
23030 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50   entry that.** P
23040 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
23050 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50  oint to..**.** P
23060 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  1 can be either 
23070 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  an ordinary tabl
23080 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74  e or a virtual t
23090 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65  able.  There use
230a0 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70  d to.** be a sep
230b0 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20  arate OP_VRowid 
230c0 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77  opcode for use w
230d0 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ith virtual tabl
230e0 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20  es, but this.** 
230f0 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77  one opcode now w
23100 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61  orks for both ta
23110 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61  ble types..*/.ca
23120 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20  se OP_Rowid: {  
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23140 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
23150 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
23160 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a  r *pC;.  i64 v;.
23170 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
23180 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
23190 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
231a0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72  Module;..  asser
231b0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
231c0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
231d0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
231e0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
231f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
23200 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
23210 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
23220 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52  ==0 || pC->nullR
23230 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  ow );.  if( pC->
23240 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70  nullRow ){.    p
23250 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
23260 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b  _Null;.    break
23270 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  ;.  }else if( pC
23280 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
23290 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e   ){.    v = pC->
232a0 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69  movetoTarget;.#i
232b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
232c0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
232d0 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70   }else if( pC->p
232e0 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20  VtabCursor ){.  
232f0 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56    pVtab = pC->pV
23300 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
23310 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ;.    pModule = 
23320 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
23330 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64      assert( pMod
23340 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20  ule->xRowid );. 
23350 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
23360 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56 74 61  >xRowid(pC->pVta
23370 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  bCursor, &v);.  
23380 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d    importVtabErrM
23390 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65  sg(p, pVtab);.#e
233a0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
233b0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
233c0 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
233d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
233e0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72  rsor!=0 );.    r
233f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
23400 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
23410 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
23420 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
23430 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
23440 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
23450 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 70 43 2d  ){.      v = pC-
23460 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20  >lastRowid;.    
23470 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
23480 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
23490 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
234a0 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 61 73  r, &v);.      as
234b0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
234c0 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79  _OK );  /* Alway
234d0 73 20 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20  s so because of 
234e0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61  CursorMoveto() a
234f0 62 6f 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  bove */.    }.  
23500 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
23510 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
23520 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f  * Opcode: NullRo
23530 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  w P1 * * * *.**.
23540 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73  ** Move the curs
23550 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20  or P1 to a null 
23560 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c  row.  Any OP_Col
23570 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  umn operations.*
23580 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69  * that occur whi
23590 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  le the cursor is
235a0 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77   on the null row
235b0 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20   will always.** 
235c0 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f  write a NULL..*/
235d0 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77  .case OP_NullRow
235e0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
235f0 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
23600 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
23610 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
23620 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
23630 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
23640 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
23650 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
23660 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 1;.  pC->rowid
23670 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 61  IsValid = 0;.  a
23680 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
23690 6f 72 20 7c 7c 20 70 43 2d 3e 70 56 74 61 62 43  or || pC->pVtabC
236a0 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70  ursor );.  if( p
236b0 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20  C->pCursor ){.  
236c0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
236d0 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43  earCursor(pC->pC
236e0 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
236f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23700 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20  e: Last P1 P2 * 
23710 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
23720 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
23730 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
23740 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
23750 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
23760 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c  l refer to the l
23770 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
23780 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
23790 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
237a0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
237b0 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
237c0 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
237d0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
237e0 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
237f0 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
23800 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
23810 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
23820 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
23830 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
23840 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
23850 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
23860 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
23870 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
23880 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
23890 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
238a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
238b0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
238c0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
238d0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
238e0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
238f0 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
23900 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
23910 72 65 73 20 3d 20 30 3b 0a 20 20 69 66 28 20 41  res = 0;.  if( A
23920 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20  LWAYS(pCrsr!=0) 
23930 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
23940 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72  te3BtreeLast(pCr
23950 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20  sr, &res);.  }. 
23960 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
23970 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65  u8)res;.  pC->de
23980 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
23990 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
239a0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
239b0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
239c0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
239d0 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 72 65   pOp->p2>0 && re
239e0 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
239f0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
23a00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
23a10 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
23a20 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
23a30 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
23a40 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
23a50 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
23a60 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
23a70 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
23a80 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
23a90 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
23aa0 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
23ab0 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
23ac0 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
23ad0 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
23ae0 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
23af0 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
23b00 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
23b10 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
23b20 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
23b30 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
23b40 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
23b50 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
23b60 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
23b70 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
23b80 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
23b90 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
23ba0 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
23bb0 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
23bc0 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
23bd0 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
23be0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
23bf0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
23c00 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
23c10 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
23c20 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
23c30 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a  orterSort:    /*
23c40 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
23c50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47  SQLITE_OMIT_MERG
23c60 45 5f 53 4f 52 54 0a 20 20 70 4f 70 2d 3e 6f 70  E_SORT.  pOp->op
23c70 63 6f 64 65 20 3d 20 4f 50 5f 53 6f 72 74 3b 0a  code = OP_Sort;.
23c80 23 65 6e 64 69 66 0a 63 61 73 65 20 4f 50 5f 53  #endif.case OP_S
23c90 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ort: {        /*
23ca0 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
23cb0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
23cc0 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
23cd0 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  ++;.  sqlite3_se
23ce0 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65  arch_count--;.#e
23cf0 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  ndif.  p->aCount
23d00 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
23d10 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a  ATUS_SORT-1]++;.
23d20 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
23d30 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
23d40 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
23d50 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
23d60 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
23d70 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
23d80 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
23d90 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
23da0 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
23db0 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
23dc0 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
23dd0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
23de0 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
23df0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
23e00 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
23e10 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
23e20 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
23e30 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
23e40 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
23e50 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
23e60 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
23e70 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
23e80 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
23e90 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
23ea0 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20  P_Rewind: {     
23eb0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
23ec0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23ed0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
23ee0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
23ef0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
23f00 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
23f10 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
23f20 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
23f30 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
23f40 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
23f50 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72  rt( pC->isSorter
23f60 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
23f70 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29  OP_SorterSort) )
23f80 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 69  ;.  res = 1;.  i
23f90 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
23fa0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
23fb0 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
23fc0 69 6e 64 28 64 62 2c 20 70 43 2c 20 26 72 65 73  ind(db, pC, &res
23fd0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
23fe0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
23ff0 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  sor;.    assert(
24000 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63   pCrsr );.    rc
24010 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
24020 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  irst(pCrsr, &res
24030 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46 69 72  );.    pC->atFir
24040 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30  st = res==0 ?1:0
24050 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
24060 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
24070 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
24080 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
24090 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
240a0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  Valid = 0;.  }. 
240b0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
240c0 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
240d0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
240e0 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
240f0 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
24100 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
24110 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
24120 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
24130 65 78 74 20 50 31 20 50 32 20 2a 20 50 34 20 50  ext P1 P2 * P4 P
24140 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  5.**.** Advance 
24150 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
24160 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
24170 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61  he next key/data
24180 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
24190 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
241a0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
241b0 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20   more key/value 
241c0 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
241d0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
241e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
241f0 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
24200 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61   the cursor adva
24210 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66  nce was successf
24220 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
24230 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
24240 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
24250 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
24260 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
24270 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
24280 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
24290 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
242a0 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
242b0 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
242c0 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
242d0 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a  3BtreeNext()..**
242e0 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
242f0 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
24300 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
24310 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
24320 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
24330 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
24340 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
24350 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  emented..**.** S
24360 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f  ee also: Prev.*/
24370 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
24380 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a   P1 P2 * * P5.**
24390 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73  .** Back up curs
243a0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
243b0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
243c0 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61  revious key/data
243d0 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
243e0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
243f0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
24400 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c  previous key/val
24410 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
24420 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
24430 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
24440 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
24450 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62   if the cursor b
24460 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73  ackup was succes
24470 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
24480 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
24490 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
244a0 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
244b0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
244c0 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
244d0 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
244e0 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
244f0 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
24500 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
24510 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
24520 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
24530 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
24540 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
24550 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
24560 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
24570 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
24580 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
24590 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
245a0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
245b0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
245c0 4e 65 78 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Next:    /* jump
245d0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
245e0 45 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52  E_OMIT_MERGE_SOR
245f0 54 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  T.  pOp->opcode 
24600 3d 20 4f 50 5f 4e 65 78 74 3b 0a 23 65 6e 64 69  = OP_Next;.#endi
24610 66 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20  f.case OP_Prev: 
24620 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
24630 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
24640 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
24650 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
24660 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
24670 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f  s;..  CHECK_FOR_
24680 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 61 73 73  INTERRUPT;.  ass
24690 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
246a0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
246b0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
246c0 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 41 72 72 61  t( pOp->p5<=Arra
246d0 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65  ySize(p->aCounte
246e0 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  r) );.  pC = p->
246f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24700 20 20 69 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20    if( pC==0 ){. 
24710 20 20 20 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65     break;  /* Se
24720 65 20 74 69 63 6b 65 74 20 23 32 32 37 33 20 2a  e ticket #2273 *
24730 2f 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  /.  }.  assert( 
24740 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70  pC->isSorter==(p
24750 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
24760 6f 72 74 65 72 4e 65 78 74 29 20 29 3b 0a 20 20  orterNext) );.  
24770 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  if( isSorter(pC)
24780 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
24790 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
247a0 53 6f 72 74 65 72 4e 65 78 74 20 29 3b 0a 20 20  SorterNext );.  
247b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
247c0 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c  beSorterNext(db,
247d0 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65   pC, &res);.  }e
247e0 6c 73 65 7b 0a 20 20 20 20 72 65 73 20 3d 20 31  lse{.    res = 1
247f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
24800 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
24810 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
24820 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29  t( pC->pCursor )
24830 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
24840 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
24850 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  xt || pOp->p4.xA
24860 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
24870 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 20 20  treeNext );.    
24880 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
24890 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20  ode!=OP_Prev || 
248a0 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
248b0 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  ==sqlite3BtreePr
248c0 65 76 69 6f 75 73 20 29 3b 0a 20 20 20 20 72 63  evious );.    rc
248d0 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61   = pOp->p4.xAdva
248e0 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  nce(pC->pCursor,
248f0 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20 20 70 43   &res);.  }.  pC
24900 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
24910 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  res;.  pC->cache
24920 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
24930 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d  TALE;.  if( res=
24940 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
24950 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
24960 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 20 70 2d  if( pOp->p5 ) p-
24970 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70  >aCounter[pOp->p
24980 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  5-1]++;.#ifdef S
24990 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
249a0 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
249b0 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
249c0 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  }.  pC->rowidIsV
249d0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62 72 65 61  alid = 0;.  brea
249e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
249f0 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32   IdxInsert P1 P2
24a00 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 52   P3 * P5.**.** R
24a10 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73  egister P2 holds
24a20 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65   an SQL index ke
24a30 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  y made using the
24a40 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  .** MakeRecord i
24a50 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68  nstructions.  Th
24a60 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73  is opcode writes
24a70 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74   that key.** int
24a80 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20  o the index P1. 
24a90 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e   Data for the en
24aa0 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a  try is nil..**.*
24ab0 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74  * P3 is a flag t
24ac0 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68  hat provides a h
24ad0 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65  int to the b-tre
24ae0 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69  e layer that thi
24af0 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c  s.** insert is l
24b00 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
24b10 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ppend..**.** Thi
24b20 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
24b30 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64  ly works for ind
24b40 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  ices.  The equiv
24b50 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
24b60 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20  n.** for tables 
24b70 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f  is OP_Insert..*/
24b80 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49  .case OP_SorterI
24b90 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20  nsert:       /* 
24ba0 69 6e 32 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  in2 */.#ifdef SQ
24bb0 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f  LITE_OMIT_MERGE_
24bc0 53 4f 52 54 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  SORT.  pOp->opco
24bd0 64 65 20 3d 20 4f 50 5f 49 64 78 49 6e 73 65 72  de = OP_IdxInser
24be0 74 3b 0a 23 65 6e 64 69 66 0a 63 61 73 65 20 4f  t;.#endif.case O
24bf0 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20  P_IdxInsert: {  
24c00 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
24c10 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
24c20 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
24c30 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b  rsr;.  int nKey;
24c40 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
24c50 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Key;..  assert( 
24c60 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
24c70 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
24c80 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
24c90 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
24ca0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
24cb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
24cc0 73 53 6f 72 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f  sSorter==(pOp->o
24cd0 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
24ce0 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e  Insert) );.  pIn
24cf0 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
24d00 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  2];.  assert( pI
24d10 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
24d20 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20  Blob );.  pCrsr 
24d30 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
24d40 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73   if( ALWAYS(pCrs
24d50 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73  r!=0) ){.    ass
24d60 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
24d70 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ==0 );.    rc = 
24d80 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
24d90 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
24da0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
24db0 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
24dc0 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  ) ){.        rc 
24dd0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
24de0 74 65 72 57 72 69 74 65 28 64 62 2c 20 70 43 2c  terWrite(db, pC,
24df0 20 70 49 6e 32 29 3b 0a 20 20 20 20 20 20 7d 65   pIn2);.      }e
24e00 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 4b 65  lse{.        nKe
24e10 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20  y = pIn2->n;.   
24e20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32       zKey = pIn2
24e30 2d 3e 7a 3b 0a 20 20 20 20 20 20 20 20 72 63 20  ->z;.        rc 
24e40 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
24e50 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79  sert(pCrsr, zKey
24e60 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30  , nKey, "", 0, 0
24e70 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20  , pOp->p3, .    
24e80 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70          ((pOp->p
24e90 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
24ea0 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
24eb0 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a  seekResult : 0).
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20              );. 
24ed0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
24ee0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
24ef0 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  o==0 );.        
24f00 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
24f10 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
24f20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
24f30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
24f40 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
24f50 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
24f60 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
24f70 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
24f80 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
24f90 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
24fa0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
24fb0 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
24fc0 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
24fd0 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
24fe0 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
24ff0 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
25000 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
25010 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
25020 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
25030 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
25040 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
25050 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
25060 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
25070 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
25080 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
25090 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  2+pOp->p3<=p->nM
250a0 65 6d 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  em+1 );.  assert
250b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
250c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
250d0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
250e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
250f0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
25100 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
25110 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
25120 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
25130 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
25140 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
25150 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
25160 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
25170 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b      r.flags = 0;
25180 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
25190 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69  Mem[pOp->p2];.#i
251a0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
251b0 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
251c0 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
251d0 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
251e0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
251f0 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
25200 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  dif.    rc = sql
25210 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
25220 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
25230 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
25240 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
25250 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
25260 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
25270 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
25280 28 70 43 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20  (pCrsr);.    }. 
25290 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
252a0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
252b0 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   );.    pC->cach
252c0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
252d0 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65  STALE;.  }.  bre
252e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
252f0 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32  : IdxRowid P1 P2
25300 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
25310 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
25320 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77   P2 an integer w
25330 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74  hich is the last
25340 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65   entry in the re
25350 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65  cord at.** the e
25360 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  nd of the index 
25370 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  key pointed to b
25380 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68  y cursor P1.  Th
25390 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c  is integer shoul
253a0 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69  d be.** the rowi
253b0 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  d of the table e
253c0 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68  ntry to which th
253d0 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70  is index entry p
253e0 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  oints..**.** See
253f0 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61   also: Rowid, Ma
25400 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73  keRecord..*/.cas
25410 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b  e OP_IdxRowid: {
25420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25430 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
25440 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a   */.  BtCursor *
25450 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72  pCrsr;.  VdbeCur
25460 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72  sor *pC;.  i64 r
25470 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28  owid;..  assert(
25480 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
25490 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
254a0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
254b0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
254c0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
254d0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
254e0 70 43 75 72 73 6f 72 3b 0a 20 20 70 4f 75 74 2d  pCursor;.  pOut-
254f0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
25500 6c 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  l;.  if( ALWAYS(
25510 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
25520 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
25530 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
25540 29 3b 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  );.    if( NEVER
25550 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (rc) ) goto abor
25560 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
25570 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
25580 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
25590 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
255a0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
255b0 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  );.    if( !pC->
255c0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
255d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
255e0 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43  eIdxRowid(db, pC
255f0 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  rsr, &rowid);.  
25600 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
25610 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
25620 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
25630 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
25640 7d 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e  }.      pOut->u.
25650 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20  i = rowid;.     
25660 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
25670 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20  EM_Int;.    }.  
25680 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
25690 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50   Opcode: IdxGE P
256a0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
256b0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
256c0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
256d0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
256e0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
256f0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
25700 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44   omits the ROWID
25710 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
25720 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
25730 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
25740 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
25750 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
25760 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52  , ignoring the R
25770 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
25780 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
25790 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
257a0 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
257b0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
257c0 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
257d0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
257e0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
257f0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
25800 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
25810 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
25820 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68  non-zero then th
25830 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69  e key value is i
25840 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65  ncreased by an e
25850 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72  psilon .** prior
25860 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   to the comparis
25870 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20 74  on.  This make t
25880 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
25890 69 6b 65 20 49 64 78 47 54 20 65 78 63 65 70 74  ike IdxGT except
258a0 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65 20  .** that if the 
258b0 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74 65  key from registe
258c0 72 20 50 33 20 69 73 20 61 20 70 72 65 66 69 78  r P3 is a prefix
258d0 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20 74   of the key in t
258e0 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  he cursor,.** th
258f0 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
25900 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f 75  e whereas it wou
25910 6c 64 20 62 65 20 74 72 75 65 20 77 69 74 68 20  ld be true with 
25920 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  IdxGT..*/./* Opc
25930 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32  ode: IdxLT P1 P2
25940 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
25950 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
25960 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
25970 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
25980 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
25990 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
259a0 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
259b0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
259c0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
259d0 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
259e0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
259f0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
25a00 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
25a10 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
25a20 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
25a30 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
25a40 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
25a50 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
25a60 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
25a70 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
25a80 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
25a90 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
25aa0 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
25ab0 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
25ac0 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
25ad0 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
25ae0 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20  on prior .** to 
25af0 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
25b00 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20   This makes the 
25b10 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65  opcode work like
25b20 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20   IdxLE..*/.case 
25b30 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
25b40 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
25b50 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20  se OP_IdxGE: {  
25b60 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
25b70 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
25b80 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
25b90 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
25ba0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
25bb0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
25bc0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
25bd0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
25be0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
25bf0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
25c00 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
25c10 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28 20 41  dered );.  if( A
25c20 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f  LWAYS(pC->pCurso
25c30 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73  r!=0) ){.    ass
25c40 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
25c50 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
25c60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25c70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
25c80 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =1 );.    assert
25c90 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
25ca0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 72  4_INT32 );.    r
25cb0 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
25cc0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
25cd0 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
25ce0 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 69 66 28  p->p4.i;.    if(
25cf0 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
25d00 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
25d10 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55  CKED_INCRKEY | U
25d20 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d  NPACKED_PREFIX_M
25d30 41 54 43 48 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ATCH;.    }else{
25d40 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  .      r.flags =
25d50 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
25d60 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20 20  _MATCH;.    }.  
25d70 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
25d80 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
25d90 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
25da0 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
25db0 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
25dc0 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
25dd0 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
25de0 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
25df0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
25e00 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
25e10 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29  re(pC, &r, &res)
25e20 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
25e30 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
25e40 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d  ){.      res = -
25e50 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  res;.    }else{.
25e60 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
25e70 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
25e80 78 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73  xGE );.      res
25e90 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
25ea0 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20  ( res>0 ){.     
25eb0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
25ec0 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1 ;.    }.  }.  
25ed0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
25ee0 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
25ef0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
25f00 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
25f10 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
25f20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
25f30 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
25f40 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
25f50 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
25f60 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
25f70 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
25f80 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
25f90 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
25fa0 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
25fb0 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
25fc0 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
25fd0 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
25fe0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
25ff0 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
26000 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
26010 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
26020 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
26030 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
26040 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
26050 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
26060 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
26070 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
26080 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
26090 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
260a0 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
260b0 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
260c0 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
260d0 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
260e0 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
260f0 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
26100 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
26110 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
26120 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
26130 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
26140 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
26150 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
26160 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
26170 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20  ster P2.  If no 
26180 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e  page .** movemen
26190 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
261a0 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
261b0 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
261c0 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20  was already .** 
261d0 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
261e0 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
261f0 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
26200 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
26210 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  P2..** If AUTOVA
26220 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
26230 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
26240 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
26250 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
26260 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
26270 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
26280 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70   {     /* out2-p
26290 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
262a0 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74  nt iMoved;.  int
262b0 20 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70   iCnt;.  Vdbe *p
262c0 56 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Vdbe;.  int iDb;
262d0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
262e0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
262f0 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20  LE.  iCnt = 0;. 
26300 20 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70   for(pVdbe=db->p
26310 56 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64  Vdbe; pVdbe; pVd
26320 62 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78  be = pVdbe->pNex
26330 74 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62  t){.    if( pVdb
26340 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d  e->magic==VDBE_M
26350 41 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62  AGIC_RUN && pVdb
26360 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c  e->inVtabMethod<
26370 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d  2 && pVdbe->pc>=
26380 30 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b  0 ){.      iCnt+
26390 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c  +;.    }.  }.#el
263a0 73 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e  se.  iCnt = db->
263b0 61 63 74 69 76 65 56 64 62 65 43 6e 74 3b 0a 23  activeVdbeCnt;.#
263c0 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c  endif.  pOut->fl
263d0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
263e0 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a    if( iCnt>1 ){.
263f0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
26400 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65  LOCKED;.    p->e
26410 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f  rrorAction = OE_
26420 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Abort;.  }else{.
26430 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70      iDb = pOp->p
26440 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  3;.    assert( i
26450 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73  Cnt==1 );.    as
26460 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
26470 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
26480 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b  )1)<<iDb))!=0 );
26490 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
264a0 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28  3BtreeDropTable(
264b0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
264c0 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76  , pOp->p1, &iMov
264d0 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ed);.    pOut->f
264e0 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
264f0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
26500 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20  iMoved;.#ifndef 
26510 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
26520 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72  VACUUM.    if( r
26530 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
26540 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20  iMoved!=0 ){.   
26550 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61     sqlite3RootPa
26560 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c  geMoved(db, iDb,
26570 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31   iMoved, pOp->p1
26580 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  );.      /* All 
26590 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61  OP_Destroy opera
265a0 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74  tions occur on t
265b0 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f  he same btree */
265c0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
265d0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
265e0 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68  t==0 || resetSch
265f0 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b  emaOnFault==iDb+
26600 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74  1 );.      reset
26610 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
26620 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e  iDb+1;.    }.#en
26630 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
26640 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
26650 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a  lear P1 P2 P3.**
26660 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
26670 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
26680 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
26690 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
266a0 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65  t page.** in the
266b0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
266c0 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20  s given by P1.  
266d0 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74  But, unlike Dest
266e0 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72  roy, do not.** r
266f0 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20  emove the table 
26700 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68  or index from th
26710 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
26720 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
26730 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20   being clear is 
26740 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
26750 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d  base file if P2=
26760 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31  =0.  If.** P2==1
26770 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
26780 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
26790 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
267a0 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
267b0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
267c0 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
267d0 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
267e0 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
267f0 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E..**.** If the 
26800 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P3 value is non-
26810 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74  zero, then the t
26820 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f  able referred to
26830 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69   must be an.** i
26840 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20  ntkey table (an 
26850 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  SQL table, not a
26860 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69  n index). In thi
26870 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63  s case the row c
26880 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20  hange .** count 
26890 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
268a0 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
268b0 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
268c0 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
268d0 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72   .** If P3 is gr
268e0 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
268f0 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
26900 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
26910 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f  er P3 is.** also
26920 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
26930 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
26940 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
26950 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a  being cleared..*
26960 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44  *.** See also: D
26970 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f  estroy.*/.case O
26980 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74  P_Clear: {.  int
26990 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43   nChange;. .  nC
269a0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73  hange = 0;.  ass
269b0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
269c0 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
269d0 31 29 3c 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30  1)<<pOp->p2))!=0
269e0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
269f0 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c  e3BtreeClearTabl
26a00 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62  e(.      db->aDb
26a10 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70  [pOp->p2].pBt, p
26a20 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33  Op->p1, (pOp->p3
26a30 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29   ? &nChange : 0)
26a40 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  .  );.  if( pOp-
26a50 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43  >p3 ){.    p->nC
26a60 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65  hange += nChange
26a70 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
26a80 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  3>0 ){.      ass
26a90 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
26aa0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
26ab0 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
26ac0 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d  tToChange(p, &aM
26ad0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
26ae0 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33      aMem[pOp->p3
26af0 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65  ].u.i += nChange
26b00 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
26b10 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26b20 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50  e: CreateTable P
26b30 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
26b40 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
26b50 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69  table in the mai
26b60 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
26b70 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
26b80 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
26b90 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
26ba0 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
26bb0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
26bc0 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
26bd0 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
26be0 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
26bf0 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
26c00 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  ** register P2.*
26c10 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65  *.** The differe
26c20 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61  nce between a ta
26c30 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78  ble and an index
26c40 20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62   is this:  A tab
26c50 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20  le must.** have 
26c60 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72  a 4-byte integer
26c70 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76   key and can hav
26c80 65 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61  e arbitrary data
26c90 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  .  An index.** h
26ca0 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  as an arbitrary 
26cb0 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e  key but no data.
26cc0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
26cd0 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a   CreateIndex.*/.
26ce0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
26cf0 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a  eIndex P1 P2 * *
26d00 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74   *.**.** Allocat
26d10 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e  e a new index in
26d20 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
26d30 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
26d40 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
26d50 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
26d60 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
26d70 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
26d80 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
26d90 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65  P1>1.  Write the
26da0 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
26db0 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  r of the new tab
26dc0 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  le into.** regis
26dd0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ter P2..**.** Se
26de0 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
26df0 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  on OP_CreateTabl
26e00 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
26e10 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
26e20 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49  .case OP_CreateI
26e30 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20  ndex:           
26e40 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
26e50 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ase */.case OP_C
26e60 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20  reateTable: {   
26e70 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
26e80 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
26e90 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66  nt pgno;.  int f
26ea0 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b  lags;.  Db *pDb;
26eb0 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20  ..  pgno = 0;.  
26ec0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
26ed0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
26ee0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
26ef0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
26f00 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
26f10 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
26f20 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
26f30 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
26f40 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
26f50 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
26f60 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61  >opcode==OP_Crea
26f70 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f  teTable ){.    /
26f80 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f  * flags = BTREE_
26f90 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66  INTKEY; */.    f
26fa0 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54  lags = BTREE_INT
26fb0 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  KEY;.  }else{.  
26fc0 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f    flags = BTREE_
26fd0 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72  BLOBKEY;.  }.  r
26fe0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
26ff0 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d  CreateTable(pDb-
27000 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61  >pBt, &pgno, fla
27010 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  gs);.  pOut->u.i
27020 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b   = pgno;.  break
27030 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
27040 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a  ParseSchema P1 *
27050 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
27060 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c  ad and parse all
27070 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
27080 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
27090 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73  table of databas
270a0 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74  e P1.** that mat
270b0 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  ch the WHERE cla
270c0 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54  use P4. .**.** T
270d0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
270e0 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  es the parser to
270f0 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69   create a new vi
27100 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a  rtual machine,.*
27110 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20  * then runs the 
27120 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68  new virtual mach
27130 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73  ine.  It is thus
27140 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70   a re-entrant op
27150 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
27160 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a  _ParseSchema: {.
27170 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e    int iDb;.  con
27180 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72  st char *zMaster
27190 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a  ;.  char *zSql;.
271a0 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44    InitData initD
271b0 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70  ata;..  /* Any p
271c0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
271d0 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74  t that invokes t
271e0 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
271f0 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a  hold mutexes.  *
27200 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65  * on every btree
27210 2e 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65  .  This is a pre
27220 72 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e  requisite for in
27230 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c  voking .  ** sql
27240 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
27250 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20  ()..  */.#ifdef 
27260 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66  SQLITE_DEBUG.  f
27270 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62  or(iDb=0; iDb<db
27280 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20  ->nDb; iDb++){. 
27290 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d     assert( iDb==
272a0 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  1 || sqlite3Btre
272b0 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e  eHoldsMutex(db->
272c0 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b  aDb[iDb].pBt) );
272d0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69  .  }.#endif..  i
272e0 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
272f0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
27300 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
27310 0a 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73  .  assert( DbHas
27320 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62  Property(db, iDb
27330 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  , DB_SchemaLoade
27340 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20  d) );.  /* Used 
27350 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f  to be a conditio
27360 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61  nal */ {.    zMa
27370 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41  ster = SCHEMA_TA
27380 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e  BLE(iDb);.    in
27390 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a  itData.db = db;.
273a0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62      initData.iDb
273b0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20   = pOp->p1;.    
273c0 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73  initData.pzErrMs
273d0 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b  g = &p->zErrMsg;
273e0 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
273f0 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20  te3MPrintf(db,. 
27400 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61        "SELECT na
27410 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71  me, rootpage, sq
27420 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57  l FROM '%q'.%s W
27430 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59  HERE %s ORDER BY
27440 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20   rowid",.       
27450 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61  db->aDb[iDb].zNa
27460 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70  me, zMaster, pOp
27470 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28  ->p4.z);.    if(
27480 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20   zSql==0 ){.    
27490 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
274a0 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  MEM;.    }else{.
274b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
274c0 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29  ->init.busy==0 )
274d0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
274e0 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20  .busy = 1;.     
274f0 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53   initData.rc = S
27500 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
27510 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c  assert( !db->mal
27520 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
27530 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
27540 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73  exec(db, zSql, s
27550 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
27560 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30  ck, &initData, 0
27570 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
27580 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20  =SQLITE_OK ) rc 
27590 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20  = initData.rc;. 
275a0 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
275b0 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20  ee(db, zSql);.  
275c0 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73      db->init.bus
275d0 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  y = 0;.    }.  }
275e0 0a 20 20 69 66 28 20 72 63 20 29 20 73 71 6c 69  .  if( rc ) sqli
275f0 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
27600 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
27610 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  b);.  if( rc==SQ
27620 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
27630 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
27640 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a   }.  break;  .}.
27650 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
27660 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
27670 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f  E)./* Opcode: Lo
27680 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20  adAnalysis P1 * 
27690 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  * * *.**.** Read
276a0 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
276b0 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61  1 table for data
276c0 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64  base P1 and load
276d0 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
276e0 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e  of that table in
276f0 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  to the internal 
27700 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65  index hash table
27710 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
27720 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73  se.** the analys
27730 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  is to be used wh
27740 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c  en preparing all
27750 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72   subsequent quer
27760 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ies..*/.case OP_
27770 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a  LoadAnalysis: {.
27780 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27790 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
277a0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20  db->nDb );.  rc 
277b0 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  = sqlite3Analysi
277c0 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70  sLoad(db, pOp->p
277d0 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d  1);.  break;  .}
277e0 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
277f0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
27800 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20  ANALYZE) */../* 
27810 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c  Opcode: DropTabl
27820 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
27830 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
27840 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
27850 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
27860 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
27870 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e  e.** the table n
27880 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
27890 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
278a0 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
278b0 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70  table.** is drop
278c0 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ped in order to 
278d0 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
278e0 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
278f0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
27900 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
27910 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
27920 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
27930 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c  opTable: {.  sql
27940 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
27950 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70  eteTable(db, pOp
27960 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
27970 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
27980 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64   Opcode: DropInd
27990 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ex P1 * * P4 *.*
279a0 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
279b0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
279c0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
279d0 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
279e0 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  be.** the index 
279f0 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
27a00 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
27a10 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
27a20 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72  n index.** is dr
27a30 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
27a40 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
27a50 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
27a60 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
27a70 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
27a80 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
27a90 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
27aa0 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73  DropIndex: {.  s
27ab0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
27ac0 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70  eleteIndex(db, p
27ad0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
27ae0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
27af0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
27b00 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34  rigger P1 * * P4
27b10 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
27b20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
27b30 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
27b40 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
27b50 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72  scribe.** the tr
27b60 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69  igger named P4 i
27b70 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
27b80 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
27b90 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a  fter a trigger.*
27ba0 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20  * is dropped in 
27bb0 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
27bc0 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
27bd0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
27be0 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
27bf0 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
27c00 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
27c10 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67  ase OP_DropTrigg
27c20 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  er: {.  sqlite3U
27c30 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
27c40 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70  igger(db, pOp->p
27c50 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
27c60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
27c70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27c80 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a  INTEGRITY_CHECK.
27c90 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
27ca0 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20  rityCk P1 P2 P3 
27cb0 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e  * P5.**.** Do an
27cc0 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65   analysis of the
27cd0 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
27ce0 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65  database.  Store
27cf0 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
27d00 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  P1 the text of a
27d10 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
27d20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70  describing any p
27d30 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e  roblems..** If n
27d40 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66  o problems are f
27d50 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55  ound, store a NU
27d60 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  LL in register P
27d70 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  1..**.** The reg
27d80 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e  ister P3 contain
27d90 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  s the maximum nu
27da0 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20  mber of allowed 
27db0 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f  errors..** At mo
27dc0 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72  st reg(P3) error
27dd0 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74  s will be report
27de0 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  ed..** In other 
27df0 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79  words, the analy
27e00 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f  sis stops as soo
27e10 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72  n as reg(P1) err
27e20 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e  ors are .** seen
27e30 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70  .  Reg(P1) is up
27e40 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e  dated with the n
27e50 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
27e60 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a  remaining..**.**
27e70 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   The root page n
27e80 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61  umbers of all ta
27e90 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  bles in the data
27ea0 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72  base are integer
27eb0 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65  .** stored in re
27ec0 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29  g(P1), reg(P1+1)
27ed0 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e  , reg(P1+2), ...
27ee0 2e 20 20 54 68 65 72 65 20 61 72 65 20 50 32 20  .  There are P2 
27ef0 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e  tables.** total.
27f00 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
27f10 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68  not zero, the ch
27f20 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74  eck is done on t
27f30 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
27f40 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e  abase.** file, n
27f50 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ot the main data
27f60 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
27f70 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
27f80 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
27f90 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f  t the integrity_
27fa0 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f  check pragma..*/
27fb0 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69  .case OP_Integri
27fc0 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52  tyCk: {.  int nR
27fd0 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  oot;      /* Num
27fe0 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f  ber of tables to
27ff0 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72   check.  (Number
28000 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29   of root pages.)
28010 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74   */.  int *aRoot
28020 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f  ;     /* Array o
28030 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65  f rootpage numbe
28040 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f  rs for tables to
28050 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20   be checked */. 
28060 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
28070 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
28080 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
28090 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
280a0 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74  of errors report
280b0 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b  ed */.  char *z;
280c0 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
280d0 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70  of the error rep
280e0 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e  ort */.  Mem *pn
280f0 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69  Err;     /* Regi
28100 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61  ster keeping tra
28110 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  ck of errors rem
28120 61 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e  aining */.  .  n
28130 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  Root = pOp->p2;.
28140 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
28150 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73  0 );.  aRoot = s
28160 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
28170 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74  w(db, sizeof(int
28180 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20  )*(nRoot+1) );. 
28190 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20   if( aRoot==0 ) 
281a0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61  goto no_mem;.  a
281b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
281c0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
281d0 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20  nMem );.  pnErr 
281e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
281f0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
28200 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  rr->flags & MEM_
28210 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Int)!=0 );.  ass
28220 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
28230 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
28240 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
28250 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
28260 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d  p->p1];.  for(j=
28270 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29  0; j<nRoot; j++)
28280 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d  {.    aRoot[j] =
28290 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62   (int)sqlite3Vdb
282a0 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b  eIntValue(&pIn1[
282b0 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74  j]);.  }.  aRoot
282c0 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  [j] = 0;.  asser
282d0 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
282e0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
282f0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
28300 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70  (((yDbMask)1)<<p
28310 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20  Op->p5))!=0 );. 
28320 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
28330 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
28340 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
28350 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f  .pBt, aRoot, nRo
28360 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
28370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28380 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
28390 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
283a0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
283b0 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72  , aRoot);.  pnEr
283c0 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a  r->u.i -= nErr;.
283d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
283e0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
283f0 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
28400 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
28410 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
28420 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
28430 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
28440 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
28450 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
28460 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
28470 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
28480 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
28490 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
284a0 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
284b0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
284c0 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
284d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
284e0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
284f0 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
28500 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
28510 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
28520 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
28530 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72  sert the integer
28540 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72   value held by r
28550 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20  egister P2 into 
28560 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a  a boolean index.
28570 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ** held in regis
28580 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ter P1..**.** An
28590 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73   assertion fails
285a0 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e   if P2 is not an
285b0 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
285c0 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20  e OP_RowSetAdd: 
285d0 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20  {       /* in1, 
285e0 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in2 */.  pIn1 = 
285f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
28600 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
28610 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
28620 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
28630 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
28640 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
28650 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
28660 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
28670 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
28680 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
28690 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
286a0 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
286b0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
286c0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77    }.  sqlite3Row
286d0 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
286e0 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d  u.pRowSet, pIn2-
286f0 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  >u.i);.  break;.
28700 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
28710 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50  wSetRead P1 P2 P
28720 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72  3 * *.**.** Extr
28730 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
28740 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
28750 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
28760 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
28770 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
28780 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
28790 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
287a0 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
287b0 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
287c0 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
287d0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
287e0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
287f0 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
28800 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
28810 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
28820 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f  al;.  CHECK_FOR_
28830 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 49 6e  INTERRUPT;.  pIn
28840 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
28850 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
28860 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
28870 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73  Set)==0 .   || s
28880 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
28890 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
288a0 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a  , &val)==0.  ){.
288b0 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65      /* The boole
288c0 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  an index is empt
288d0 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  y */.    sqlite3
288e0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
288f0 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70  In1);.    pc = p
28900 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
28910 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
28920 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
28930 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
28940 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
28950 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
28960 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29  m[pOp->p3], val)
28970 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
28980 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
28990 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33  SetTest P1 P2 P3
289a0 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P4.**.** Regist
289b0 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64  er P3 is assumed
289c0 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69   to hold a 64-bi
289d0 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
289e0 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a   If register P1.
289f0 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f  ** contains a Ro
28a00 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  wSet object and 
28a10 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65  that RowSet obje
28a20 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74  ct contains.** t
28a30 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  he value held in
28a40 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67   P3, jump to reg
28a50 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77  ister P2. Otherw
28a60 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a  ise, insert the.
28a70 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33  ** integer in P3
28a80 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74   into the RowSet
28a90 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e   and continue on
28aa0 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20   to the.** next 
28ab0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
28ac0 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
28ad0 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72  is optimized for
28ae0 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20   the case where 
28af0 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a  successive sets.
28b00 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20  ** of integers, 
28b10 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63  where each set c
28b20 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69  ontains no dupli
28b30 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a  cates. Each set.
28b40 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20  ** of values is 
28b50 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
28b60 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e  unique P4 value.
28b70 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a   The first set.*
28b80 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d  * must have P4==
28b90 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74  0, the final set
28ba0 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74   P4=-1.  P4 must
28bb0 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72   be either -1 or
28bc0 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  .** non-negative
28bd0 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74  .  For non-negat
28be0 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34  ive values of P4
28bf0 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20   only the lower 
28c00 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69  4.** bits are si
28c10 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a  gnificant..**.**
28c20 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74   This allows opt
28c30 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20  imizations: (a) 
28c40 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65  when P4==0 there
28c50 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74   is no need to t
28c60 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65  est.** the rowse
28c70 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c  t object for P3,
28c80 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e   as it is guaran
28c90 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74  teed not to cont
28ca0 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77  ain it,.** (b) w
28cb0 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65  hen P4==-1 there
28cc0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69   is no need to i
28cd0 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c  nsert the value,
28ce0 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e   as it will.** n
28cf0 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66  ever be tested f
28d00 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e  or, and (c) when
28d10 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73   a value that is
28d20 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69   part of set X i
28d30 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74  s.** inserted, t
28d40 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
28d50 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65  to search to see
28d60 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c   if the same val
28d70 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  ue was.** previo
28d80 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73  usly inserted as
28d90 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28   part of set X (
28da0 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70  only if it was p
28db0 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73  reviously.** ins
28dc0 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
28dd0 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29   some other set)
28de0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
28df0 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20  SetTest: {      
28e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28e10 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  * jump, in1, in3
28e20 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a   */.  int iSet;.
28e30 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20    int exists;.. 
28e40 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
28e50 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
28e60 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
28e70 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70  .  iSet = pOp->p
28e80 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  4.i;.  assert( p
28e90 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In3->flags&MEM_I
28ea0 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  nt );..  /* If t
28eb0 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67  here is anything
28ec0 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f   other than a ro
28ed0 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d  wset object in m
28ee0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20  emory cell P1,. 
28ef0 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f   ** delete it no
28f00 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  w and initialize
28f10 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74   P1 with an empt
28f20 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20  y rowset.  */.  
28f30 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
28f40 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
28f50 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
28f60 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
28f70 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20  (pIn1);.    if( 
28f80 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
28f90 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20  EM_RowSet)==0 ) 
28fa0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
28fb0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
28fc0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
28fd0 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  2 );.  assert( i
28fe0 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e  Set==-1 || iSet>
28ff0 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74  =0 );.  if( iSet
29000 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d   ){.    exists =
29010 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
29020 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  st(pIn1->u.pRowS
29030 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  et, .           
29040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29050 20 20 20 20 28 75 38 29 28 69 53 65 74 3e 3d 30      (u8)(iSet>=0
29060 20 3f 20 69 53 65 74 20 26 20 30 78 66 20 3a 20   ? iSet & 0xf : 
29070 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20 20 20  0xff),.         
29080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29090 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29        pIn3->u.i)
290a0 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73  ;.    if( exists
290b0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
290c0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
290d0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
290e0 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30   }.  if( iSet>=0
290f0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
29100 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
29110 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
29120 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62  3->u.i);.  }.  b
29130 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
29140 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
29150 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65  IGGER../* Opcode
29160 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20  : Program P1 P2 
29170 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78  P3 P4 *.**.** Ex
29180 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65  ecute the trigge
29190 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64  r program passed
291a0 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f   as P4 (type P4_
291b0 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a  SUBPROGRAM). .**
291c0 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  .** P1 contains 
291d0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
291e0 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
291f0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
29200 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a   first memory .*
29210 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72  * cell in an arr
29220 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  ay of values use
29230 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74  d as arguments t
29240 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  o the sub-progra
29250 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69  m. P2 .** contai
29260 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74  ns the address t
29270 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65  o jump to if the
29280 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72   sub-program thr
29290 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a  ows an IGNORE .*
292a0 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e  * exception usin
292b0 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75  g the RAISE() fu
292c0 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72  nction. Register
292d0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
292e0 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20   address .** of 
292f0 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  a memory cell in
29300 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e   this (the paren
29310 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73  t) VM that is us
29320 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ed to allocate t
29330 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65  he .** memory re
29340 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75  quired by the su
29350 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d  b-vdbe at runtim
29360 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
29370 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
29380 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  VM containing th
29390 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
293a0 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  m..*/.case OP_Pr
293b0 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  ogram: {        
293c0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
293d0 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
293e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
293f0 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  f memory registe
29400 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  rs for sub-progr
29410 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  am */.  int nByt
29420 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
29430 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74  /* Bytes of runt
29440 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72  ime space requir
29450 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  ed for sub-progr
29460 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74  am */.  Mem *pRt
29470 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
29480 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61  /* Register to a
29490 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20  llocate runtime 
294a0 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a  space */.  Mem *
294b0 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
294c0 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74     /* Used to it
294d0 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65  erate through me
294e0 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20  mory cells */.  
294f0 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20  Mem *pEnd;      
29500 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
29510 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e  memory cell in n
29520 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64  ew array */.  Vd
29530 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
29540 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62        /* New vdb
29550 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75  e frame to execu
29560 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72  te in */.  SubPr
29570 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
29580 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61     /* Sub-progra
29590 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a  m to execute */.
295a0 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20    void *t;      
295b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
295c0 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74  en identifying t
295d0 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72  rigger */..  pPr
295e0 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e  ogram = pOp->p4.
295f0 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20  pProgram;.  pRt 
29600 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
29610 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f  ;.  assert( pPro
29620 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20  gram->nOp>0 );. 
29630 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35   .  /* If the p5
29640 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20   flag is clear, 
29650 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69  then recursive i
29660 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
29670 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64  ggers is .  ** d
29680 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b  isabled for back
29690 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c  wards compatibil
296a0 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69  ity (p5 is set i
296b0 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72  f this sub-progr
296c0 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c  am.  ** is reall
296d0 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74  y a trigger, not
296e0 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61   a foreign key a
296f0 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66  ction, and the f
29700 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64  lag set.  ** and
29710 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20   cleared by the 
29720 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76  "PRAGMA recursiv
29730 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d  e_triggers" comm
29740 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20  and is clear).. 
29750 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20   ** .  ** It is 
29760 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
29770 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
29780 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  , at the SQL lev
29790 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a  el, that is .  *
297a0 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73  * disabled. In s
297b0 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67  ome cases a sing
297c0 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67  le trigger may g
297d0 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61  enerate more tha
297e0 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50  n one .  ** SubP
297f0 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74  rogram (if the t
29800 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78  rigger may be ex
29810 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65  ecuted with more
29820 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72   than one differ
29830 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e  ent .  ** ON CON
29840 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29  FLICT algorithm)
29850 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72  . SubProgram str
29860 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74  uctures associat
29870 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73  ed with a.  ** s
29880 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c  ingle trigger al
29890 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  l have the same 
298a0 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75  value for the Su
298b0 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a  bProgram.token .
298c0 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20    ** variable.  
298d0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  */.  if( pOp->p5
298e0 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f   ){.    t = pPro
298f0 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20  gram->token;.   
29900 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
29910 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26  Frame; pFrame &&
29920 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d   pFrame->token!=
29930 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
29940 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
29950 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65  if( pFrame ) bre
29960 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
29970 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c  ->nFrame>=db->aL
29980 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
29990 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d  T_TRIGGER_DEPTH]
299a0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
299b0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
299c0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
299d0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
299e0 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c   "too many level
299f0 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63  s of trigger rec
29a00 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72  ursion");.    br
29a10 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52  eak;.  }..  /* R
29a20 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75  egister pRt is u
29a30 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
29a40 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
29a50 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61   to save the sta
29a60 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63  te.  ** of the c
29a70 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20  urrent program, 
29a80 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  and the memory r
29a90 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69  equired at runti
29aa0 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20  me to execute.  
29ab0 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ** the trigger p
29ac0 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20  rogram. If this 
29ad0 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e  trigger has been
29ae0 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74   fired before, t
29af0 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73  hen pRt .  ** is
29b00 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
29b10 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
29b20 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  t must be initia
29b30 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28  lized.  */.  if(
29b40 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d   (pRt->flags&MEM
29b50 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20  _Frame)==0 ){.  
29b60 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e    /* SubProgram.
29b70 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74  nMem is set to t
29b80 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
29b90 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62  ory cells used b
29ba0 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72  y the .    ** pr
29bb0 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20  ogram stored in 
29bc0 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20  SubProgram.aOp. 
29bd0 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65  As well as these
29be0 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20  , one memory.   
29bf0 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75   ** cell is requ
29c00 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75  ired for each cu
29c10 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65  rsor used by the
29c20 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f   program. Set lo
29c30 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61  cal.    ** varia
29c40 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61  ble nMem (and la
29c50 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e  ter, VdbeFrame.n
29c60 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69  ChildMem) to thi
29c70 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  s value..    */.
29c80 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67      nMem = pProg
29c90 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f  ram->nMem + pPro
29ca0 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
29cb0 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73  nByte = ROUND8(s
29cc0 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29  izeof(VdbeFrame)
29cd0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
29ce0 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28  + nMem * sizeof(
29cf0 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20  Mem).           
29d00 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
29d10 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62  Csr * sizeof(Vdb
29d20 65 43 75 72 73 6f 72 20 2a 29 0a 20 20 20 20 20  eCursor *).     
29d30 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67           + pProg
29d40 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a  ram->nOnce * siz
29d50 65 6f 66 28 75 38 29 3b 0a 20 20 20 20 70 46 72  eof(u8);.    pFr
29d60 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  ame = sqlite3DbM
29d70 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42  allocZero(db, nB
29d80 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70  yte);.    if( !p
29d90 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67  Frame ){.      g
29da0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
29db0 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
29dc0 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29  eMemRelease(pRt)
29dd0 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73  ;.    pRt->flags
29de0 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20   = MEM_Frame;.  
29df0 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20    pRt->u.pFrame 
29e00 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70  = pFrame;..    p
29e10 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20  Frame->v = p;.  
29e20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
29e30 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20  Mem = nMem;.    
29e40 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
29e50 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  r = pProgram->nC
29e60 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  sr;.    pFrame->
29e70 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70 46 72  pc = pc;.    pFr
29e80 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61  ame->aMem = p->a
29e90 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
29ea0 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b  >nMem = p->nMem;
29eb0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43  .    pFrame->apC
29ec0 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20  sr = p->apCsr;. 
29ed0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73     pFrame->nCurs
29ee0 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b  or = p->nCursor;
29ef0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70  .    pFrame->aOp
29f00 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70   = p->aOp;.    p
29f10 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e  Frame->nOp = p->
29f20 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  nOp;.    pFrame-
29f30 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61  >token = pProgra
29f40 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46  m->token;.    pF
29f50 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20  rame->aOnceFlag 
29f60 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a  = p->aOnceFlag;.
29f70 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63      pFrame->nOnc
29f80 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65  eFlag = p->nOnce
29f90 46 6c 61 67 3b 0a 0a 20 20 20 20 70 45 6e 64 20  Flag;..    pEnd 
29fa0 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  = &VdbeFrameMem(
29fb0 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e  pFrame)[pFrame->
29fc0 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20  nChildMem];.    
29fd0 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61  for(pMem=VdbeFra
29fe0 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70  meMem(pFrame); p
29ff0 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b  Mem!=pEnd; pMem+
2a000 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  +){.      pMem->
2a010 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 76 61  flags = MEM_Inva
2a020 6c 69 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d  lid;.      pMem-
2a030 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a  >db = db;.    }.
2a040 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72    }else{.    pFr
2a050 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72  ame = pRt->u.pFr
2a060 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ame;.    assert(
2a070 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b   pProgram->nMem+
2a080 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
2a090 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
2a0a0 6d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  m );.    assert(
2a0b0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d   pProgram->nCsr=
2a0c0 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43  =pFrame->nChildC
2a0d0 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  sr );.    assert
2a0e0 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70 63  ( pc==pFrame->pc
2a0f0 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46   );.  }..  p->nF
2a100 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65  rame++;.  pFrame
2a110 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70  ->pParent = p->p
2a120 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d  Frame;.  pFrame-
2a130 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
2a140 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65  tRowid;.  pFrame
2a150 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e  ->nChange = p->n
2a160 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68  Change;.  p->nCh
2a170 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70  ange = 0;.  p->p
2a180 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a  Frame = pFrame;.
2a190 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d    p->aMem = aMem
2a1a0 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d   = &VdbeFrameMem
2a1b0 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20  (pFrame)[-1];.  
2a1c0 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65  p->nMem = pFrame
2a1d0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70  ->nChildMem;.  p
2a1e0 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36  ->nCursor = (u16
2a1f0 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43  )pFrame->nChildC
2a200 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d  sr;.  p->apCsr =
2a210 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29   (VdbeCursor **)
2a220 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d  &aMem[p->nMem+1]
2a230 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70  ;.  p->aOp = aOp
2a240 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70   = pProgram->aOp
2a250 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72  ;.  p->nOp = pPr
2a260 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d  ogram->nOp;.  p-
2a270 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75 38  >aOnceFlag = (u8
2a280 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e   *)&p->apCsr[p->
2a290 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e  nCursor];.  p->n
2a2a0 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f 67  OnceFlag = pProg
2a2b0 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63  ram->nOnce;.  pc
2a2c0 20 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28   = -1;.  memset(
2a2d0 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c  p->aOnceFlag, 0,
2a2e0 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a   p->nOnceFlag);.
2a2f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2a300 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31  Opcode: Param P1
2a310 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2a320 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f  This opcode is o
2a330 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74  nly ever present
2a340 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73   in sub-programs
2a350 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20   called via the 
2a360 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  .** OP_Program i
2a370 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79  nstruction. Copy
2a380 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74   a value current
2a390 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d  ly stored in a m
2a3a0 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f  emory .** cell o
2a3b0 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70  f the calling (p
2a3c0 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20  arent) frame to 
2a3d0 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63  cell P2 in the c
2a3e0 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a  urrent frames .*
2a3f0 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e  * address space.
2a400 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
2a410 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2a420 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  s to access the 
2a430 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c  new.* .** and ol
2a440 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  d.* values..**.*
2a450 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66  * The address of
2a460 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65   the cell in the
2a470 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73   parent frame is
2a480 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61   determined by a
2a490 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c  dding.** the val
2a4a0 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
2a4b0 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c  ument to the val
2a4c0 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
2a4d0 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20  ument to the.** 
2a4e0 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
2a4f0 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  am instruction..
2a500 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d  */.case OP_Param
2a510 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
2a520 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
2a530 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
2a540 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a  *pFrame;.  Mem *
2a550 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20  pIn;.  pFrame = 
2a560 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e  p->pFrame;.  pIn
2a570 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
2a580 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d  [pOp->p1 + pFram
2a590 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70  e->aOp[pFrame->p
2a5a0 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c  c].p1];   .  sql
2a5b0 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
2a5c0 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
2a5d0 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
2a5e0 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66  break;.}..#endif
2a5f0 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
2a600 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  TE_OMIT_TRIGGER 
2a610 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2a620 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2a630 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  KEY./* Opcode: F
2a640 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a  kCounter P1 P2 *
2a650 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65   * *.**.** Incre
2a660 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69  ment a "constrai
2a670 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50  nt counter" by P
2a680 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67  2 (P2 may be neg
2a690 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
2a6a0 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  e)..** If P1 is 
2a6b0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61  non-zero, the da
2a6c0 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
2a6d0 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
2a6e0 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65  remented .** (de
2a6f0 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b  ferred foreign k
2a700 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
2a710 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
2a720 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a  1 is zero, the .
2a730 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75  ** statement cou
2a740 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
2a750 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66  ted (immediate f
2a760 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2a770 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65  raints)..*/.case
2a780 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b   OP_FkCounter: {
2a790 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
2a7a0 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72  {.    db->nDefer
2a7b0 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  redCons += pOp->
2a7c0 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
2a7d0 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
2a7e0 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  t += pOp->p2;.  
2a7f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2a800 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72   Opcode: FkIfZer
2a810 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
2a820 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2a830 74 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69  tests if a forei
2a840 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2a850 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  t-counter is cur
2a860 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20  rently zero..** 
2a870 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69  If so, jump to i
2a880 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f  nstruction P2. O
2a890 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
2a8a0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2a8b0 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  xt .** instructi
2a8c0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20  on..**.** If P1 
2a8d0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2a8e0 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  n the jump is ta
2a8f0 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62  ken if the datab
2a900 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  ase constraint-c
2a910 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72  ounter.** is zer
2a920 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20  o (the one that 
2a930 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20  counts deferred 
2a940 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
2a950 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73  tions). If P1 is
2a960 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75  .** zero, the ju
2a970 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
2a980 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e  he statement con
2a990 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
2a9a0 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65  is zero.** (imme
2a9b0 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
2a9c0 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  y constraint vio
2a9d0 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73  lations)..*/.cas
2a9e0 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b  e OP_FkIfZero: {
2a9f0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2aa00 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
2aa10 31 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  1 ){.    if( db-
2aa20 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d  >nDeferredCons==
2aa30 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  0 ) pc = pOp->p2
2aa40 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
2aa50 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74   if( p->nFkConst
2aa60 72 61 69 6e 74 3d 3d 30 20 29 20 70 63 20 3d 20  raint==0 ) pc = 
2aa70 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
2aa80 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2aa90 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
2aaa0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2aab0 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  KEY */..#ifndef 
2aac0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2aad0 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63  INCREMENT./* Opc
2aae0 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50  ode: MemMax P1 P
2aaf0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31  2 * * *.**.** P1
2ab00 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
2ab10 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
2ab20 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65   of this VM (the
2ab30 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a   root frame is.*
2ab40 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  * different from
2ab50 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
2ab60 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72  me if this instr
2ab70 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  uction is being 
2ab80 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68  executed.** with
2ab90 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d  in a sub-program
2aba0 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ). Set the value
2abb0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
2abc0 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
2abd0 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e  f .** its curren
2abe0 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  t value and the 
2abf0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
2ac00 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
2ac10 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72   instruction thr
2ac20 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ows an error if 
2ac30 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
2ac40 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
2ac50 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  .** an integer..
2ac60 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61  */.case OP_MemMa
2ac70 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  x: {        /* i
2ac80 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  n2 */.  Mem *pIn
2ac90 31 3b 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  1;.  VdbeFrame *
2aca0 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d  pFrame;.  if( p-
2acb0 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66  >pFrame ){.    f
2acc0 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
2acd0 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
2ace0 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
2acf0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
2ad00 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d     pIn1 = &pFram
2ad10 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  e->aMem[pOp->p1]
2ad20 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
2ad30 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2ad40 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  >p1];.  }.  asse
2ad50 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2ad60 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65  In1) );.  sqlite
2ad70 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
2ad80 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  fy(pIn1);.  pIn2
2ad90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2ada0 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
2adb0 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
2adc0 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  n2);.  if( pIn1-
2add0 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b  >u.i<pIn2->u.i){
2ade0 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  .    pIn1->u.i =
2adf0 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a   pIn2->u.i;.  }.
2ae00 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2ae10 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2ae20 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a  _AUTOINCREMENT *
2ae30 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  /../* Opcode: If
2ae40 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Pos P1 P2 * * *.
2ae50 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  **.** If the val
2ae60 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2ae70 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65  1 is 1 or greate
2ae80 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  r, jump to P2..*
2ae90 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
2aea0 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
2aeb0 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
2aec0 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
2aed0 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
2aee0 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
2aef0 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
2af00 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
2af10 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
2af20 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20  e OP_IfPos: {   
2af30 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2af40 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2af50 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2af60 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2af70 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2af80 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30   if( pIn1->u.i>0
2af90 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
2afa0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
2afb0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2afc0 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50  code: IfNeg P1 P
2afd0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  2 * * *.**.** If
2afe0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
2aff0 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73  gister P1 is les
2b000 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d  s than zero, jum
2b010 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20  p to P2. .**.** 
2b020 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f  It is illegal to
2b030 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75   use this instru
2b040 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73  ction on a regis
2b050 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a  ter that does.**
2b060 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20   not contain an 
2b070 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73  integer.  An ass
2b080 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c  ertion fault wil
2b090 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20  l result if you 
2b0a0 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  try..*/.case OP_
2b0b0 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20  IfNeg: {        
2b0c0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
2b0d0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2b0e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2b0f0 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
2b100 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20  EM_Int );.  if( 
2b110 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20  pIn1->u.i<0 ){. 
2b120 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2b130 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2b140 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2b150 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33   IfZero P1 P2 P3
2b160 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   * *.**.** The r
2b170 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
2b180 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2b190 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c  er.  Add literal
2b1a0 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61   P3 to the.** va
2b1b0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
2b1c0 50 31 2e 20 20 49 66 20 74 68 65 20 72 65 73 75  P1.  If the resu
2b1d0 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c  lt is exactly 0,
2b1e0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a   jump to P2. .**
2b1f0 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
2b200 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e  l to use this in
2b210 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72  struction on a r
2b220 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65  egister that doe
2b230 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  s.** not contain
2b240 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e   an integer.  An
2b250 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74   assertion fault
2b260 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20   will result if 
2b270 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65  you try..*/.case
2b280 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20   OP_IfZero: {   
2b290 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2b2a0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2b2b0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2b2c0 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2b2d0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2b2e0 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
2b2f0 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70 49 6e  p->p3;.  if( pIn
2b300 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20  1->u.i==0 ){.   
2b310 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2b320 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2b330 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
2b340 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50  ggStep * P2 P3 P
2b350 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  4 P5.**.** Execu
2b360 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  te the step func
2b370 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
2b380 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66  egate.  The.** f
2b390 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
2b3a0 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69  rguments.   P4 i
2b3b0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2b3c0 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74  he FuncDef.** st
2b3d0 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
2b3e0 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
2b3f0 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74  ion.  Use regist
2b400 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20  er.** P3 as the 
2b410 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a  accumulator..**.
2b420 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65  ** The P5 argume
2b430 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72  nts are taken fr
2b440 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
2b450 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73  nd its.** succes
2b460 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sors..*/.case OP
2b470 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
2b480 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  t n;.  int i;.  
2b490 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d  Mem *pMem;.  Mem
2b4a0 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65   *pRec;.  sqlite
2b4b0 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
2b4c0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2b4d0 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70  *apVal;..  n = p
2b4e0 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74  Op->p5;.  assert
2b4f0 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63  ( n>=0 );.  pRec
2b500 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2b510 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e  ];.  apVal = p->
2b520 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28  apArg;.  assert(
2b530 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29   apVal || n==0 )
2b540 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
2b550 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a  ; i++, pRec++){.
2b560 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
2b570 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a  sValid(pRec) );.
2b580 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70      apVal[i] = p
2b590 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  Rec;.    memAbou
2b5a0 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 52 65  tToChange(p, pRe
2b5b0 63 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  c);.    sqlite3V
2b5c0 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
2b5d0 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78  pRec);.  }.  ctx
2b5e0 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  .pFunc = pOp->p4
2b5f0 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74  .pFunc;.  assert
2b600 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
2b610 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
2b620 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20  );.  ctx.pMem = 
2b630 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2b640 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e  ->p3];.  pMem->n
2b650 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67  ++;.  ctx.s.flag
2b660 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
2b670 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63  ctx.s.z = 0;.  c
2b680 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  tx.s.zMalloc = 0
2b690 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d  ;.  ctx.s.xDel =
2b6a0 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d   0;.  ctx.s.db =
2b6b0 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72   db;.  ctx.isErr
2b6c0 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43  or = 0;.  ctx.pC
2b6d0 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73  oll = 0;.  ctx.s
2b6e0 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 69  kipFlag = 0;.  i
2b6f0 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c  f( ctx.pFunc->fl
2b700 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e  ags & SQLITE_FUN
2b710 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20  C_NEEDCOLL ){.  
2b720 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d    assert( pOp>p-
2b730 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65  >aOp );.    asse
2b740 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79  rt( pOp[-1].p4ty
2b750 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29  pe==P4_COLLSEQ )
2b760 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
2b770 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
2b780 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
2b790 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b  ctx.pColl = pOp[
2b7a0 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20  -1].p4.pColl;.  
2b7b0 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e  }.  (ctx.pFunc->
2b7c0 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20  xStep)(&ctx, n, 
2b7d0 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20  apVal); /* IMP: 
2b7e0 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
2b7f0 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
2b800 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
2b810 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2b820 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2b830 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
2b840 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20  text(&ctx.s));. 
2b850 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
2b860 72 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63  ror;.  }.  if( c
2b870 74 78 2e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20  tx.skipFlag ){. 
2b880 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
2b890 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f  1].opcode==OP_Co
2b8a0 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20 3d  llSeq );.    i =
2b8b0 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20   pOp[-1].p1;.   
2b8c0 20 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33   if( i ) sqlite3
2b8d0 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
2b8e0 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20  &aMem[i], 1);.  
2b8f0 7d 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  }..  sqlite3Vdbe
2b900 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e  MemRelease(&ctx.
2b910 73 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  s);..  break;.}.
2b920 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46  ./* Opcode: AggF
2b930 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  inal P1 P2 * P4 
2b940 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  *.**.** Execute 
2b950 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75  the finalizer fu
2b960 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
2b970 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a  gregate.  P1 is.
2b980 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  ** the memory lo
2b990 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74  cation that is t
2b9a0 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66  he accumulator f
2b9b0 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65  or the aggregate
2b9c0 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
2b9d0 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
2b9e0 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73  ments that the s
2b9f0 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b  tep function tak
2ba00 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20  es and.** P4 is 
2ba10 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2ba20 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69   FuncDef for thi
2ba30 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65  s function.  The
2ba40 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20   P2.** argument 
2ba50 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
2ba60 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20  his opcode.  It 
2ba70 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f  is only there to
2ba80 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a   disambiguate.**
2ba90 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20   functions that 
2baa0 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67  can take varying
2bab0 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75   numbers of argu
2bac0 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50  ments.  The.** P
2bad0 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e  4 argument is on
2bae0 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68  ly needed for th
2baf0 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73  e degenerate cas
2bb00 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73  e where.** the s
2bb10 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  tep function was
2bb20 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
2bb30 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  called..*/.case 
2bb40 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20  OP_AggFinal: {. 
2bb50 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73   Mem *pMem;.  as
2bb60 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
2bb70 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
2bb80 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20  Mem );.  pMem = 
2bb90 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2bba0 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
2bbb0 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e  >flags & ~(MEM_N
2bbc0 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30  ull|MEM_Agg))==0
2bbd0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2bbe0 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a  e3VdbeMemFinaliz
2bbf0 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e  e(pMem, pOp->p4.
2bc00 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63  pFunc);.  if( rc
2bc10 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
2bc20 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2bc30 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
2bc40 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
2bc50 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20  xt(pMem));.  }. 
2bc60 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2bc70 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c  geEncoding(pMem,
2bc80 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
2bc90 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2bca0 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73  E(pMem);.  if( s
2bcb0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
2bcc0 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20  Big(pMem) ){.   
2bcd0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
2bce0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
2bcf0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2bd00 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65  IT_WAL./* Opcode
2bd10 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20  : Checkpoint P1 
2bd20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2bd30 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62  Checkpoint datab
2bd40 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20  ase P1. This is 
2bd50 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73  a no-op if P1 is
2bd60 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69   not currently i
2bd70 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50  n.** WAL mode. P
2bd80 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f  arameter P2 is o
2bd90 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45  ne of SQLITE_CHE
2bda0 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c  CKPOINT_PASSIVE,
2bdb0 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45 53 54   FULL.** or REST
2bdc0 41 52 54 2e 20 20 57 72 69 74 65 20 31 20 6f 72  ART.  Write 1 or
2bdd0 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20   0 into mem[P3] 
2bde0 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  if the checkpoin
2bdf0 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c  t returns.** SQL
2be00 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c  ITE_BUSY or not,
2be10 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
2be20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72  Write the number
2be30 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
2be40 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68  .** WAL after th
2be50 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74  e checkpoint int
2be60 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20  o mem[P3+1] and 
2be70 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
2be80 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41  ges.** in the WA
2be90 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e  L that have been
2bea0 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66   checkpointed af
2beb0 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69  ter the checkpoi
2bec0 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20  nt.** completes 
2bed0 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20  into mem[P3+2]. 
2bee0 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65   However on an e
2bef0 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20  rror, mem[P3+1] 
2bf00 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d  and.** mem[P3+2]
2bf10 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
2bf20 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20   to -1..*/.case 
2bf30 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b  OP_Checkpoint: {
2bf40 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
2bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf60 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
2bf70 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73  er */.  int aRes
2bf80 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [3];            
2bf90 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
2bfa0 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ts */.  Mem *pMe
2bfb0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2bfc0 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65          /* Write
2bfd0 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f   results here */
2bfe0 0a 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b  ..  aRes[0] = 0;
2bff0 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65  .  aRes[1] = aRe
2c000 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73  s[2] = -1;.  ass
2c010 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ert( pOp->p2==SQ
2c020 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2c030 50 41 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c  PASSIVE.       |
2c040 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
2c050 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c  E_CHECKPOINT_FUL
2c060 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d  L.       || pOp-
2c070 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
2c080 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20  KPOINT_RESTART. 
2c090 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2c0a0 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c  e3Checkpoint(db,
2c0b0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2c0c0 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52  2, &aRes[1], &aR
2c0d0 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63  es[2]);.  if( rc
2c0e0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
2c0f0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2c100 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d  _OK;.    aRes[0]
2c110 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28   = 1;.  }.  for(
2c120 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65  i=0, pMem = &aMe
2c130 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b  m[pOp->p3]; i<3;
2c140 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20   i++, pMem++){. 
2c150 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2c160 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20  mSetInt64(pMem, 
2c170 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20  (i64)aRes[i]);. 
2c180 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a   }    .  break;.
2c190 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66  };  .#endif..#if
2c1a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c1b0 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64  _PRAGMA./* Opcod
2c1c0 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50  e: JournalMode P
2c1d0 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a  1 P2 P3 * P5.**.
2c1e0 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f  ** Change the jo
2c1f0 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61  urnal mode of da
2c200 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e  tabase P1 to P3.
2c210 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20   P3 must be one 
2c220 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f  of the.** PAGER_
2c230 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20  JOURNALMODE_XXX 
2c240 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67  values. If chang
2c250 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 20  ing between the 
2c260 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b  various rollback
2c270 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74  .** modes (delet
2c280 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72  e, truncate, per
2c290 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65  sist, off and me
2c2a0 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20 61  mory), this is a
2c2b0 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61   simple.** opera
2c2c0 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72  tion. No IO is r
2c2d0 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  equired..**.** I
2c2e0 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20  f changing into 
2c2f0 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f  or out of WAL mo
2c300 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72 65  de the procedure
2c310 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63   is more complic
2c320 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74  ated..**.** Writ
2c330 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  e a string conta
2c340 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20  ining the final 
2c350 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20  journal-mode to 
2c360 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
2c370 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d  case OP_JournalM
2c380 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74  ode: {    /* out
2c390 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
2c3a0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
2c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3c0 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68    /* Btree to ch
2c3d0 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64  ange journal mod
2c3e0 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20  e of */.  Pager 
2c3f0 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20  *pPager;        
2c400 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
2c410 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
2c420 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20  th pBt */.  int 
2c430 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20  eNew;           
2c440 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
2c450 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ew journal mode 
2c460 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20  */.  int eOld;  
2c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c480 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20       /* The old 
2c490 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
2c4a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2c4b0 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20  MIT_WAL.  const 
2c4c0 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b  char *zFilename;
2c4d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
2c4e0 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66 69  e of database fi
2c4f0 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f  le for pPager */
2c500 0a 23 65 6e 64 69 66 0a 0a 20 20 65 4e 65 77 20  .#endif..  eNew 
2c510 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
2c520 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52  ert( eNew==PAGER
2c530 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c  _JOURNALMODE_DEL
2c540 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  ETE .       || e
2c550 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2c560 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20  ALMODE_TRUNCATE 
2c570 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2c580 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2c590 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20  DE_PERSIST .    
2c5a0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2c5b0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
2c5c0 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  F.       || eNew
2c5d0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2c5e0 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20  ODE_MEMORY.     
2c5f0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2c600 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2c610 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2c620 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2c630 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20  DE_QUERY.  );.  
2c640 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2c650 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2c660 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20 70 42 74 20  ->nDb );..  pBt 
2c670 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
2c680 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72  1].pBt;.  pPager
2c690 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
2c6a0 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c  ager(pBt);.  eOl
2c6b0 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  d = sqlite3Pager
2c6c0 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  GetJournalMode(p
2c6d0 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e  Pager);.  if( eN
2c6e0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2c6f0 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e  LMODE_QUERY ) eN
2c700 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28  ew = eOld;.  if(
2c710 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b   !sqlite3PagerOk
2c720 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d  ToChangeJournalM
2c730 6f 64 65 28 70 50 61 67 65 72 29 20 29 20 65 4e  ode(pPager) ) eN
2c740 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e  ew = eOld;..#ifn
2c750 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c760 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20  WAL.  zFilename 
2c770 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
2c780 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31  lename(pPager, 1
2c790 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  );..  /* Do not 
2c7a0 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69  allow a transiti
2c7b0 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  on to journal_mo
2c7c0 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74  de=WAL for a dat
2c7d0 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65  abase.  ** in te
2c7e0 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20  mporary storage 
2c7f0 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f  or if the VFS do
2c800 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73  es not support s
2c810 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20  hared memory .  
2c820 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  */.  if( eNew==P
2c830 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2c840 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69  _WAL.   && (sqli
2c850 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c  te3Strlen30(zFil
2c860 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20  ename)==0       
2c870 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65      /* Temp file
2c880 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73   */.       || !s
2c890 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75  qlite3PagerWalSu
2c8a0 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29  pported(pPager))
2c8b0 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d     /* No shared-
2c8c0 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a  memory support *
2c8d0 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20  /.  ){.    eNew 
2c8e0 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69  = eOld;.  }..  i
2c8f0 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a  f( (eNew!=eOld).
2c900 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47     && (eOld==PAG
2c910 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2c920 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45  AL || eNew==PAGE
2c930 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2c940 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20  L).  ){.    if( 
2c950 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  !db->autoCommit 
2c960 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  || db->activeVdb
2c970 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 20 20  eCnt>1 ){.      
2c980 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2c990 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  R;.      sqlite3
2c9a0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2c9b0 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20  rrMsg, db, .    
2c9c0 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68        "cannot ch
2c9d0 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65  ange %s wal mode
2c9e0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
2c9f0 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20  ransaction",.   
2ca00 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41         (eNew==PA
2ca10 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2ca20 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22  WAL ? "into" : "
2ca30 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29  out of").      )
2ca40 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
2ca50 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20     }else{. .    
2ca60 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45    if( eOld==PAGE
2ca70 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2ca80 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  L ){.        /* 
2ca90 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d  If leaving WAL m
2caa0 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c  ode, close the l
2cab0 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63  og file. If succ
2cac0 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c  essful, the call
2cad0 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50  .        ** to P
2cae0 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63  agerCloseWal() c
2caf0 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64  heckpoints and d
2cb00 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65  eletes the write
2cb10 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20  -ahead-log .    
2cb20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20      ** file. An 
2cb30 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d  EXCLUSIVE lock m
2cb40 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64  ay still be held
2cb50 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
2cb60 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a   file .        *
2cb70 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73  * after a succes
2cb80 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20  sful return. .  
2cb90 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
2cba0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67   rc = sqlite3Pag
2cbb0 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65  erCloseWal(pPage
2cbc0 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  r);.        if( 
2cbd0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2cbe0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
2cbf0 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
2cc00 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
2cc10 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ew);.        }. 
2cc20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65       }else if( e
2cc30 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2cc40 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b  ALMODE_MEMORY ){
2cc50 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e  .        /* Cann
2cc60 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69  ot transition di
2cc70 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f  rectly from MEMO
2cc80 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20  RY to WAL.  Use 
2cc90 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20  mode OFF.       
2cca0 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d   ** as an interm
2ccb0 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20  ediate */.      
2ccc0 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
2ccd0 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2cce0 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ger, PAGER_JOURN
2ccf0 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20  ALMODE_OFF);.   
2cd00 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
2cd10 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74   Open a transact
2cd20 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ion on the datab
2cd30 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64  ase file. Regard
2cd40 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72  less of the jour
2cd50 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64  nal.      ** mod
2cd60 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  e, this transact
2cd70 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20  ion always uses 
2cd80 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
2cd90 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  al..      */.   
2cda0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
2cdb0 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
2cdc0 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  (pBt)==0 );.    
2cdd0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2cde0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
2cdf0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2ce00 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20  SetVersion(pBt, 
2ce10 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
2ce20 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32  RNALMODE_WAL ? 2
2ce30 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a   : 1));.      }.
2ce40 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
2ce50 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54   /* ifndef SQLIT
2ce60 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20  E_OMIT_WAL */.. 
2ce70 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65   if( rc ){.    e
2ce80 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a  New = eOld;.  }.
2ce90 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    eNew = sqlite3
2cea0 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
2ceb0 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
2cec0 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  );..  pOut = &aM
2ced0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
2cee0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2cef0 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
2cf00 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
2cf10 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71  ->z = (char *)sq
2cf20 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
2cf30 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f  name(eNew);.  pO
2cf40 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53  ut->n = sqlite3S
2cf50 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29  trlen30(pOut->z)
2cf60 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
2cf70 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73  SQLITE_UTF8;.  s
2cf80 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2cf90 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
2cfa0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
2cfb0 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.};.#endif /* 
2cfc0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
2cfd0 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  MA */..#if !defi
2cfe0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2cff0 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
2d000 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2d010 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
2d020 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20  e: Vacuum * * * 
2d030 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d  * *.**.** Vacuum
2d040 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
2d050 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f  base.  This opco
2d060 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74  de will cause ot
2d070 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d  her virtual.** m
2d080 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72  achines to be cr
2d090 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20  eated and run.  
2d0a0 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61  It may not be ca
2d0b0 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
2d0c0 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f  .** a transactio
2d0d0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  n..*/.case OP_Va
2d0e0 63 75 75 6d 3a 20 7b 0a 20 20 72 63 20 3d 20 73  cuum: {.  rc = s
2d0f0 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
2d100 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29  &p->zErrMsg, db)
2d110 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2d120 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
2d130 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
2d140 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
2d150 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
2d160 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2d170 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
2d180 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
2d190 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
2d1a0 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
2d1b0 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
2d1c0 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
2d1d0 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
2d1e0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2d1f0 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
2d200 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
2d210 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2d220 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2d230 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
2d240 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2d250 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
2d260 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
2d270 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2d280 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2d290 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
2d2a0 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
2d2b0 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31  Mask)1)<<pOp->p1
2d2c0 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ))!=0 );.  pBt =
2d2d0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
2d2e0 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71  ].pBt;.  rc = sq
2d2f0 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61  lite3BtreeIncrVa
2d300 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28  cuum(pBt);.  if(
2d310 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc==SQLITE_DONE
2d320 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
2d330 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63  ->p2 - 1;.    rc
2d340 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2d350 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2d360 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
2d370 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20  Expire P1 * * * 
2d380 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72  *.**.** Cause pr
2d390 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d  ecompiled statem
2d3a0 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65  ents to become e
2d3b0 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72  xpired. An expir
2d3c0 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20  ed statement.** 
2d3d0 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72  fails with an er
2d3e0 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49  ror code of SQLI
2d3f0 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20  TE_SCHEMA if it 
2d400 69 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64  is ever executed
2d410 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65   .** (via sqlite
2d420 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a  3_step())..** .*
2d430 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68  * If P1 is 0, th
2d440 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65  en all SQL state
2d450 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70  ments become exp
2d460 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e  ired. If P1 is n
2d470 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e  on-zero,.** then
2d480 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e   only the curren
2d490 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74  tly executing st
2d4a0 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63  atement is affec
2d4b0 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  ted. .*/.case OP
2d4c0 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28  _Expire: {.  if(
2d4d0 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20   !pOp->p1 ){.   
2d4e0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
2d4f0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
2d500 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (db);.  }else{. 
2d510 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
2d520 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2d530 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
2d540 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2d550 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  CHE./* Opcode: T
2d560 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50  ableLock P1 P2 P
2d570 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74  3 P4 *.**.** Obt
2d580 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20  ain a lock on a 
2d590 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
2d5a0 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
2d5b0 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  on is only used 
2d5c0 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72  when.** the shar
2d5d0 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65  ed-cache feature
2d5e0 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a   is enabled. .**
2d5f0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
2d600 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
2d610 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  ase in sqlite3.a
2d620 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61  Db[] of the data
2d630 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68  base.** on which
2d640 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71   the lock is acq
2d650 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f  uired.  A readlo
2d660 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  ck is obtained i
2d670 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20  f P3==0 or.** a 
2d680 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33  write lock if P3
2d690 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f  ==1..**.** P2 co
2d6a0 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d  ntains the root-
2d6b0 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
2d6c0 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a  e to lock..**.**
2d6d0 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70   P4 contains a p
2d6e0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61  ointer to the na
2d6f0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
2d700 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68  being locked. Th
2d710 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73  is is only.** us
2d720 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
2d730 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
2d740 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e  if the lock cann
2d750 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a  ot be obtained..
2d760 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65  */.case OP_Table
2d770 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57  Lock: {.  u8 isW
2d780 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70  riteLock = (u8)p
2d790 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73  Op->p3;.  if( is
2d7a0 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d  WriteLock || 0==
2d7b0 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54  (db->flags&SQLIT
2d7c0 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
2d7d0 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31  d) ){.    int p1
2d7e0 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20   = pOp->p1; .   
2d7f0 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26   assert( p1>=0 &
2d800 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  & p1<db->nDb );.
2d810 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e      assert( (p->
2d820 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
2d830 44 62 4d 61 73 6b 29 31 29 3c 3c 70 31 29 29 21  DbMask)1)<<p1))!
2d840 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
2d850 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30  ( isWriteLock==0
2d860 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d   || isWriteLock=
2d870 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =1 );.    rc = s
2d880 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54  qlite3BtreeLockT
2d890 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d  able(db->aDb[p1]
2d8a0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69  .pBt, pOp->p2, i
2d8b0 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20  sWriteLock);.   
2d8c0 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d   if( (rc&0xFF)==
2d8d0 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b  SQLITE_LOCKED ){
2d8e0 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
2d8f0 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  r *z = pOp->p4.z
2d900 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
2d910 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2d920 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62  rMsg, db, "datab
2d930 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
2d940 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20  ked: %s", z);.  
2d950 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
2d960 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2d970 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2d980 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
2d990 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2d9a0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2d9b0 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
2d9c0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2d9d0 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
2d9e0 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
2d9f0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
2da00 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
2da10 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
2da20 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
2da30 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
2da40 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
2da50 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
2da60 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
2da70 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
2da80 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
2da90 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
2daa0 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
2dab0 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
2dac0 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20  s, the error.** 
2dad0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74  code will be set
2dae0 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
2daf0 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
2db00 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65  egin: {.  VTable
2db10 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62   *pVTab;.  pVTab
2db20 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
2db30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2db40 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56  VtabBegin(db, pV
2db50 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61  Tab);.  if( pVTa
2db60 62 20 29 20 69 6d 70 6f 72 74 56 74 61 62 45 72  b ) importVtabEr
2db70 72 4d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70  rMsg(p, pVTab->p
2db80 56 74 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Vtab);.  break;.
2db90 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2dba0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2dbb0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2dbc0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2dbd0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2dbe0 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20  ode: VCreate P1 
2dbf0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
2dc00 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  4 is the name of
2dc10 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2dc20 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2dc30 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74   Call the xCreat
2dc40 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20  e method.** for 
2dc50 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
2dc60 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20  ase OP_VCreate: 
2dc70 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  {.  rc = sqlite3
2dc80 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64  VtabCallCreate(d
2dc90 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2dca0 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d  >p4.z, &p->zErrM
2dcb0 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  sg);.  break;.}.
2dcc0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2dcd0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2dce0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2dcf0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2dd00 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2dd10 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a  e: VDestroy P1 *
2dd20 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2dd30 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
2dd40 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2dd50 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2dd60 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72   Call the xDestr
2dd70 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20  oy method.** of 
2dd80 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
2dd90 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a  ase OP_VDestroy:
2dda0 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65   {.  p->inVtabMe
2ddb0 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d  thod = 2;.  rc =
2ddc0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2ddd0 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d  Destroy(db, pOp-
2dde0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
2ddf0 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2de00 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  od = 0;.  break;
2de10 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2de20 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2de30 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2de40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2de50 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2de60 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a  code: VOpen P1 *
2de70 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2de80 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2de90 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2dea0 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
2deb0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
2dec0 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  re..** P1 is a c
2ded0 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54  ursor number.  T
2dee0 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73  his opcode opens
2def0 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65   a cursor to the
2df00 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
2df10 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  e and stores tha
2df20 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a  t cursor in P1..
2df30 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e  */.case OP_VOpen
2df40 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2df50 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65   *pCur;.  sqlite
2df60 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
2df70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
2df80 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2df90 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
2dfa0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
2dfb0 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74   pCur = 0;.  pVt
2dfc0 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20  abCursor = 0;.  
2dfd0 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
2dfe0 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
2dff0 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
2e000 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
2e010 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
2e020 73 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d  sert(pVtab && pM
2e030 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70  odule);.  rc = p
2e040 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56  Module->xOpen(pV
2e050 74 61 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f  tab, &pVtabCurso
2e060 72 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62  r);.  importVtab
2e070 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29  ErrMsg(p, pVtab)
2e080 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  ;.  if( SQLITE_O
2e090 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20  K==rc ){.    /* 
2e0a0 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74  Initialize sqlit
2e0b0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62  e3_vtab_cursor b
2e0c0 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20  ase class */.   
2e0d0 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
2e0e0 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20  tab = pVtab;..  
2e0f0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73 65 20    /* Initialise 
2e100 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65  vdbe cursor obje
2e110 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d  ct */.    pCur =
2e120 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
2e130 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d  p, pOp->p1, 0, -
2e140 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70  1, 0);.    if( p
2e150 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75  Cur ){.      pCu
2e160 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d  r->pVtabCursor =
2e170 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20   pVtabCursor;.  
2e180 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c      pCur->pModul
2e190 65 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  e = pVtabCursor-
2e1a0 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  >pVtab->pModule;
2e1b0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2e1c0 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
2e1d0 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d  ed = 1;.      pM
2e1e0 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56  odule->xClose(pV
2e1f0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  tabCursor);.    
2e200 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
2e210 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2e220 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2e230 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2e240 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2e250 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2e260 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50  de: VFilter P1 P
2e270 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
2e280 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
2e290 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
2e2a0 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
2e2b0 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
2e2c0 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
2e2d0 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
2e2e0 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
2e2f0 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
2e300 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
2e310 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
2e320 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
2e330 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
2e340 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
2e350 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
2e360 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
2e370 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
2e380 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
2e390 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
2e3a0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2e3b0 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
2e3c0 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
2e3d0 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
2e3e0 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
2e3f0 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
2e400 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
2e410 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
2e420 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2e430 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
2e440 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
2e450 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
2e460 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
2e470 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
2e480 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
2e490 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
2e4a0 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
2e4b0 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
2e4c0 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
2e4d0 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
2e4e0 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
2e4f0 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
2e500 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
2e510 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
2e520 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
2e530 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
2e540 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
2e550 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
2e560 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
2e570 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
2e580 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
2e590 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
2e5a0 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
2e5b0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2e5c0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2e5d0 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
2e5e0 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
2e5f0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2e600 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
2e610 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2e620 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75  *pVtab;.  VdbeCu
2e630 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e  rsor *pCur;.  in
2e640 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a  t res;.  int i;.
2e650 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a    Mem **apArg;..
2e660 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d    pQuery = &aMem
2e670 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72  [pOp->p3];.  pAr
2e680 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b  gc = &pQuery[1];
2e690 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
2e6a0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2e6b0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2e6c0 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52  d(pQuery) );.  R
2e6d0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
2e6e0 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
2e6f0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
2e700 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
2e710 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70   pVtabCursor = p
2e720 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2e730 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61  ;.  pVtab = pVta
2e740 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
2e750 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
2e760 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
2e770 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
2e780 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
2e790 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
2e7a0 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
2e7b0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
2e7c0 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
2e7d0 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
2e7e0 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41    nArg = (int)pA
2e7f0 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
2e800 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79  ry = (int)pQuery
2e810 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ->u.i;..  /* Inv
2e820 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20  oke the xFilter 
2e830 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20  method */.  {.  
2e840 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61    res = 0;.    a
2e850 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
2e860 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20  .    for(i = 0; 
2e870 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
2e880 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26      apArg[i] = &
2e890 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20  pArgc[i+1];.    
2e8a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2e8b0 53 74 6f 72 65 54 79 70 65 28 61 70 41 72 67 5b  StoreType(apArg[
2e8c0 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  i]);.    }..    
2e8d0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2e8e0 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  = 1;.    rc = pM
2e8f0 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70  odule->xFilter(p
2e900 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65  VtabCursor, iQue
2e910 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e  ry, pOp->p4.z, n
2e920 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20  Arg, apArg);.   
2e930 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2e940 20 3d 20 30 3b 0a 20 20 20 20 69 6d 70 6f 72 74   = 0;.    import
2e950 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56  VtabErrMsg(p, pV
2e960 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63  tab);.    if( rc
2e970 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2e980 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75       res = pModu
2e990 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75  le->xEof(pVtabCu
2e9a0 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  rsor);.    }..  
2e9b0 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
2e9c0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2e9d0 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  - 1;.    }.  }. 
2e9e0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
2e9f0 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a   0;..  break;.}.
2ea00 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2ea10 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2ea20 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2ea30 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2ea40 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2ea50 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32  e: VColumn P1 P2
2ea60 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74   P3 * *.**.** St
2ea70 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ore the value of
2ea80 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
2ea90 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20  n of.** the row 
2eaa0 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74  of the virtual-t
2eab0 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a  able that the .*
2eac0 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70  * P1 cursor is p
2ead0 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20  ointing to into 
2eae0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
2eaf0 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a  case OP_VColumn:
2eb00 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
2eb10 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
2eb20 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
2eb30 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
2eb40 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74   *pDest;.  sqlit
2eb50 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74  e3_context sCont
2eb60 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73  ext;..  VdbeCurs
2eb70 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70  or *pCur = p->ap
2eb80 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2eb90 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
2eba0 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  tabCursor );.  a
2ebb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2ebc0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
2ebd0 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20  nMem );.  pDest 
2ebe0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2ebf0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
2ec00 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
2ec10 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
2ec20 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Row ){.    sqlit
2ec30 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
2ec40 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65  (pDest);.    bre
2ec50 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
2ec60 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
2ec70 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
2ec80 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
2ec90 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
2eca0 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  ( pModule->xColu
2ecb0 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26  mn );.  memset(&
2ecc0 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a  sContext, 0, siz
2ecd0 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a  eof(sContext));.
2ece0 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74  .  /* The output
2ecf0 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64   cell may alread
2ed00 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20  y have a buffer 
2ed10 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a  allocated. Move.
2ed20 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74    ** the current
2ed30 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f   contents to sCo
2ed40 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61  ntext.s so in ca
2ed50 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63  se the user-func
2ed60 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75  tion .  ** can u
2ed70 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20 61  se the already a
2ed80 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20  llocated buffer 
2ed90 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63  instead of alloc
2eda0 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65  ating a .  ** ne
2edb0 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71  w one..  */.  sq
2edc0 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
2edd0 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44  (&sContext.s, pD
2ede0 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  est);.  MemSetTy
2edf0 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74  peFlag(&sContext
2ee00 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  .s, MEM_Null);..
2ee10 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
2ee20 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56  xColumn(pCur->pV
2ee30 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e  tabCursor, &sCon
2ee40 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  text, pOp->p2);.
2ee50 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d    importVtabErrM
2ee60 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
2ee70 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  if( sContext.isE
2ee80 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d  rror ){.    rc =
2ee90 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
2eea0 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70  r;.  }..  /* Cop
2eeb0 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  y the result of 
2eec0 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
2eed0 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 2e  the P3 register.
2eee0 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73   We.  ** do this
2eef0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
2ef00 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
2ef10 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
2ef20 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20  to ensure any.  
2ef30 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63  ** dynamic alloc
2ef40 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78  ation in sContex
2ef50 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63  t.s (a Mem struc
2ef60 74 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e  t) is  released.
2ef70 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
2ef80 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2ef90 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65  g(&sContext.s, e
2efa0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69  ncoding);.  sqli
2efb0 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
2efc0 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e  Dest, &sContext.
2efd0 73 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  s);.  REGISTER_T
2efe0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
2eff0 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  est);.  UPDATE_M
2f000 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
2f010 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  t);..  if( sqlit
2f020 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
2f030 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f  pDest) ){.    go
2f040 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
2f050 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2f060 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2f070 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2f080 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2f090 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2f0a0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e  LE./* Opcode: VN
2f0b0 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ext P1 P2 * * *.
2f0c0 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69  **.** Advance vi
2f0d0 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74  rtual table P1 t
2f0e0 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69  o the next row i
2f0f0 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  n its result set
2f100 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20   and.** jump to 
2f110 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
2f120 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74   Or, if the virt
2f130 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65  ual table has re
2f140 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64  ached.** the end
2f150 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73   of its result s
2f160 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  et, then fall th
2f170 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2f180 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2f190 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a  /.case OP_VNext:
2f1a0 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
2f1b0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2f1c0 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
2f1d0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
2f1e0 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65  Module;.  int re
2f1f0 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  s;.  VdbeCursor 
2f200 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20  *pCur;..  res = 
2f210 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  0;.  pCur = p->a
2f220 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2f230 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
2f240 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
2f250 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
2f260 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  w ){.    break;.
2f270 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
2f280 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  ur->pVtabCursor-
2f290 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
2f2a0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
2f2b0 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
2f2c0 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a  odule->xNext );.
2f2d0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
2f2e0 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20   xNext() method 
2f2f0 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54  of the module. T
2f300 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66  here is no way f
2f310 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65  or the.  ** unde
2f320 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74  rlying implement
2f330 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20  ation to return 
2f340 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20  an error if one 
2f350 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20  occurs during.  
2f360 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74  ** xNext(). Inst
2f370 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72  ead, if an error
2f380 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73   occurs, true is
2f390 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63   returned (indic
2f3a0 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a  ating that .  **
2f3b0 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62   data is availab
2f3c0 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f  le) and the erro
2f3d0 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  r code returned 
2f3e0 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a  when xColumn or.
2f3f0 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20    ** some other 
2f400 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69  method is next i
2f410 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61  nvoked on the sa
2f420 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ve virtual table
2f430 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
2f440 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2f450 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  = 1;.  rc = pMod
2f460 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d  ule->xNext(pCur-
2f470 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
2f480 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2f490 20 3d 20 30 3b 0a 20 20 69 6d 70 6f 72 74 56 74   = 0;.  importVt
2f4a0 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
2f4b0 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  b);.  if( rc==SQ
2f4c0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
2f4d0 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
2f4e0 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  of(pCur->pVtabCu
2f4f0 72 73 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66  rsor);.  }..  if
2f500 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a  ( !res ){.    /*
2f510 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74   If there is dat
2f520 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  a, jump to P2 */
2f530 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
2f540 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2f550 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2f560 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2f570 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2f580 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2f590 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2f5a0 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
2f5b0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2f5c0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2f5d0 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2f5e0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2f5f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2f600 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
2f610 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
2f620 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
2f630 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  g xRename method
2f640 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  . The value.** i
2f650 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
2f660 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a   passed as the z
2f670 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  Name argument to
2f680 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74   the xRename met
2f690 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  hod..*/.case OP_
2f6a0 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c  VRename: {.  sql
2f6b0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2f6c0 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a  ;.  Mem *pName;.
2f6d0 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
2f6e0 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
2f6f0 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d  .  pName = &aMem
2f700 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2f710 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64  ert( pVtab->pMod
2f720 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a  ule->xRename );.
2f730 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2f740 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20  alid(pName) );. 
2f750 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
2f760 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b  pOp->p1, pName);
2f770 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65  .  assert( pName
2f780 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
2f790 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  r );.  testcase(
2f7a0 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
2f7b0 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65  ITE_UTF8 );.  te
2f7c0 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
2f7d0 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
2f7e0 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  BE );.  testcase
2f7f0 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
2f800 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a  LITE_UTF16LE );.
2f810 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2f820 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2f830 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55  (pName, SQLITE_U
2f840 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  TF8);.  if( rc==
2f850 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2f860 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f   rc = pVtab->pMo
2f870 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56  dule->xRename(pV
2f880 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a  tab, pName->z);.
2f890 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72      importVtabEr
2f8a0 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rMsg(p, pVtab);.
2f8b0 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
2f8c0 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   0;.  }.  break;
2f8d0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
2f8e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2f8f0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2f900 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50  pcode: VUpdate P
2f910 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
2f920 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2f930 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2f940 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2f950 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2f960 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
2f970 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
2f980 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
2f990 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  g xUpdate method
2f9a0 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61  . P2 values.** a
2f9b0 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65  re contiguous me
2f9c0 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74  mory cells start
2f9d0 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73  ing at P3 to pas
2f9e0 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65  s to the xUpdate
2f9f0 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e   .** invocation.
2fa00 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   The value in re
2fa10 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29  gister (P3+P2-1)
2fa20 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2fa30 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65  the .** p2th ele
2fa40 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76  ment of the argv
2fa50 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f   array passed to
2fa60 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20   xUpdate..**.** 
2fa70 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  The xUpdate meth
2fa80 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c  od will do a DEL
2fa90 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54  ETE or an INSERT
2faa0 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65   or both..** The
2fab0 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74   argv[0] element
2fac0 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f   (which correspo
2fad0 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65  nds to memory ce
2fae0 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65  ll P3).** is the
2faf0 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20   rowid of a row 
2fb00 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61  to delete.  If a
2fb10 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74  rgv[0] is NULL t
2fb20 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74  hen no .** delet
2fb30 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65  ion occurs.  The
2fb40 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74   argv[1] element
2fb50 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
2fb60 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
2fb70 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e  .  This can be N
2fb80 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20  ULL to have the 
2fb90 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65  virtual table se
2fba0 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a  lect the new .**
2fbb0 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c   rowid for itsel
2fbc0 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65  f.  The subseque
2fbd0 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74  nt elements in t
2fbe0 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a  he array are .**
2fbf0 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63   the values of c
2fc00 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65  olumns in the ne
2fc10 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  w row..**.** If 
2fc20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e  P2==1 then no in
2fc30 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65  sert is performe
2fc40 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74  d.  argv[0] is t
2fc50 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61  he rowid of.** a
2fc60 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a   row to delete..
2fc70 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f  **.** P1 is a bo
2fc80 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69  olean flag. If i
2fc90 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65  t is set to true
2fca0 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65   and the xUpdate
2fcb0 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63   call.** is succ
2fcc0 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65  essful, then the
2fcd0 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
2fce0 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  by sqlite3_last_
2fcf0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a  insert_rowid() .
2fd00 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  ** is set to the
2fd10 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
2fd20 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20  wid for the row 
2fd30 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a  just inserted..*
2fd40 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74  /.case OP_VUpdat
2fd50 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
2fd60 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71  tab *pVtab;.  sq
2fd70 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2fd80 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72  odule;.  int nAr
2fd90 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71  g;.  int i;.  sq
2fda0 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64  lite_int64 rowid
2fdb0 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b  ;.  Mem **apArg;
2fdc0 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61  .  Mem *pX;..  a
2fdd0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d  ssert( pOp->p2==
2fde0 31 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d  1        || pOp-
2fdf0 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c  >p5==OE_Fail   |
2fe00 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f  | pOp->p5==OE_Ro
2fe10 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20 7c  llback .       |
2fe20 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62  | pOp->p5==OE_Ab
2fe30 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ort || pOp->p5==
2fe40 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70  OE_Ignore || pOp
2fe50 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65  ->p5==OE_Replace
2fe60 0a 20 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20  .  );.  pVtab = 
2fe70 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
2fe80 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2fe90 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  = (sqlite3_modul
2fea0 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e *)pVtab->pModu
2feb0 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70  le;.  nArg = pOp
2fec0 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
2fed0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2fee0 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c  VTAB );.  if( AL
2fef0 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55  WAYS(pModule->xU
2ff00 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38  pdate) ){.    u8
2ff10 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20   vtabOnConflict 
2ff20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66  = db->vtabOnConf
2ff30 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20  lict;.    apArg 
2ff40 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20  = p->apArg;.    
2ff50 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  pX = &aMem[pOp->
2ff60 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  p3];.    for(i=0
2ff70 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
2ff80 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
2ff90 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a  mIsValid(pX) );.
2ffa0 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
2ffb0 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20  Change(p, pX);. 
2ffc0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2ffd0 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 58 29  MemStoreType(pX)
2ffe0 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d  ;.      apArg[i]
2fff0 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b   = pX;.      pX+
30000 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d  +;.    }.    db-
30010 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20  >vtabOnConflict 
30020 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72  = pOp->p5;.    r
30030 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  c = pModule->xUp
30040 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67  date(pVtab, nArg
30050 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29  , apArg, &rowid)
30060 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e  ;.    db->vtabOn
30070 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f  Conflict = vtabO
30080 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 69  nConflict;.    i
30090 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
300a0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69  p, pVtab);.    i
300b0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
300c0 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20   && pOp->p1 ){. 
300d0 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72       assert( nAr
300e0 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20  g>1 && apArg[0] 
300f0 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c  && (apArg[0]->fl
30100 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b  ags&MEM_Null) );
30110 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52  .      db->lastR
30120 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
30130 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a   = rowid;.    }.
30140 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
30150 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26  TE_CONSTRAINT &&
30160 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
30170 62 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20  bConstraint ){. 
30180 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
30190 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20  ==OE_Ignore ){. 
301a0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
301b0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c  TE_OK;.      }el
301c0 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65  se{.        p->e
301d0 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70  rrorAction = ((p
301e0 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61  Op->p5==OE_Repla
301f0 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a  ce) ? OE_Abort :
30200 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20   pOp->p5);.     
30210 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
30220 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b      p->nChange++
30230 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
30240 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
30250 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
30260 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
30270 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d  fndef  SQLITE_OM
30280 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
30290 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65  ./* Opcode: Page
302a0 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  count P1 P2 * * 
302b0 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
302c0 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72  e current number
302d0 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74   of pages in dat
302e0 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f  abase P1 to memo
302f0 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63  ry cell P2..*/.c
30300 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74  ase OP_Pagecount
30310 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
30320 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
30330 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  e */.  pOut->u.i
30340 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
30350 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b  astPage(db->aDb[
30360 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20  pOp->p1].pBt);. 
30370 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
30380 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49  ...#ifndef  SQLI
30390 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
303a0 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  AGMAS./* Opcode:
303b0 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32 20   MaxPgcnt P1 P2 
303c0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79  P3 * *.**.** Try
303d0 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69   to set the maxi
303e0 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66  mum page count f
303f0 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 74  or database P1 t
30400 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50  o the value in P
30410 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74  3..** Do not let
30420 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
30430 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c  e count fall bel
30440 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  ow the current p
30450 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a  age count and.**
30460 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74   do not change t
30470 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
30480 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50  count value if P
30490 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  3==0..**.** Stor
304a0 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  e the maximum pa
304b0 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74  ge count after t
304c0 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67  he change in reg
304d0 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
304e0 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b  e OP_MaxPgcnt: {
304f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
30500 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
30510 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
30520 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65   newMax;.  Btree
30530 20 2a 70 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20   *pBt;..  pBt = 
30540 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
30550 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d  .pBt;.  newMax =
30560 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   0;.  if( pOp->p
30570 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20  3 ){.    newMax 
30580 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
30590 73 74 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20  stPage(pBt);.   
305a0 20 69 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75   if( newMax < (u
305b0 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20  nsigned)pOp->p3 
305c0 29 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69  ) newMax = (unsi
305d0 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20  gned)pOp->p3;.  
305e0 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
305f0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50  sqlite3BtreeMaxP
30600 61 67 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65  ageCount(pBt, ne
30610 77 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  wMax);.  break;.
30620 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  }.#endif...#ifnd
30630 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
30640 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  RACE./* Opcode: 
30650 54 72 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a  Trace * * * P4 *
30660 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
30670 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
30680 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
30690 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
306a0 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
306b0 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
306c0 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
306d0 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
306e0 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63  e callback..*/.c
306f0 61 73 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a  ase OP_Trace: {.
30700 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a    char *zTrace;.
30710 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66    char *z;..  if
30720 28 20 64 62 2d 3e 78 54 72 61 63 65 0a 20 20 20  ( db->xTrace.   
30730 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75  && !p->doingReru
30740 6e 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20  n.   && (zTrace 
30750 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70  = (pOp->p4.z ? p
30760 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53  Op->p4.z : p->zS
30770 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ql))!=0.  ){.   
30780 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   z = sqlite3Vdbe
30790 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72  ExpandSql(p, zTr
307a0 61 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54  ace);.    db->xT
307b0 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41  race(db->pTraceA
307c0 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69  rg, z);.    sqli
307d0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 29  te3DbFree(db, z)
307e0 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c  ;.  }.#ifdef SQL
307f0 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
30800 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
30810 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30  ITE_SqlTrace)!=0
30820 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d  .   && (zTrace =
30830 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
30840 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
30850 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  l))!=0.  ){.    
30860 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
30870 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25  tf("SQL-trace: %
30880 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20  s\n", zTrace);. 
30890 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
308a0 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 62  ITE_DEBUG */.  b
308b0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
308c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70  ./* Opcode: Noop
308d0 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
308e0 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68   Do nothing.  Th
308f0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
30900 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61  s often useful a
30910 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74  s a jump.** dest
30920 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a  ination..*/./*.*
30930 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c  * The magic Expl
30940 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f  ain opcode are o
30950 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65  nly inserted whe
30960 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68  n explain==2 (wh
30970 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79  ich.** is to say
30980 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49   when the EXPLAI
30990 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e  N QUERY PLAN syn
309a0 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a  tax is used.).**
309b0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63   This opcode rec
309c0 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ords information
309d0 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69   from the optimi
309e0 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a  zer.  It is the.
309f0 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61  ** the same as a
30a00 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70   no-op.  This op
30a10 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61  codesnever appea
30a20 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20  rs in a real VM 
30a30 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61  program..*/.defa
30a40 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ult: {          
30a50 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c  /* This is reall
30a60 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50  y OP_Noop and OP
30a70 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73  _Explain */.  as
30a80 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
30a90 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f  e==OP_Noop || pO
30aa0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78  p->opcode==OP_Ex
30ab0 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b  plain );.  break
30ac0 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ;.}../**********
30ad0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30ae0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30af0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30b00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30b10 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73  ***.** The cases
30b20 20 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73   of the switch s
30b30 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74  tatement above t
30b40 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20  his line should 
30b50 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a  all be indented.
30b60 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20  ** by 6 spaces. 
30b70 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f   But the left-mo
30b80 73 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65  st 6 spaces have
30b90 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f   been removed to
30ba0 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20   improve the.** 
30bb0 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72  readability.  Fr
30bc0 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e  om this point on
30bd0 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61   down, the norma
30be0 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75  l indentation ru
30bf0 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f  les are.** resto
30c00 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  red..***********
30c10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30c20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30c30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30c40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30c50 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65  **/.    }..#ifde
30c60 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
30c70 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65     {.      u64 e
30c80 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65 33  lapsed = sqlite3
30c90 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74  Hwtime() - start
30ca0 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79 63  ;.      pOp->cyc
30cb0 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a  les += elapsed;.
30cc0 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b        pOp->cnt++
30cd0 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20  ;.#if 0.        
30ce0 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20  fprintf(stdout, 
30cf0 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73  "%10llu ", elaps
30d00 65 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ed);.        sql
30d10 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
30d20 73 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20  stdout, origPc, 
30d30 26 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23  &aOp[origPc]);.#
30d40 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64  endif.    }.#end
30d50 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66  if..    /* The f
30d60 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64  ollowing code ad
30d70 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68  ds nothing to th
30d80 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f  e actual functio
30d90 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  nality.    ** of
30da0 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49   the program.  I
30db0 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66  t is only here f
30dc0 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64  or testing and d
30dd0 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a  ebugging..    **
30de0 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61   On the other ha
30df0 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e  nd, it does burn
30e00 20 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72   CPU cycles ever
30e10 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20  y time through. 
30e20 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61     ** the evalua
30e30 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65  tor loop.  So we
30e40 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75   can leave it ou
30e50 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73  t when NDEBUG is
30e60 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
30e70 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
30e80 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
30e90 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20  -1 && pc<p->nOp 
30ea0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
30eb0 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
30ec0 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
30ed0 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 66 70    if( rc!=0 ) fp
30ee0 72 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22  rintf(p->trace,"
30ef0 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20  rc=%d\n",rc);.  
30f00 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
30f10 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55  lags & (OPFLG_OU
30f20 54 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50  T2_PRERELEASE|OP
30f30 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20  FLG_OUT2) ){.   
30f40 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
30f50 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70  ce(p->trace, pOp
30f60 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p2, &aMem[pOp-
30f70 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p2]);.      }. 
30f80 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70       if( pOp->op
30f90 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
30fa0 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  T3 ){.        re
30fb0 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74  gisterTrace(p->t
30fc0 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 26  race, pOp->p3, &
30fd0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
30fe0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
30ff0 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ndif  /* SQLITE_
31000 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
31010 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20   /* NDEBUG */.  
31020 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66  }  /* The end of
31030 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f   the for(;;) loo
31040 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f  p the loops thro
31050 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a  ugh opcodes */..
31060 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
31070 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20   this point, it 
31080 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75  means that execu
31090 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64  tion is finished
310a0 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72   with.  ** an er
310b0 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ror of some kind
310c0 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f  ..  */.vdbe_erro
310d0 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74  r_halt:.  assert
310e0 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20  ( rc );.  p->rc 
310f0 3d 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65  = rc;.  testcase
31100 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
31110 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
31120 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72  .  sqlite3_log(r
31130 63 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62  c, "statement ab
31140 6f 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d  orts at %d: [%s]
31150 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20   %s", .         
31160 20 20 20 20 20 20 20 20 20 20 70 63 2c 20 70 2d            pc, p-
31170 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
31180 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
31190 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20  eHalt(p);.  if( 
311a0 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc==SQLITE_IOERR
311b0 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c  _NOMEM ) db->mal
311c0 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
311d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
311e0 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74 53  OR;.  if( resetS
311f0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29  chemaOnFault>0 )
31200 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73  {.    sqlite3Res
31210 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20  etOneSchema(db, 
31220 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
31230 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  lt-1);.  }..  /*
31240 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
31250 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69  y way out of thi
31260 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65  s procedure.  We
31270 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65   have to.  ** re
31280 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78 65  lease the mutexe
31290 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74  s on btrees that
312a0 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20 61   were acquired a
312b0 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20  t the.  ** top. 
312c0 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a  */.vdbe_return:.
312d0 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
312e0 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 73  = lastRowid;.  s
312f0 71 6c 69 74 65 33 56 64 62 65 4c 65 61 76 65 28  qlite3VdbeLeave(
31300 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  p);.  return rc;
31310 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
31320 65 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20  ere if a string 
31330 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74  or blob larger t
31340 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  han SQLITE_MAX_L
31350 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e  ENGTH.  ** is en
31360 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a  countered..  */.
31370 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74  too_big:.  sqlit
31380 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
31390 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74  zErrMsg, db, "st
313a0 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f  ring or blob too
313b0 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53   big");.  rc = S
313c0 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20  QLITE_TOOBIG;.  
313d0 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
313e0 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
313f0 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61   to here if a ma
31400 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20  lloc() fails..  
31410 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d  */.no_mem:.  db-
31420 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
31430 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  1;.  sqlite3SetS
31440 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
31450 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d  g, db, "out of m
31460 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20  emory");.  rc = 
31470 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
31480 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
31490 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
314a0 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79   to here for any
314b0 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66   other kind of f
314c0 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65  atal error.  The
314d0 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20   "rc" variable. 
314e0 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20   ** should hold 
314f0 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72  the error number
31500 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
31510 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73  _to_error:.  ass
31520 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d  ert( p->zErrMsg=
31530 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  =0 );.  if( db->
31540 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72  mallocFailed ) r
31550 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
31560 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
31570 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
31580 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
31590 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
315a0 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
315b0 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
315c0 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
315d0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
315e0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
315f0 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   if the sqlite3_
31600 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20  interrupt() API 
31610 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75  sets the interru
31620 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20  pt.  ** flag..  
31630 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
31640 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73  interrupt:.  ass
31650 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e  ert( db->u1.isIn
31660 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72  terrupted );.  r
31670 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
31680 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  RUPT;.  p->rc = 
31690 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74  rc;.  sqlite3Set
316a0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
316b0 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
316c0 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
316d0 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
316e0 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a              ror_halt;.}.